mirror of
https://github.com/phpbb/phpbb.git
synced 2025-04-21 00:02:18 +02:00
Merge branch 'develop-ascraeus' into develop
This commit is contained in:
commit
1981f4f966
@ -16,15 +16,28 @@ namespace phpbb;
|
||||
class error_collector
|
||||
{
|
||||
var $errors;
|
||||
var $error_types;
|
||||
|
||||
function __construct()
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* The variable $error_types may be set to a mask of PHP error types that
|
||||
* the collector should keep, e.g. `E_ALL`. If unset, the current value of
|
||||
* the error_reporting() function will be used to determine which errors
|
||||
* the collector will keep.
|
||||
*
|
||||
* @see PHPBB3-13306
|
||||
* @param int|null $error_types
|
||||
*/
|
||||
function __construct($error_types = null)
|
||||
{
|
||||
$this->errors = array();
|
||||
$this->error_types = $error_types;
|
||||
}
|
||||
|
||||
function install()
|
||||
{
|
||||
set_error_handler(array(&$this, 'error_handler'));
|
||||
set_error_handler(array(&$this, 'error_handler'), ($this->error_types !== null) ? $this->error_types : error_reporting());
|
||||
}
|
||||
|
||||
function uninstall()
|
||||
|
@ -17,7 +17,7 @@ class phpbb_error_collector_test extends phpbb_test_case
|
||||
{
|
||||
public function test_collection()
|
||||
{
|
||||
$collector = new \phpbb\error_collector;
|
||||
$collector = new \phpbb\error_collector(E_ALL | E_STRICT); // php set_error_handler() default
|
||||
$collector->install();
|
||||
|
||||
// Cause a warning
|
||||
@ -35,4 +35,32 @@ class phpbb_error_collector_test extends phpbb_test_case
|
||||
$this->assertStringStartsWith('Errno 2: Division by zero at ', $error_contents);
|
||||
$this->assertStringEndsWith(" line $line", $error_contents);
|
||||
}
|
||||
|
||||
public function test_collection_with_mask()
|
||||
{
|
||||
$collector = new \phpbb\error_collector(E_ALL & ~E_NOTICE); // not collecting notices
|
||||
$collector->install();
|
||||
|
||||
// Cause a warning
|
||||
1/0; $line = __LINE__;
|
||||
|
||||
// Cause a notice
|
||||
$array = array('ITEM' => 'value');
|
||||
$value = $array[ITEM]; $line2 = __LINE__;
|
||||
|
||||
$collector->uninstall();
|
||||
|
||||
// The notice should not be collected
|
||||
$this->assertEmpty($collector->errors[1]);
|
||||
|
||||
list($errno, $msg_text, $errfile, $errline) = $collector->errors[0];
|
||||
$error_contents = $collector->format_errors();
|
||||
|
||||
$this->assertEquals($errno, 2);
|
||||
|
||||
// Unfortunately $error_contents will contain the full path here,
|
||||
// because the tests directory is outside of phpbb root path.
|
||||
$this->assertStringStartsWith('Errno 2: Division by zero at ', $error_contents);
|
||||
$this->assertStringEndsWith(" line $line", $error_contents);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user