Add namespace.
This commit is contained in:
179
Tests/exception/ErrorHandlerTest.php
Normal file
179
Tests/exception/ErrorHandlerTest.php
Normal file
@ -0,0 +1,179 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* @copyright NetMonsters <team@netmonsters.ru>
|
||||
* @link http://netmonsters.ru
|
||||
* @package Majestic
|
||||
* @subpackage UnitTests
|
||||
* @since 2011-10-11
|
||||
*
|
||||
* Unit tests for ErrorHandler class
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/../../classes/Env.class.php';
|
||||
require_once dirname(__FILE__) . '/../../session/Session.php';
|
||||
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');
|
||||
ErrorHandler::init();
|
||||
$eh = set_error_handler($my_eh);
|
||||
$this->assertInternalType('array', $eh);
|
||||
$this->assertSame($eh, $my_eh);
|
||||
}
|
||||
|
||||
public function testHandleError()
|
||||
{
|
||||
$this->setExpectedException('ErrorException', 'test error');
|
||||
trigger_error("test error", E_USER_ERROR);
|
||||
}
|
||||
|
||||
public function testHandleAt()
|
||||
{
|
||||
$my_eh = array('ErrorHandler', 'error_handler');
|
||||
ErrorHandler::init();
|
||||
set_error_handler($my_eh);
|
||||
$var = '';
|
||||
$ok = @$var['some'];
|
||||
$this->assertSame('', $var);
|
||||
ob_start();
|
||||
$this->setExpectedException('ErrorException');
|
||||
$ex = $var['some'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @TODO: ErrorHandler->wrapTrace() not used
|
||||
*/
|
||||
public function testShowDebug()
|
||||
{
|
||||
try {
|
||||
throw new ErrorException("test error", E_USER_ERROR);
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @TODO: ErrorHandler::wrapTrace not used
|
||||
* @TODO: nl2br() adds html <br /> but leaves original linebreak line \n
|
||||
*/
|
||||
public function testWrapTrace()
|
||||
{
|
||||
$class = new ReflectionClass('ErrorHandler');
|
||||
$method = $class->getMethod('WrapTrace');
|
||||
$method->setAccessible(true);
|
||||
$result = $method->invoke(null, "first line\nsecond line");
|
||||
$this->assertSame("<code>first line<br />\nsecond line</code>", $result);
|
||||
$result = $method->invoke(null, "first line\r\nsecond line");
|
||||
$this->assertSame("<code>first line<br />\r\nsecond line</code>", $result);
|
||||
$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);
|
||||
}
|
||||
|
||||
/**
|
||||
* @runInSeparateProcess
|
||||
*/
|
||||
public function testLogErrorDefaultException()
|
||||
{
|
||||
$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: Exception: 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: Exception: 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: LogicException: 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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user