diff options
Diffstat (limited to 'tests/functions_acp')
| -rw-r--r-- | tests/functions_acp/build_cfg_template_test.php | 291 | ||||
| -rw-r--r-- | tests/functions_acp/build_select_test.php | 65 | ||||
| -rw-r--r-- | tests/functions_acp/h_radio_test.php | 130 | ||||
| -rw-r--r-- | tests/functions_acp/insert_config_array_test.php | 144 | ||||
| -rw-r--r-- | tests/functions_acp/validate_config_vars_test.php | 252 | ||||
| -rw-r--r-- | tests/functions_acp/validate_range_test.php | 168 | 
6 files changed, 1050 insertions, 0 deletions
| diff --git a/tests/functions_acp/build_cfg_template_test.php b/tests/functions_acp/build_cfg_template_test.php new file mode 100644 index 0000000000..8ae78b97db --- /dev/null +++ b/tests/functions_acp/build_cfg_template_test.php @@ -0,0 +1,291 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +require_once dirname(__FILE__) . '/../../phpBB/includes/functions_acp.php'; + +class phpbb_functions_acp_build_cfg_template_test extends phpbb_test_case +{ +	public function build_cfg_template_text_data() +	{ +		return array( +			array( +				array('text', 20, 255), +				'key_name', +				array('config_key_name'	=> '1'), +				'config_key_name', +				array(), +				'<input id="key_name" type="text" size="20" maxlength="255" name="config[config_key_name]" value="1" />', +			), +			array( +				array('password', 20, 128), +				'key_name', +				array('config_key_name'	=> '2'), +				'config_key_name', +				array(), +				'<input id="key_name" type="password" size="20" maxlength="128" name="config[config_key_name]" value="2" autocomplete="off" />', +			), +			array( +				array('text', 0, 255), +				'key_name', +				array('config_key_name'	=> '3'), +				'config_key_name', +				array(), +				'<input id="key_name" type="text" maxlength="255" name="config[config_key_name]" value="3" />', +			), +		); +	} + +	/** +	* @dataProvider build_cfg_template_text_data +	*/ +	public function test_build_cfg_template_text($tpl_type, $key, $new, $config_key, $vars, $expected) +	{ +		global $user, $phpbb_dispatcher; + +		$phpbb_dispatcher = new phpbb_mock_event_dispatcher(); +		$user = new phpbb_mock_user(); +		$user->lang = new phpbb_mock_lang(); + +		$this->assertEquals($expected, build_cfg_template($tpl_type, $key, $new, $config_key, $vars)); +	} + +	public function build_cfg_template_dimension_data() +	{ +		return array( +			array( +				array('dimension', 5, 15), +				'number_key_name', +				array('config_key_name_width' => 10, 'config_key_name_height' => 20), +				'config_key_name', +				array(), +				'<input id="number_key_name" type="number" size="2" maxlength="2" min="5" max="15" name="config[config_key_name_width]" value="10" /> x <input type="number" size="2" maxlength="2" min="5" max="15" name="config[config_key_name_height]" value="20" />', +			), +			array( +				array('dimension', 0, 15), +				'number_key_name', +				array('config_key_name_width' => 10, 'config_key_name_height' => 20), +				'config_key_name', +				array(), +				'<input id="number_key_name" type="number" size="2" maxlength="2" min="0" max="15" name="config[config_key_name_width]" value="10" /> x <input type="number" size="2" maxlength="2" min="0" max="15" name="config[config_key_name_height]" value="20" />', +			), +		); +	} + +	/** +	* @dataProvider build_cfg_template_dimension_data +	*/ +	public function test_build_cfg_template_dimension($tpl_type, $key, $new, $config_key, $vars, $expected) +	{ +		global $user, $phpbb_dispatcher; + +		$phpbb_dispatcher = new phpbb_mock_event_dispatcher(); +		$user = new phpbb_mock_user(); +		$user->lang = new phpbb_mock_lang(); + +		$this->assertEquals($expected, build_cfg_template($tpl_type, $key, $new, $config_key, $vars)); +	} + +	public function build_cfg_template_number_data() +	{ +		return array( +			array( +				array('number', 5, 15), +				'number_key_name', +				array('config_key_name' => 10), +				'config_key_name', +				array(), +				'<input id="number_key_name" type="number" maxlength="2" min="5" max="15" name="config[config_key_name]" value="10" />', +			), +			array( +				array('number', -1, 9999), +				'number_key_name', +				array('config_key_name' => 10), +				'config_key_name', +				array(), +				'<input id="number_key_name" type="number" maxlength="4" min="-1" max="9999" name="config[config_key_name]" value="10" />', +			), +		); +	} + +	/** +	* @dataProvider build_cfg_template_number_data +	*/ +	public function test_build_cfg_template_number($tpl_type, $key, $new, $config_key, $vars, $expected) +	{ +		global $user, $phpbb_dispatcher; + +		$phpbb_dispatcher = new phpbb_mock_event_dispatcher(); +		$user = new phpbb_mock_user(); +		$user->lang = new phpbb_mock_lang(); + +		$this->assertEquals($expected, build_cfg_template($tpl_type, $key, $new, $config_key, $vars)); +	} + +	public function build_cfg_template_textarea_data() +	{ +		return array( +			array( +				array('textarea', 5, 30), +				'key_name', +				array('config_key_name' => 'phpBB'), +				'config_key_name', +				array(), +				'<textarea id="key_name" name="config[config_key_name]" rows="5" cols="30">phpBB</textarea>', +			), +		); +	} + +	/** +	* @dataProvider build_cfg_template_textarea_data +	*/ +	public function test_build_cfg_template_textarea($tpl_type, $key, $new, $config_key, $vars, $expected) +	{ +		global $user, $phpbb_dispatcher; + +		$phpbb_dispatcher = new phpbb_mock_event_dispatcher(); +		$user = new phpbb_mock_user(); +		$user->lang = new phpbb_mock_lang(); + +		$this->assertEquals($expected, build_cfg_template($tpl_type, $key, $new, $config_key, $vars)); +	} + +	public function build_cfg_template_radio_data() +	{ +		return array( +			array( +				array('radio', 'enabled_disabled'), +				'key_name', +				array('config_key_name'	=> '0'), +				'config_key_name', +				array(), +				'<label><input type="radio" id="key_name" name="config[config_key_name]" value="1" class="radio" /> ENABLED</label><label><input type="radio" name="config[config_key_name]" value="0" checked="checked" class="radio" /> DISABLED</label>', +			), +			array( +				array('radio', 'enabled_disabled'), +				'key_name', +				array('config_key_name'	=> '1'), +				'config_key_name', +				array(), +				'<label><input type="radio" id="key_name" name="config[config_key_name]" value="1" checked="checked" class="radio" /> ENABLED</label><label><input type="radio" name="config[config_key_name]" value="0" class="radio" /> DISABLED</label>', +			), +			array( +				array('radio', 'yes_no'), +				'key_name', +				array('config_key_name'	=> '0'), +				'config_key_name', +				array(), +				'<label><input type="radio" id="key_name" name="config[config_key_name]" value="1" class="radio" /> YES</label><label><input type="radio" name="config[config_key_name]" value="0" checked="checked" class="radio" /> NO</label>', +			), +			array( +				array('radio', 'yes_no'), +				'key_name', +				array('config_key_name'	=> '1'), +				'config_key_name', +				array(), +				'<label><input type="radio" id="key_name" name="config[config_key_name]" value="1" checked="checked" class="radio" /> YES</label><label><input type="radio" name="config[config_key_name]" value="0" class="radio" /> NO</label>', +			), +		); +	} + +	/** +	* @dataProvider build_cfg_template_radio_data +	*/ +	public function test_build_cfg_template_radio($tpl_type, $key, $new, $config_key, $vars, $expected) +	{ +		global $user, $phpbb_dispatcher; + +		$phpbb_dispatcher = new phpbb_mock_event_dispatcher(); +		$user = new phpbb_mock_user(); +		$user->lang = new phpbb_mock_lang(); + +		$this->assertEquals($expected, build_cfg_template($tpl_type, $key, $new, $config_key, $vars)); +	} + +	public function build_cfg_template_append_data() +	{ +		return array( +			array( +				array('textarea', 5, 30), +				'key_name', +				array('config_key_name' => 'phpBB'), +				'config_key_name', +				array('append' => 'Bertie is cool!'), +				'<textarea id="key_name" name="config[config_key_name]" rows="5" cols="30">phpBB</textarea>Bertie is cool!', +			), +		); +	} + +	/** +	* @dataProvider build_cfg_template_append_data +	*/ +	public function test_build_cfg_template_append($tpl_type, $key, $new, $config_key, $vars, $expected) +	{ +		global $user, $phpbb_dispatcher; + +		$phpbb_dispatcher = new phpbb_mock_event_dispatcher(); +		$user = new phpbb_mock_user(); +		$user->lang = new phpbb_mock_lang(); + +		$this->assertEquals($expected, build_cfg_template($tpl_type, $key, $new, $config_key, $vars)); +	} + +	public function build_cfg_template_select_data() +	{ +		return array( +			array( +				array('select'), +				'key_name', +				array('config_key_name'	=> '0'), +				'config_key_name', +				array('method' => 'select_helper'), +				'<select id="key_name" name="config[config_key_name]"><option value="1">First_Option</option><option value="2" selected="selected">Second_Option</option><option value="3">Third_Option</option></select>', +			), +			array( +				array('select', 8), +				'key_name', +				array('config_key_name'	=> '1'), +				'config_key_name', +				array('method' => 'select_helper'), +				'<select id="key_name" name="config[config_key_name]" size="8"><option value="1">First_Option</option><option value="2" selected="selected">Second_Option</option><option value="3">Third_Option</option></select>', +			), +		); +	} + +	/** +	* @dataProvider build_cfg_template_select_data +	*/ +	public function test_build_cfg_template_select($tpl_type, $key, $new, $config_key, $vars, $expected) +	{ +		global $module, $user, $phpbb_dispatcher; + +		$phpbb_dispatcher = new phpbb_mock_event_dispatcher(); +		$user = new phpbb_mock_user(); +		$user->lang = new phpbb_mock_lang(); +		$user->module = $this; +		$module = $user; + +		$this->assertEquals($expected, build_cfg_template($tpl_type, $key, $new, $config_key, $vars)); +	} + +	public function select_helper() +	{ +		return build_select( +			array( +				'1'	=> 'First_Option', +				'2'	=> 'Second_Option', +				'3'	=> 'Third_Option', +			), +			'2' +		); +	} +} diff --git a/tests/functions_acp/build_select_test.php b/tests/functions_acp/build_select_test.php new file mode 100644 index 0000000000..ebdc58fd64 --- /dev/null +++ b/tests/functions_acp/build_select_test.php @@ -0,0 +1,65 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +require_once dirname(__FILE__) . '/../../phpBB/includes/functions_acp.php'; + +class phpbb_functions_acp_built_select_test extends phpbb_test_case +{ +	protected function setUp() +	{ +		parent::setUp(); + +		global $user; + +		$user = new phpbb_mock_user(); +		$user->lang = new phpbb_mock_lang(); +	} + +	public function build_select_data() +	{ +		return array( +			array( +				array( +					'test'		=> 'TEST', +					'second'	=> 'SEC_OPTION', +				), +				false, +				'<option value="test">TEST</option><option value="second">SEC_OPTION</option>', +			), +			array( +				array( +					'test'		=> 'TEST', +					'second'	=> 'SEC_OPTION', +				), +				'test', +				'<option value="test" selected="selected">TEST</option><option value="second">SEC_OPTION</option>', +			), +			array( +				array( +					'test'		=> 'TEST', +					'second'	=> 'SEC_OPTION', +				), +				'second', +				'<option value="test">TEST</option><option value="second" selected="selected">SEC_OPTION</option>', +			), +		); +	} + +	/** +	* @dataProvider build_select_data +	*/ +	public function test_build_select($option_ary, $option_default, $expected) +	{ +		$this->assertEquals($expected, build_select($option_ary, $option_default)); +	} +} diff --git a/tests/functions_acp/h_radio_test.php b/tests/functions_acp/h_radio_test.php new file mode 100644 index 0000000000..5ae4e91ea2 --- /dev/null +++ b/tests/functions_acp/h_radio_test.php @@ -0,0 +1,130 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +require_once dirname(__FILE__) . '/../../phpBB/includes/functions_acp.php'; + +class phpbb_functions_acp_h_radio_test extends phpbb_test_case +{ +	protected function setUp() +	{ +		parent::setUp(); + +		global $user; + +		$user = new phpbb_mock_user(); +		$user->lang = new phpbb_mock_lang(); +	} + +	public function h_radio_data() +	{ +		return array( +			array( +				'test_name', +				array( +					'test'		=> 'TEST', +					'second'	=> 'SEC_OPTION', +				), +				false, +				false, +				false, +				'<label><input type="radio" name="test_name" value="test" class="radio" /> TEST</label><label><input type="radio" name="test_name" value="second" class="radio" /> SEC_OPTION</label>', +			), +			array( +				'test_name', +				array( +					'test'		=> 'TEST', +					'second'	=> 'SEC_OPTION', +				), +				'test', +				false, +				false, +				'<label><input type="radio" name="test_name" value="test" checked="checked" class="radio" /> TEST</label><label><input type="radio" name="test_name" value="second" class="radio" /> SEC_OPTION</label>', +			), +			array( +				'test_name', +				array( +					'test'		=> 'TEST', +					'second'	=> 'SEC_OPTION', +				), +				false, +				'test_id', +				false, +				'<label><input type="radio" name="test_name" id="test_id" value="test" class="radio" /> TEST</label><label><input type="radio" name="test_name" value="second" class="radio" /> SEC_OPTION</label>', +			), +			array( +				'test_name', +				array( +					'test'		=> 'TEST', +					'second'	=> 'SEC_OPTION', +				), +				'test', +				'test_id', +				false, +				'<label><input type="radio" name="test_name" id="test_id" value="test" checked="checked" class="radio" /> TEST</label><label><input type="radio" name="test_name" value="second" class="radio" /> SEC_OPTION</label>', +			), + +			array( +				'test_name', +				array( +					'test'		=> 'TEST', +					'second'	=> 'SEC_OPTION', +				), +				false, +				false, +				'k', +				'<label><input type="radio" name="test_name" value="test" accesskey="k" class="radio" /> TEST</label><label><input type="radio" name="test_name" value="second" accesskey="k" class="radio" /> SEC_OPTION</label>', +			), +			array( +				'test_name', +				array( +					'test'		=> 'TEST', +					'second'	=> 'SEC_OPTION', +				), +				'test', +				false, +				'k', +				'<label><input type="radio" name="test_name" value="test" checked="checked" accesskey="k" class="radio" /> TEST</label><label><input type="radio" name="test_name" value="second" accesskey="k" class="radio" /> SEC_OPTION</label>', +			), +			array( +				'test_name', +				array( +					'test'		=> 'TEST', +					'second'	=> 'SEC_OPTION', +				), +				false, +				'test_id', +				'k', +				'<label><input type="radio" name="test_name" id="test_id" value="test" accesskey="k" class="radio" /> TEST</label><label><input type="radio" name="test_name" value="second" accesskey="k" class="radio" /> SEC_OPTION</label>', +			), +			array( +				'test_name', +				array( +					'test'		=> 'TEST', +					'second'	=> 'SEC_OPTION', +				), +				'test', +				'test_id', +				'k', +				'<label><input type="radio" name="test_name" id="test_id" value="test" checked="checked" accesskey="k" class="radio" /> TEST</label><label><input type="radio" name="test_name" value="second" accesskey="k" class="radio" /> SEC_OPTION</label>', +			), +		); +	} + +	/** +	* @dataProvider h_radio_data +	*/ +	public function test_h_radio($name, $input_ary, $input_default, $id, $key, $expected) +	{ +		$this->assertEquals($expected, h_radio($name, $input_ary, $input_default, $id, $key)); +	} +} diff --git a/tests/functions_acp/insert_config_array_test.php b/tests/functions_acp/insert_config_array_test.php new file mode 100644 index 0000000000..1264b35bf4 --- /dev/null +++ b/tests/functions_acp/insert_config_array_test.php @@ -0,0 +1,144 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +require_once dirname(__FILE__) . '/../../phpBB/includes/functions_acp.php'; + +class phpbb_functions_insert_config_array_test extends phpbb_test_case +{ +	public function config_display_vars() +	{ +		return array( +			'legend1'		=> '', +			'acp_config_1'	=> array(), +			'acp_config_2'	=> array(), +			'acp_config_3'	=> array(), +			'acp_config_4'	=> array(), +			'acp_config_5'	=> array(), +		); +	} + +	public function insert_config_array_data() +	{ +		return array( +			array( // Add a new config after 1st array item +				array('new_config_1' => array()), +				array('after' => 'legend1'), +				array( +					'legend1'		=> '', +					'new_config_1'	=> array(), +					'acp_config_1'	=> array(), +					'acp_config_2'	=> array(), +					'acp_config_3'	=> array(), +					'acp_config_4'	=> array(), +					'acp_config_5'	=> array(), +				), +			), +			array( // Add a new config after last array item +				array('new_config_1' => array()), +				array('after' => 'acp_config_5'), +				array( +					'legend1'		=> '', +					'acp_config_1'	=> array(), +					'acp_config_2'	=> array(), +					'acp_config_3'	=> array(), +					'acp_config_4'	=> array(), +					'acp_config_5'	=> array(), +					'new_config_1'	=> array(), +				), +			), +			array( // Add a new config before 2nd array item +				array('new_config_1' => array()), +				array('before' => 'acp_config_1'), +				array( +					'legend1'		=> '', +					'new_config_1'	=> array(), +					'acp_config_1'	=> array(), +					'acp_config_2'	=> array(), +					'acp_config_3'	=> array(), +					'acp_config_4'	=> array(), +					'acp_config_5'	=> array(), +				), +			), +			array( // Add a new config before last config item +				array('new_config_1' => array()), +				array('before' => 'acp_config_5'), +				array( +					'legend1'		=> '', +					'acp_config_1'	=> array(), +					'acp_config_2'	=> array(), +					'acp_config_3'	=> array(), +					'acp_config_4'	=> array(), +					'new_config_1'	=> array(), +					'acp_config_5'	=> array(), +				), +			), +			array( // When an array key does not exist +				array('new_config_1' => array()), +				array('after' => 'foobar'), +				array( +					'legend1'		=> '', +					'acp_config_1'	=> array(), +					'acp_config_2'	=> array(), +					'acp_config_3'	=> array(), +					'acp_config_4'	=> array(), +					'acp_config_5'	=> array(), +				), +			), +			array( // When after|before is not used correctly (defaults to after) +				array('new_config_1' => array()), +				array('foobar' => 'acp_config_1'), +				array( +					'legend1'		=> '', +					'acp_config_1'	=> array(), +					'new_config_1'	=> array(), +					'acp_config_2'	=> array(), +					'acp_config_3'	=> array(), +					'acp_config_4'	=> array(), +					'acp_config_5'	=> array(), +				), +			), +			array( // Add a new config set after the last array item +				array( +					'legend2' => array(), +					'new_config_1' => array(), +					'new_config_2' => array(), +					'new_config_3' => array(), +				), +				array('after' => 'acp_config_5'), +				array( +					'legend1'		=> '', +					'acp_config_1'	=> array(), +					'acp_config_2'	=> array(), +					'acp_config_3'	=> array(), +					'acp_config_4'	=> array(), +					'acp_config_5'	=> array(), +					'legend2' => array(), +					'new_config_1' => array(), +					'new_config_2' => array(), +					'new_config_3' => array(), +				), +			), +		); +	} + +	/** +	* @dataProvider insert_config_array_data +	*/ +	public function test_insert_config_array($new_config, $position, $expected) +	{ +		$config_array = $this->config_display_vars(); +		$new_config_array = phpbb_insert_config_array($config_array, $new_config, $position); + +		$this->assertSame($expected, $new_config_array); +	} +} diff --git a/tests/functions_acp/validate_config_vars_test.php b/tests/functions_acp/validate_config_vars_test.php new file mode 100644 index 0000000000..4bf6ba3984 --- /dev/null +++ b/tests/functions_acp/validate_config_vars_test.php @@ -0,0 +1,252 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +require_once dirname(__FILE__) . '/../../phpBB/includes/functions_acp.php'; +require_once dirname(__FILE__) . '/../../phpBB/includes/utf/utf_tools.php'; + +class phpbb_functions_acp_validate_config_vars_test extends phpbb_test_case +{ +	protected function setUp() +	{ +		parent::setUp(); + +		global $user; + +		$user = new phpbb_mock_user(); +		$user->lang = new phpbb_mock_lang(); +	} + +	/** +	* Data sets that don't throw an error. +	*/ +	public function validate_config_vars_fit_data() +	{ +		return array( +			array( +				array( +					'test_bool'				=> array('lang' => 'TEST_BOOL',			'validate' => 'bool'), +					'test_string'			=> array('lang' => 'TEST_STRING',		'validate' => 'string'), +					'test_string'			=> array('lang' => 'TEST_STRING',		'validate' => 'string'), +					'test_string_128'		=> array('lang' => 'TEST_STRING_128',	'validate' => 'string:128'), +					'test_string_128'		=> array('lang' => 'TEST_STRING_128',	'validate' => 'string:128'), +					'test_string_32_64'		=> array('lang' => 'TEST_STRING_32_64',	'validate' => 'string:32:64'), +					'test_string_32_64'		=> array('lang' => 'TEST_STRING_32_64',	'validate' => 'string:32:64'), +					'test_int'				=> array('lang' => 'TEST_INT',			'validate' => 'int'), +					'test_int_32'			=> array('lang' => 'TEST_INT',			'validate' => 'int:32'), +					'test_int_32_64'		=> array('lang' => 'TEST_INT',			'validate' => 'int:32:64'), +					'test_lang'				=> array('lang' => 'TEST_LANG',			'validate' => 'lang'), +					/* +					'test_sp'				=> array('lang' => 'TEST_SP',			'validate' => 'script_path'), +					'test_rpath'			=> array('lang' => 'TEST_RPATH',		'validate' => 'rpath'), +					'test_rwpath'			=> array('lang' => 'TEST_RWPATH',		'validate' => 'rwpath'), +					'test_path'				=> array('lang' => 'TEST_PATH',			'validate' => 'path'), +					'test_wpath'			=> array('lang' => 'TEST_WPATH',		'validate' => 'wpath'), +					*/ +				), +				array( +					'test_bool'			=> true, +					'test_string'		=> str_repeat('a', 255), +					'test_string'		=> str_repeat("\xC3\x84", 255), +					'test_string_128'	=> str_repeat('a', 128), +					'test_string_128'	=> str_repeat("\xC3\x84", 128), +					'test_string_32_64'	=> str_repeat('a', 48), +					'test_string_32_64'	=> str_repeat("\xC3\x84", 48), +					'test_int'			=> 128, +					'test_int_32'		=> 32, +					'test_int_32_64'	=> 48, +					'test_lang'			=> 'en', +				), +			), +		); +	} + +	/** +	* @dataProvider validate_config_vars_fit_data +	*/ +	public function test_validate_config_vars_fit($test_data, $cfg_array) +	{ +		$phpbb_error = array(); +		validate_config_vars($test_data, $cfg_array, $phpbb_error); + +		$this->assertEquals(array(), $phpbb_error); +	} + +	/** +	* Data sets that throw the error. +	*/ +	public function validate_config_vars_error_data() +	{ +		return array( +			array( +				array('test_string_32_64'		=> array('lang' => 'TEST_STRING_32_64',	'validate' => 'string:32:64')), +				array('test_string_32_64'	=> str_repeat('a', 20)), +				array('SETTING_TOO_SHORT'), +			), +			array( +				array('test_string_32_64'		=> array('lang' => 'TEST_STRING_32_64',	'validate' => 'string:32:64')), +				array('test_string_32_64'	=> str_repeat("\xC3\x84", 20)), +				array('SETTING_TOO_SHORT'), +			), +			array( +				array('test_string'		=> array('lang' => 'TEST_STRING',	'validate' => 'string')), +				array('test_string'		=> str_repeat('a', 256)), +				array('SETTING_TOO_LONG'), +			), +			array( +				array('test_string'		=> array('lang' => 'TEST_STRING',	'validate' => 'string')), +				array('test_string'		=> str_repeat("\xC3\x84", 256)), +				array('SETTING_TOO_LONG'), +			), +			array( +				array('test_string_32_64'	=> array('lang' => 'TEST_STRING_32_64',	'validate' => 'string:32:64')), +				array('test_string_32_64'	=> str_repeat('a', 65)), +				array('SETTING_TOO_LONG'), +			), +			array( +				array('test_string_32_64'	=> array('lang' => 'TEST_STRING_32_64',	'validate' => 'string:32:64')), +				array('test_string_32_64'	=> str_repeat("\xC3\x84", 65)), +				array('SETTING_TOO_LONG'), +			), + +			array( +				array('test_int_32'		=> array('lang' => 'TEST_INT',			'validate' => 'int:32')), +				array('test_int_32'		=> 31), +				array('SETTING_TOO_LOW'), +			), +			array( +				array('test_int_32_64'	=> array('lang' => 'TEST_INT',			'validate' => 'int:32:64')), +				array('test_int_32_64'	=> 31), +				array('SETTING_TOO_LOW'), +			), +			array( +				array('test_int_32_64'	=> array('lang' => 'TEST_INT',			'validate' => 'int:32:64')), +				array('test_int_32_64'	=> 65), +				array('SETTING_TOO_BIG'), +			), +			array( +				array( +					'test_int_min'	=> array('lang' => 'TEST_INT_MIN',		'validate' => 'int:32:64'), +					'test_int_max'	=> array('lang' => 'TEST_INT_MAX',		'validate' => 'int:32:64'), +				), +				array( +					'test_int_min'	=> 52, +					'test_int_max'	=> 48, +				), +				array('SETTING_TOO_LOW'), +			), +			array( +				array('test_lang'		=> array('lang' => 'TEST_LANG',			'validate' => 'lang')), +				array('test_lang'		=> 'this_is_no_language'), +				array('WRONG_DATA_LANG'), +			), +		); +	} + +	/** +	* @dataProvider validate_config_vars_error_data +	*/ +	public function test_validate_config_vars_error($test_data, $cfg_array, $expected) +	{ +		$phpbb_error = array(); +		validate_config_vars($test_data, $cfg_array, $phpbb_error); + +		$this->assertEquals($expected, $phpbb_error); +	} + +	public function data_validate_path_linux() +	{ +		return array( +			array('/usr/bin', 'absolute_path', true), +			array('/usr/bin/', 'absolute_path:50:200', true), +			array('/usr/bin/which', 'absolute_path', 'DIRECTORY_NOT_DIR'), +			array('/foo/bar', 'absolute_path', 'DIRECTORY_DOES_NOT_EXIST'), +			array('C:\Windows', 'absolute_path', 'DIRECTORY_DOES_NOT_EXIST'), +			array('.', 'absolute_path', true), +			array('', 'absolute_path', true), +			array('mkdir /foo/bar', 'absolute_path', 'DIRECTORY_DOES_NOT_EXIST'), +			// Make sure above command didn't do anything +			array('/foo/bar', 'absolute_path', 'DIRECTORY_DOES_NOT_EXIST'), +		); +	} + +	/** +	 * @dataProvider data_validate_path_linux +	 */ +	public function test_validate_path_linux($path, $validation_type, $expected) +	{ +		if (strtolower(substr(PHP_OS, 0, 5)) !== 'linux') +		{ +			$this->markTestSkipped('Unable to test linux specific paths on other OS.'); +		} + +		$error = array(); +		$config_ary = array( +			'path' => $path, +		); + +		validate_config_vars(array( +				'path'	=> array('lang' => 'FOOBAR', 'validate' => $validation_type), +			), +			$config_ary, +			$error +		); +	} + +	public function data_validate_path_windows() +	{ +		return array( +			array('C:\Windows', 'absolute_path', true), +			array('C:\Windows\\', 'absolute_path:50:200', true), +			array('C:\Windows\explorer.exe', 'absolute_path', 'DIRECTORY_NOT_DIR'), +			array('C:\foobar', 'absolute_path', 'DIRECTORY_DOES_NOT_EXIST'), +			array('/usr/bin', 'absolute_path', 'DIRECTORY_DOES_NOT_EXIST'), +			array('.', 'absolute_path', true), +			array('', 'absolute_path', true), +			array('mkdir C:\Windows\foobar', 'absolute_path', 'DIRECTORY_DOES_NOT_EXIST'), +			// Make sure above command didn't do anything +			array('C:\Windows\foobar', 'absolute_path', 'DIRECTORY_DOES_NOT_EXIST'), +		); +	} + +	/** +	 * @dataProvider data_validate_path_windows +	 */ +	public function test_validate_path_windows($path, $validation_type, $expected) +	{ +		if (strtolower(substr(PHP_OS, 0, 3)) !== 'win') +		{ +			$this->markTestSkipped('Unable to test windows specific paths on other OS.'); +		} + +		$error = array(); +		$config_ary = array( +			'path' => $path, +		); + +		validate_config_vars(array( +			'path'	=> array('lang' => 'FOOBAR', 'validate' => $validation_type), +		), +			$config_ary, +			$error +		); + +		if ($expected === true) +		{ +			$this->assertEmpty($error); +		} +		else +		{ +			$this->assertEquals(array($expected), $error); +		} +	} +} diff --git a/tests/functions_acp/validate_range_test.php b/tests/functions_acp/validate_range_test.php new file mode 100644 index 0000000000..6408e29a26 --- /dev/null +++ b/tests/functions_acp/validate_range_test.php @@ -0,0 +1,168 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +require_once dirname(__FILE__) . '/../../phpBB/includes/utf/utf_tools.php'; +require_once dirname(__FILE__) . '/../../phpBB/includes/functions_acp.php'; + +class phpbb_functions_acp_validate_range_test extends phpbb_test_case +{ +	protected function setUp() +	{ +		parent::setUp(); + +		global $user; + +		$user = new phpbb_mock_user(); +		$user->lang = new phpbb_mock_lang(); +	} + +	/** +	* Data sets that don't throw an error. +	*/ +	public function validate_range_data_fit() +	{ +		return array( +			array(array(array('column_type' => 'BOOL', 'lang' => 'TEST', 'value' => 0))), +			array(array(array('column_type' => 'BOOL', 'lang' => 'TEST', 'value' => 1))), + +			array(array(array('column_type' => 'USINT', 'lang' => 'TEST', 'value' => 0))), +			array(array(array('column_type' => 'USINT', 'lang' => 'TEST', 'value' => 65535))), +			array(array(array('column_type' => 'USINT:32:128', 'lang' => 'TEST', 'value' => 35))), + +			array(array(array('column_type' => 'UINT', 'lang' => 'TEST', 'value' => 0))), +			array(array(array('column_type' => 'UINT', 'lang' => 'TEST', 'value' => (int) 0x7fffffff))), +			array(array(array('column_type' => 'UINT:32:128', 'lang' => 'TEST', 'value' => 35))), + +			array(array(array('column_type' => 'INT', 'lang' => 'TEST', 'value' => (int) -2147483648))), +			array(array(array('column_type' => 'INT', 'lang' => 'TEST', 'value' => (int) 0x7fffffff))), +			array(array(array('column_type' => 'INT:-32:128', 'lang' => 'TEST', 'value' => -28))), +			array(array(array('column_type' => 'INT:-32:128', 'lang' => 'TEST', 'value' => 35))), + +			array(array(array('column_type' => 'TINT', 'lang' => 'TEST', 'value' => -128))), +			array(array(array('column_type' => 'TINT', 'lang' => 'TEST', 'value' => 127))), +			array(array(array('column_type' => 'TINT:-32:64', 'lang' => 'TEST', 'value' => -16))), +			array(array(array('column_type' => 'TINT:-32:64', 'lang' => 'TEST', 'value' => 16))), + +			array(array(array('column_type' => 'VCHAR', 'lang' => 'TEST', 'value' => ''))), +			array(array(array('column_type' => 'VCHAR', 'lang' => 'TEST', 'value' => str_repeat('a', 255)))), +			array(array(array('column_type' => 'VCHAR', 'lang' => 'TEST', 'value' => str_repeat("\xC3\x84", 255)))), +			array(array(array('column_type' => 'VCHAR:128', 'lang' => 'TEST', 'value' => str_repeat('a', 128)))), +			array(array(array('column_type' => 'VCHAR:128', 'lang' => 'TEST', 'value' => str_repeat("\xC3\x84", 128)))), +		); +	} + +	/** +	* @dataProvider validate_range_data_fit +	*/ +	public function test_validate_range_fit($test_data) +	{ +		$phpbb_error = array(); +		validate_range($test_data, $phpbb_error); + +		$this->assertEquals(array(), $phpbb_error); +	} + +	/** +	* Data sets that throw the SETTING_TOO_LOW-error. +	*/ +	public function validate_range_data_too_low() +	{ +		return array( +			array(array(array('column_type' => 'BOOL', 'lang' => 'TEST', 'value' => -1))), + +			array(array(array('column_type' => 'USINT', 'lang' => 'TEST', 'value' => -1))), +			array(array(array('column_type' => 'USINT:32:128', 'lang' => 'TEST', 'value' => 31))), + +			array(array(array('column_type' => 'UINT', 'lang' => 'TEST', 'value' => -1))), +			array(array(array('column_type' => 'UINT:32:128', 'lang' => 'TEST', 'value' => 31))), + +			array(array(array('column_type' => 'INT', 'lang' => 'TEST', 'value' => ((int) -2147483648) - 1))), +			array(array(array('column_type' => 'INT:32:128', 'lang' => 'TEST', 'value' => 31))), +			array(array(array('column_type' => 'INT:-32:128', 'lang' => 'TEST', 'value' => -33))), + +			array(array(array('column_type' => 'TINT', 'lang' => 'TEST', 'value' => -129))), +			array(array(array('column_type' => 'TINT:32:64', 'lang' => 'TEST', 'value' => 31))), +			array(array(array('column_type' => 'TINT:-32:64', 'lang' => 'TEST', 'value' => -33))), +		); +	} + +	/** +	* @dataProvider validate_range_data_too_low +	*/ +	public function test_validate_range_too_low($test_data) +	{ +		$phpbb_error = array(); +		validate_range($test_data, $phpbb_error); + +		$this->assertEquals(array('SETTING_TOO_LOW'), $phpbb_error); +	} + +	/** +	* Data sets that throw the SETTING_TOO_BIG-error. +	*/ +	public function validate_range_data_too_big() +	{ +		return array( +			array(array(array('column_type' => 'BOOL', 'lang' => 'TEST', 'value' => 2))), + +			array(array(array('column_type' => 'USINT', 'lang' => 'TEST', 'value' => 65536))), +			array(array(array('column_type' => 'USINT:32:128', 'lang' => 'TEST', 'value' => 129))), + +			array(array(array('column_type' => 'UINT', 'lang' => 'TEST', 'value' => ((int) 0x7fffffff) + 1))), +			array(array(array('column_type' => 'UINT:32:128', 'lang' => 'TEST', 'value' => 129))), + +			array(array(array('column_type' => 'INT', 'lang' => 'TEST', 'value' => ((int) 0x7fffffff) + 1))), +			array(array(array('column_type' => 'INT:-32:-16', 'lang' => 'TEST', 'value' => -15))), +			array(array(array('column_type' => 'INT:-32:128', 'lang' => 'TEST', 'value' => 129))), + +			array(array(array('column_type' => 'TINT', 'lang' => 'TEST', 'value' => 128))), +			array(array(array('column_type' => 'TINT:-32:-16', 'lang' => 'TEST', 'value' => -15))), +			array(array(array('column_type' => 'TINT:-32:64', 'lang' => 'TEST', 'value' => 65))), +		); +	} + +	/** +	* @dataProvider validate_range_data_too_big +	*/ +	public function test_validate_range_too_big($test_data) +	{ +		$phpbb_error = array(); +		validate_range($test_data, $phpbb_error); + +		$this->assertEquals(array('SETTING_TOO_BIG'), $phpbb_error); +	} + +	/** +	* Data sets that throw the SETTING_TOO_LONG-error. +	*/ +	public function validate_range_data_too_long() +	{ +		return array( +			array(array(array('column_type' => 'VCHAR', 'lang' => 'TEST', 'value' => str_repeat('a', 256)))), +			array(array(array('column_type' => 'VCHAR', 'lang' => 'TEST', 'value' => str_repeat("\xC3\x84", 256)))), +			array(array(array('column_type' => 'VCHAR:128', 'lang' => 'TEST', 'value' => str_repeat('a', 129)))), +			array(array(array('column_type' => 'VCHAR:128', 'lang' => 'TEST', 'value' => str_repeat("\xC3\x84", 129)))), +		); +	} + +	/** +	* @dataProvider validate_range_data_too_long +	*/ +	public function test_validate_range_too_long($test_data) +	{ +		$phpbb_error = array(); +		validate_range($test_data, $phpbb_error); + +		$this->assertEquals(array('SETTING_TOO_LONG'), $phpbb_error); +	} +} | 
