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 | 168 | ||||
| -rw-r--r-- | tests/request/request_var_test.php | 98 | ||||
| -rw-r--r-- | tests/request/type_cast_helper_test.php | 71 | 
4 files changed, 357 insertions, 2 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..2e19928a5a --- /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-2.0.php GNU General Public License v2 +* +*/ + +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..52c21abd2a --- /dev/null +++ b/tests/request/request_test.php @@ -0,0 +1,168 @@ +<?php +/** +* +* @package testing +* @version $Id$ +* @copyright (c) 2009 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +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'] = ''; +		$_FILES['test'] = array( +			'name' => 'file', +			'tmp_name' => 'tmp', +			'size' => 256, +			'type' => 'application/octet-stream', +			'error' => UPLOAD_ERR_OK, +		); + +		$_SERVER['HTTP_HOST'] = 'example.com'; +		$_SERVER['HTTP_ACCEPT'] = 'application/json'; +		$_SERVER['HTTP_SOMEVAR'] = '<value>'; + +		$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'); +		$this->assertEquals(256, $_FILES['test']['size']); + +		$_POST['x'] = 2; +		$this->assertEquals($_POST, $GLOBALS['_POST'], 'Checking whether $_POST can still be accessed via $GLOBALS[\'_POST\']'); +	} + +	public function test_server() +	{ +		$this->assertEquals('example.com', $this->request->server('HTTP_HOST')); +	} + +	public function test_server_escaping() +	{ +		$this->type_cast_helper +			->expects($this->once()) +			->method('recursive_set_var') +			->with( +				$this->anything(), +				'', +				true +			); + +		$this->request->server('HTTP_SOMEVAR'); +	} + +	public function test_header() +	{ +		$this->assertEquals('application/json', $this->request->header('Accept')); +	} + +	public function test_header_escaping() +	{ +		$this->type_cast_helper +			->expects($this->once()) +			->method('recursive_set_var') +			->with( +				$this->anything(), +				'', +				true +			); + +		$this->request->header('SOMEVAR'); +	} + +	public function test_file() +	{ +		$file = $this->request->file('test'); +		$this->assertEquals('file', $file['name']); +		$this->assertEquals('tmp', $file['tmp_name']); +		$this->assertEquals(256, $file['size']); +		$this->assertEquals('application/octet-stream', $file['type']); +		$this->assertEquals(UPLOAD_ERR_OK, $file['error']); +	} + +	public function test_file_not_exists() +	{ +		$file = $this->request->file('404'); +		$this->assertTrue(is_array($file)); +		$this->assertTrue(empty($file)); +	} + +	/** +	* 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_is_ajax_without_ajax() +	{ +		$this->assertFalse($this->request->is_ajax()); +	} + +	public function test_is_ajax_with_ajax() +	{ +		$this->request->enable_super_globals(); +		$_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'; +		$this->request = new phpbb_request($this->type_cast_helper); + +		$this->assertTrue($this->request->is_ajax()); +	} + +	public function test_is_secure() +	{ +		$this->assertFalse($this->request->is_secure()); + +		$this->request->enable_super_globals(); +		$_SERVER['HTTPS'] = 'on'; +		$this->request = new phpbb_request($this->type_cast_helper); + +		$this->assertTrue($this->request->is_secure()); +	} + +	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 0c07fe11a3..0e85d4694b 100644 --- a/tests/request/request_var_test.php +++ b/tests/request/request_var_test.php @@ -10,9 +10,18 @@  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  {  	/** +	* Makes sure request_var has its standard behaviour. +	*/ +	protected function setUp() +	{ +		parent::setUp(); +		request_var(false, false, false, false, false); +	} + +	/**  	* @dataProvider request_variables  	*/  	public function test_post($variable_value, $default, $multibyte, $expected) @@ -73,7 +82,48 @@ class phpbb_request_request_var_test extends phpbb_test_case  		unset($_GET[$var], $_POST[$var], $_REQUEST[$var], $_COOKIE[$var]);  	} -	static public function request_variables() +	/** +	* @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 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 function request_variables()  	{  		return array(  			// strings @@ -173,6 +223,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..f41db005af --- /dev/null +++ b/tests/request/type_cast_helper_test.php @@ -0,0 +1,71 @@ +<?php +/** +* +* @package testing +* @version $Id$ +* @copyright (c) 2009 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +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); +	} + +	public function test_simple_untrimmed_recursive_set_var() +	{ +		$data = " eviL<3\t\t"; +		$expected = " eviL<3\t\t"; + +		$this->type_cast_helper->recursive_set_var($data, '', true, false); + +		$this->assertEquals($expected, $data); +	} + +	public function test_nested_untrimmed_recursive_set_var() +	{ +		$data = array(" eviL<3\t\t"); +		$expected = array(" eviL<3\t\t"); + +		$this->type_cast_helper->recursive_set_var($data, array(0 => ''), true, false); + +		$this->assertEquals($expected, $data); +	} +}  | 
