diff options
Diffstat (limited to 'tests/request')
| -rw-r--r-- | tests/request/deactivated_super_global_test.php | 22 | ||||
| -rw-r--r-- | tests/request/request_test.php | 77 | ||||
| -rw-r--r-- | tests/request/request_var_test.php | 87 | ||||
| -rw-r--r-- | tests/request/type_cast_helper_test.php | 51 | 
4 files changed, 236 insertions, 1 deletions
diff --git a/tests/request/deactivated_super_global_test.php b/tests/request/deactivated_super_global_test.php new file mode 100644 index 0000000000..995f93443d --- /dev/null +++ b/tests/request/deactivated_super_global_test.php @@ -0,0 +1,22 @@ +<?php +/** +* +* @package testing +* @version $Id$ +* @copyright (c) 2009 phpBB Group +* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* +*/ + +class phpbb_deactivated_super_global_test extends phpbb_test_case +{ +	/** +	* Checks that on write access the correct error is thrown +	*/ +	public function test_write_triggers_error() +	{ +		$this->setExpectedTriggerError(E_USER_ERROR); +		$obj = new phpbb_request_deactivated_super_global($this->getMock('phpbb_request_interface'), 'obj', phpbb_request_interface::POST); +		$obj->offsetSet(0, 0); +	} +} diff --git a/tests/request/request_test.php b/tests/request/request_test.php new file mode 100644 index 0000000000..203c9fd880 --- /dev/null +++ b/tests/request/request_test.php @@ -0,0 +1,77 @@ +<?php +/** +* +* @package testing +* @version $Id$ +* @copyright (c) 2009 phpBB Group +* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* +*/ + +class phpbb_request_test extends phpbb_test_case +{ +	private $type_cast_helper; +	private $request; + +	protected function setUp() +	{ +		// populate super globals +		$_POST['test'] = 1; +		$_GET['test'] = 2; +		$_COOKIE['test'] = 3; +		$_REQUEST['test'] = 3; +		$_GET['unset'] = ''; + +		$this->type_cast_helper = $this->getMock('phpbb_request_type_cast_helper_interface'); + +		$this->request = new phpbb_request($this->type_cast_helper); +	} + +	public function test_toggle_super_globals() +	{ +		$this->assertTrue($this->request->super_globals_disabled(), 'Superglobals were not disabled'); + +		$this->request->enable_super_globals(); + +		$this->assertFalse($this->request->super_globals_disabled(), 'Superglobals were not enabled'); + +		$this->assertEquals(1, $_POST['test'], 'Checking $_POST after enable_super_globals'); +		$this->assertEquals(2, $_GET['test'], 'Checking $_GET after enable_super_globals'); +		$this->assertEquals(3, $_COOKIE['test'], 'Checking $_COOKIE after enable_super_globals'); +		$this->assertEquals(3, $_REQUEST['test'], 'Checking $_REQUEST after enable_super_globals'); + +		$_POST['x'] = 2; +		$this->assertEquals($_POST, $GLOBALS['_POST'], 'Checking whether $_POST can still be accessed via $GLOBALS[\'_POST\']'); +	} + +	/** +	* Checks that directly accessing $_POST will trigger +	* an error. +	*/ +	public function test_disable_post_super_global() +	{ +		$this->setExpectedTriggerError(E_USER_ERROR); +		$_POST['test'] = 3; +	} + +	public function test_is_set_post() +	{ +		$this->assertTrue($this->request->is_set_post('test')); +		$this->assertFalse($this->request->is_set_post('unset')); +	} + +	public function test_variable_names() +	{ +		$expected = array('test', 'unset'); +		$result = $this->request->variable_names(); +		$this->assertEquals($expected, $result); +	} + +	/** +	* Makes sure super globals work properly after these tests +	*/ +	protected function tearDown() +	{ +		$this->request->enable_super_globals(); +	} +} diff --git a/tests/request/request_var_test.php b/tests/request/request_var_test.php index fa17b1909f..6a0ede0106 100644 --- a/tests/request/request_var_test.php +++ b/tests/request/request_var_test.php @@ -10,7 +10,7 @@  require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';  require_once dirname(__FILE__) . '/../../phpBB/includes/utf/utf_tools.php'; -class phpbb_request_request_var_test extends phpbb_test_case +class phpbb_request_var_test extends phpbb_test_case  {  	/**  	* @dataProvider request_variables @@ -73,6 +73,47 @@ class phpbb_request_request_var_test extends phpbb_test_case  		unset($_GET[$var], $_POST[$var], $_REQUEST[$var], $_COOKIE[$var]);  	} +	/** +	* @dataProvider deep_access +	* Only possible with 3.1.x (later) +	*/ +	public function test_deep_multi_dim_array_access($path, $default, $expected) +	{ +		$this->unset_variables('var'); + +		// cannot set $_REQUEST directly because in phpbb_request implementation +		// $_REQUEST = $_POST + $_GET +		$_POST['var'] = array( +			0 => array( +				'b' => array( +					true => array( +						5 => 'c', +						6 => 'd', +					), +				), +			), +			2 => array( +				3 => array( +					false => 5, +				), +			), +		); + +		$result = request_var($path, $default); +		$this->assertEquals($expected, $result, 'Testing deep access to multidimensional input arrays: ' . $path); +	} + +	public static function deep_access() +	{ +		return array( +			// array(path, default, expected result) +			array(array('var', 0, 'b', true, 5), '', 'c'), +			array(array('var', 0, 'b', true, 6), '', 'd'), +			array(array('var', 2, 3, false), 0, 5), +			array(array('var', 0, 'b', true), array(0 => ''), array(5 => 'c', 6 => 'd')), +		); +	} +  	public static function request_variables()  	{  		return array( @@ -173,6 +214,50 @@ class phpbb_request_request_var_test extends phpbb_test_case  					'abc' => array()  				)  			), +			array( +				// input: +				array( +					0 => array(0 => array(3, '4', 'ab'), 1 => array()), +					1 => array(array(3, 4)), +				), +				// default: +				array(0 => array(0 => array(0))), +				false, +				// expected: +				array( +					0 => array(0 => array(3, 4, 0), 1 => array()), +					1 => array(array(3, 4)) +				) +			), +			array( +				// input: +				array( +					'ü' => array(array('c' => 'd')), +					'ä' => array(4 => array('a' => 2, 'ö' => 3)), +				), +				// default: +				array('' => array(0 => array('' => 0))), +				false, +				// expected: +				array( +					'??' => array(4 => array('a' => 2, '??' => 3)), +				) +			), +			array( +				// input: +				array( +					'ü' => array(array('c' => 'd')), +					'ä' => array(4 => array('a' => 2, 'ö' => 3)), +				), +				// default: +				array('' => array(0 => array('' => 0))), +				true, +				// expected: +				array( +					'ü' => array(array('c' => 0)), +					'ä' => array(4 => array('a' => 2, 'ö' => 3)), +				) +			),  		);  	} diff --git a/tests/request/type_cast_helper_test.php b/tests/request/type_cast_helper_test.php new file mode 100644 index 0000000000..06cf2e1bf6 --- /dev/null +++ b/tests/request/type_cast_helper_test.php @@ -0,0 +1,51 @@ +<?php +/** +* +* @package testing +* @version $Id$ +* @copyright (c) 2009 phpBB Group +* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* +*/ + +require_once dirname(__FILE__) . '/../../phpBB/includes/utf/utf_tools.php'; + +class phpbb_type_cast_helper_test extends phpbb_test_case +{ +	private $type_cast_helper; + +	protected function setUp() +	{ +		$this->type_cast_helper = new phpbb_request_type_cast_helper(); +	} + +	public function test_addslashes_recursively() +	{ +		$data = array('some"string' => array('that"' => 'really"', 'needs"' => '"escaping')); +		$expected = array('some\\"string' => array('that\\"' => 'really\\"', 'needs\\"' => '\\"escaping')); + +		$this->type_cast_helper->addslashes_recursively($data); + +		$this->assertEquals($expected, $data); +	} + +	public function test_simple_recursive_set_var() +	{ +		$data = 'eviL<3'; +		$expected = 'eviL<3'; + +		$this->type_cast_helper->recursive_set_var($data, '', true); + +		$this->assertEquals($expected, $data); +	} + +	public function test_nested_recursive_set_var() +	{ +		$data = array('eviL<3'); +		$expected = array('eviL<3'); + +		$this->type_cast_helper->recursive_set_var($data, array(0 => ''), true); + +		$this->assertEquals($expected, $data); +	} +}  | 
