public static function setupErrors()
{
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', TRUE);
ini_set('html_errors', FALSE);
ini_set('log_errors', FALSE);
set_exception_handler([__CLASS__, 'handleException']);
set_error_handler(function ($severity, $message, $file, $line) {
if (in_array($severity, [E_RECOVERABLE_ERROR, E_USER_ERROR], TRUE) || ($severity & error_reporting()) === $severity) {
self::handleException(new \ErrorException($message, 0, $severity, $file, $line));
}
return FALSE;
});
register_shutdown_function(function () {
Assert::$onFailure = [__CLASS__, 'handleException'];
// note that Runner is unable to catch this errors in CLI & PHP 5.4.0 - 5.4.6 due PHP bug #62725
$error = error_get_last();
register_shutdown_function(function () use($error) {
if (in_array($error['type'], [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE], TRUE)) {
if (($error['type'] & error_reporting()) !== $error['type']) {
// show fatal errors hidden by @shutup
self::removeOutputBuffers();
echo "\nFatal error: {$error['message']} in {$error['file']} on line {$error['line']}\n";
}
} elseif (self::$checkAssertions && !Assert::$counter) {
self::removeOutputBuffers();
echo "\nError: This test forgets to execute an assertion.\n";
exit(Runner\Job::CODE_FAIL);
}
});
});
}