Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 35 |
ErrorHandler | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
132 | |
0.00% |
0 / 35 |
handle(Suite $e) | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 10 |
|||
errorHandler($errno, $errstr, $errfile, $errline) | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 8 |
|||
shutdownHandler() | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 11 |
|||
getSubscribedEvents() | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
<?php | |
namespace Codeception\Subscriber; | |
use Codeception\Event\Suite; | |
use \Symfony\Component\EventDispatcher\EventSubscriberInterface; | |
class ErrorHandler implements EventSubscriberInterface | |
{ | |
/** | |
* @var bool $stopped to keep shutdownHandler from possible looping. | |
*/ | |
private static $stopped = false; | |
/** | |
* @var int stores bitmask for errors | |
*/ | |
private $errorLevel = 'E_ALL'; | |
public function handle(Suite $e) { | |
$settings = $e->getSettings(); | |
if ($settings['error_level']) { | |
$this->errorLevel = eval("return {$settings['error_level']};"); | |
} | |
error_reporting($this->errorLevel); | |
set_exception_handler(array($this, 'errorHandler')); | |
set_error_handler(array($this, 'errorHandler')); | |
register_shutdown_function(array($this, 'shutdownHandler')); | |
} | |
public function errorHandler($errno, $errstr, $errfile, $errline) { | |
if (!(error_reporting() & $errno)) { | |
// This error code is not included in error_reporting | |
return false; | |
} | |
if (strpos($errstr, 'Cannot modify header information')!==false) | |
return false; | |
throw new \ErrorException($errstr, 0, $errno, $errfile, $errline); | |
} | |
public function shutdownHandler() { | |
if (self::$stopped) | |
return; | |
self::$stopped = true; | |
$error = error_get_last(); | |
if (!is_array($error)) return; | |
if (error_reporting() === 0) return; | |
// not fatal | |
if ($error['type'] > 1) return; | |
echo "\n\n\nFATAL ERROR. TESTS NOT FINISHED.\n"; | |
echo sprintf("%s \nin %s:%d\n", $error['message'], $error['file'], $error['line']); | |
} | |
static function getSubscribedEvents() | |
{ | |
return array( | |
'suite.before' => 'handle' | |
); | |
} | |
} |