diff options
| author | Joas Schilling <nickvergessen@gmx.de> | 2015-01-09 18:39:26 +0100 | 
|---|---|---|
| committer | Joas Schilling <nickvergessen@gmx.de> | 2015-01-09 18:39:26 +0100 | 
| commit | 1981f4f9661c11d535c208088ad8df014957307f (patch) | |
| tree | 07f60c50d4ebf1e3ab7b83612607b57341b0fbc3 | |
| parent | a5007b7abdd00feb5bb17597a0e4e2ce0d6af6a3 (diff) | |
| parent | d9bdd05c8065eecc99c55b827a8af575fcb08f1b (diff) | |
| download | forums-1981f4f9661c11d535c208088ad8df014957307f.tar forums-1981f4f9661c11d535c208088ad8df014957307f.tar.gz forums-1981f4f9661c11d535c208088ad8df014957307f.tar.bz2 forums-1981f4f9661c11d535c208088ad8df014957307f.tar.xz forums-1981f4f9661c11d535c208088ad8df014957307f.zip | |
Merge branch 'develop-ascraeus' into develop
| -rw-r--r-- | phpBB/phpbb/error_collector.php | 17 | ||||
| -rw-r--r-- | tests/error_collector_test.php | 30 | 
2 files changed, 44 insertions, 3 deletions
| diff --git a/phpBB/phpbb/error_collector.php b/phpBB/phpbb/error_collector.php index 7141f83174..bf8efd1065 100644 --- a/phpBB/phpbb/error_collector.php +++ b/phpBB/phpbb/error_collector.php @@ -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() diff --git a/tests/error_collector_test.php b/tests/error_collector_test.php index 1d8ef367f5..b92c4fa6bb 100644 --- a/tests/error_collector_test.php +++ b/tests/error_collector_test.php @@ -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); +	}  } | 
