Separate function ErrorHandler::logError() and tests

This commit is contained in:
Anton Terekhov
2012-12-11 15:03:48 +04:00
parent d007f356c0
commit 91b364d01a
2 changed files with 131 additions and 8 deletions

View File

@ -17,13 +17,15 @@ require_once dirname(__FILE__) . '/../../exception/ErrorHandler.php';
class ErrorHandlerTest extends PHPUnit_Framework_TestCase
{
public $old_eh = array('PHPUnit_Util_ErrorHandler', 'handleError');
protected $log_file_name = 'error_log_file';
public function setUp()
{
{
set_error_handler(array('ErrorHandler', 'error_handler'));
ob_start();
}
public function testErrorHandlerInit()
{
$my_eh = array('ErrorHandler', 'error_handler');
@ -59,13 +61,14 @@ class ErrorHandlerTest extends PHPUnit_Framework_TestCase
{
try {
throw new ErrorException("test error", E_USER_ERROR);
} catch (ErrorException $e) {
}
catch (ErrorException $e) {
$_SESSION['some'] = 'value';
$result = ErrorHandler::showDebug($e);
$this->assertNotEmpty($result);
$this->assertStringStartsWith('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">', $result);
$this->assertStringEndsWith('</html>', $result);
}
}
}
/**
@ -84,10 +87,94 @@ class ErrorHandlerTest extends PHPUnit_Framework_TestCase
$result = $method->invoke(null, "first line\r\n\r\nsecond line");
$this->assertSame("<code>first line<br />\r\n<br />\r\nsecond line</code>", $result);
}
public function tearDown()
/**
* @runInSeparateProcess
*/
public function testLogErrorDefaultException()
{
set_error_handler($this->old_eh);
$ex = new Exception('message', 123);
ini_set('error_log', $this->log_file_name);
ErrorHandler::logError($ex);
$log = file_get_contents($this->log_file_name);
$this->assertContains('PHP Unknown Error: message in ', $log);
}
/**
* @runInSeparateProcess
*/
public function testLogErrorDefaultExceptionWithHTTP()
{
$_SERVER['REQUEST_METHOD'] = 'GET';
$_SERVER['REQUEST_URI'] = '/somelongurl';
$_SERVER['HTTP_REFERER'] = 'http://referrer/url';
$this->assertEquals('GET', ENV::Server('REQUEST_METHOD'));
$this->assertEquals('/somelongurl', ENV::Server('REQUEST_URI'));
$this->assertEquals('http://referrer/url', ENV::Server('HTTP_REFERER'));
$ex = new Exception('message', 123);
ini_set('error_log', $this->log_file_name);
ErrorHandler::logError($ex);
$log = file_get_contents($this->log_file_name);
$this->assertContains('PHP Unknown Error: message in ', $log);
$this->assertContains('URL: GET /somelongurl, referrer: http://referrer/url', $log);
}
/**
* @runInSeparateProcess
*/
public function testLogErrorCustomException()
{
$ex = new LogicException('Logic', 333);
ini_set('error_log', $this->log_file_name);
ErrorHandler::logError($ex);
$log = file_get_contents($this->log_file_name);
$this->assertContains('PHP Unknown Error: Logic in ', $log);
}
/**
* @runInSeparateProcess
*/
public function testLogErrorErrorExceptionNotice()
{
$ex = new ErrorException('message', 321, E_NOTICE);
ini_set('error_log', $this->log_file_name);
ErrorHandler::logError($ex);
$log = file_get_contents($this->log_file_name);
$this->assertContains('PHP Notice: message in ', $log);
}
/**
* @runInSeparateProcess
*/
public function testLogErrorErrorExceptionWarning()
{
$ex = new ErrorException('message', 321, E_WARNING);
ini_set('error_log', $this->log_file_name);
ErrorHandler::logError($ex);
$log = file_get_contents($this->log_file_name);
$this->assertContains('PHP Warning: message in ', $log);
}
/**
* @runInSeparateProcess
*/
public function testLogErrorErrorExceptionFatal()
{
$ex = new ErrorException('message', 321, E_ERROR);
ini_set('error_log', $this->log_file_name);
ErrorHandler::logError($ex);
$log = file_get_contents($this->log_file_name);
$this->assertContains('PHP Fatal Error: message in ', $log);
}
public function tearDown()
{
if (file_exists($this->log_file_name) && is_writable($this->log_file_name)) {
unlink($this->log_file_name);
}
ini_set('error_log', 'php://stderr');
set_error_handler($this->old_eh);
}
}