diff options
Diffstat (limited to 'tests')
24 files changed, 1239 insertions, 357 deletions
diff --git a/tests/RUNNING_TESTS.md b/tests/RUNNING_TESTS.md index d638c86859..afd7caa709 100644 --- a/tests/RUNNING_TESTS.md +++ b/tests/RUNNING_TESTS.md @@ -32,7 +32,6 @@ will be skipped:  - apc (APC cache driver)  - bz2 (compress tests) -- interbase, pdo_firebird (Firebird database driver)  - mysql, pdo_mysql (MySQL database driver)  - mysqli, pdo_mysql (MySQLi database driver)  - pcntl (flock class) @@ -82,16 +81,10 @@ Special Database Cases  ----------------------  In order to run tests on some of the databases that we support, it will be  necessary to provide a custom DSN string in test_config.php. This is only -needed for MSSQL 2000+ (PHP module), MSSQL via ODBC, and Firebird when -PDO_Firebird does not work on your system -(https://bugs.php.net/bug.php?id=61183). The variable must be named `$custom_dsn`. +needed for MSSQL 2000+ (PHP module) and MSSQL via ODBC. The variable must be +named `$custom_dsn`. -Examples: -Firebird using http://www.firebirdsql.org/en/odbc-driver/ - -    $custom_dsn = "Driver={Firebird/InterBase(r) driver};dbname=$dbhost:$dbname"; - -MSSQL +Example MSSQL:      $custom_dsn = "Driver={SQL Server Native Client 10.0};Server=$dbhost;Database=$dbname"; diff --git a/tests/console/cron/cron_list_test.php b/tests/console/cron/cron_list_test.php index 46705a585f..f04c14e847 100644 --- a/tests/console/cron/cron_list_test.php +++ b/tests/console/cron/cron_list_test.php @@ -98,6 +98,6 @@ class phpbb_console_command_cron_list_test extends phpbb_test_case  		$this->get_cron_manager($tasks);  		$this->command_tester = $this->get_command_tester(); -		$this->command_tester->execute(array('command' => $this->command_name, '--no-ansi' => true)); +		$this->command_tester->execute(array('command' => $this->command_name), array('decorated' => false));  	}  } diff --git a/tests/content_visibility/delete_post_test.php b/tests/content_visibility/delete_post_test.php index e0a2a3d402..99068729df 100644 --- a/tests/content_visibility/delete_post_test.php +++ b/tests/content_visibility/delete_post_test.php @@ -266,7 +266,7 @@ class phpbb_content_visibility_delete_post_test extends phpbb_database_test_case  	*/  	public function test_delete_post($forum_id, $topic_id, $post_id, $data, $is_soft, $reason, $expected_posts, $expected_topic, $expected_forum)  	{ -		global $auth, $cache, $config, $db, $phpbb_container, $phpbb_root_path, $phpEx; +		global $auth, $cache, $config, $db, $phpbb_container, $phpbb_dispatcher, $phpbb_root_path, $phpEx;  		$config['search_type'] = 'phpbb_mock_search';  		$cache = new phpbb_mock_cache; @@ -283,6 +283,8 @@ class phpbb_content_visibility_delete_post_test extends phpbb_database_test_case  			)));  		$user = $this->getMock('\phpbb\user'); +		$phpbb_dispatcher = new phpbb_mock_event_dispatcher(); +  		$phpbb_container = new phpbb_mock_container_builder();  		$phpbb_container->set('notification_manager', new phpbb_mock_notification_manager());  		$phpbb_container->set('content.visibility', new \phpbb\content_visibility($auth, $db, $user, $phpbb_root_path, $phpEx, FORUMS_TABLE, POSTS_TABLE, TOPICS_TABLE, USERS_TABLE)); diff --git a/tests/dbal/db_tools_test.php b/tests/dbal/db_tools_test.php index 320eac3bf3..f3c6888c8d 100644 --- a/tests/dbal/db_tools_test.php +++ b/tests/dbal/db_tools_test.php @@ -239,6 +239,24 @@ class phpbb_dbal_db_tools_test extends phpbb_database_test_case  		$this->assertFalse($this->tools->sql_column_exists('prefix_table_name', 'c_bug_12012'));  	} +	public function test_column_change_with_composite_primary() +	{ +		// Remove the old primary key +		$this->assertTrue($this->tools->sql_column_remove('prefix_table_name', 'c_id')); +		$this->assertTrue($this->tools->sql_column_add('prefix_table_name', 'c_id', array('UINT', 0))); + +		// Create a composite key +		$this->assertTrue($this->tools->sql_create_primary_key('prefix_table_name', array('c_id', 'c_uint'))); + +		// Create column +		$this->assertFalse($this->tools->sql_column_exists('prefix_table_name', 'c_bug_12643')); +		$this->assertTrue($this->tools->sql_column_add('prefix_table_name', 'c_bug_12643', array('DECIMAL', 0))); +		$this->assertTrue($this->tools->sql_column_exists('prefix_table_name', 'c_bug_12643')); + +		// Change type from int to string +		$this->assertTrue($this->tools->sql_column_change('prefix_table_name', 'c_bug_12643', array('VCHAR:100', ''))); +	} +  	public function test_column_remove()  	{  		$this->assertTrue($this->tools->sql_column_exists('prefix_table_name', 'c_int_size')); @@ -248,6 +266,17 @@ class phpbb_dbal_db_tools_test extends phpbb_database_test_case  		$this->assertFalse($this->tools->sql_column_exists('prefix_table_name', 'c_int_size'));  	} +	public function test_column_remove_similar_name() +	{ +		$this->assertTrue($this->tools->sql_column_exists('prefix_table_name', 'c_vchar')); +		$this->assertTrue($this->tools->sql_column_exists('prefix_table_name', 'c_vchar_size')); + +		$this->assertTrue($this->tools->sql_column_remove('prefix_table_name', 'c_vchar')); + +		$this->assertFalse($this->tools->sql_column_exists('prefix_table_name', 'c_vchar')); +		$this->assertTrue($this->tools->sql_column_exists('prefix_table_name', 'c_vchar_size')); +	} +  	public function test_column_remove_with_index()  	{  		// Create column diff --git a/tests/functional/posting_test.php b/tests/functional/posting_test.php index 2611ef7bf1..fd802eed45 100644 --- a/tests/functional/posting_test.php +++ b/tests/functional/posting_test.php @@ -36,4 +36,27 @@ class phpbb_functional_posting_test extends phpbb_functional_test_case  		$crawler = self::request('GET', "posting.php?mode=quote&f=2&t={$post2['topic_id']}&p={$post2['post_id']}&sid={$this->sid}");  		$this->assertContains('This is a test post posted by the testing framework.', $crawler->filter('html')->text());  	} + +	public function test_unsupported_characters() +	{ +		$this->login(); + +		$this->add_lang('posting'); + +		self::create_post(2, +			1, +			'Unsupported characters', +			"This is a test with these weird characters: \xF0\x9F\x88\xB3 \xF0\x9F\x9A\xB6", +			array(), +			'Your message contains the following unsupported characters' +		); + +		self::create_post(2, +			1, +			"Unsupported: \xF0\x9F\x88\xB3 \xF0\x9F\x9A\xB6", +			'This is a test with emoji characters in the topic title.', +			array(), +			'Your subject contains the following unsupported characters' +		); +	}  } diff --git a/tests/functional/ucp_profile_test.php b/tests/functional/ucp_profile_test.php index ea08eece78..e7abba9255 100644 --- a/tests/functional/ucp_profile_test.php +++ b/tests/functional/ucp_profile_test.php @@ -25,13 +25,25 @@ class phpbb_functional_ucp_profile_test extends phpbb_functional_test_case  		$this->assertContainsLang('UCP_PROFILE_PROFILE_INFO', $crawler->filter('#cp-main h2')->text());  		$form = $crawler->selectButton('Submit')->form(array( +			'pf_phpbb_facebook'	=> 'phpbb', +			'pf_phpbb_googleplus' => 'phpbb',  			'pf_phpbb_location'	=> 'Bertie´s Empire', +			'pf_phpbb_skype'	=> 'phpbb.skype.account', +			'pf_phpbb_twitter'	=> 'phpbb_twitter', +			'pf_phpbb_youtube' => 'phpbb.youtube',  		)); +  		$crawler = self::submit($form);  		$this->assertContainsLang('PROFILE_UPDATED', $crawler->filter('#message')->text());  		$crawler = self::request('GET', 'ucp.php?i=ucp_profile&mode=profile_info');  		$form = $crawler->selectButton('Submit')->form(); + +		$this->assertEquals('phpbb', $form->get('pf_phpbb_facebook')->getValue()); +		$this->assertEquals('phpbb', $form->get('pf_phpbb_googleplus')->getValue());  		$this->assertEquals('Bertie´s Empire', $form->get('pf_phpbb_location')->getValue()); +		$this->assertEquals('phpbb.skype.account', $form->get('pf_phpbb_skype')->getValue()); +		$this->assertEquals('phpbb_twitter', $form->get('pf_phpbb_twitter')->getValue()); +		$this->assertEquals('phpbb.youtube', $form->get('pf_phpbb_youtube')->getValue());  	}  } diff --git a/tests/functions/convert_30_dbms_to_31_test.php b/tests/functions/convert_30_dbms_to_31_test.php index 9647eb341c..a3992aef5c 100644 --- a/tests/functions/convert_30_dbms_to_31_test.php +++ b/tests/functions/convert_30_dbms_to_31_test.php @@ -18,7 +18,6 @@ class phpbb_convert_30_dbms_to_31_test extends phpbb_test_case  	public function convert_30_dbms_to_31_data()  	{  		return array( -			array('firebird'),  			array('mssql'),  			array('mssql_odbc'),  			array('mssqlnative'), diff --git a/tests/notification/user_list_trim_test.php b/tests/notification/user_list_trim_test.php index 7e0add2bb5..85d8961e82 100644 --- a/tests/notification/user_list_trim_test.php +++ b/tests/notification/user_list_trim_test.php @@ -75,7 +75,7 @@ class phpbb_notification_user_list_trim_test extends phpbb_database_test_case  					'post_username'	=> 'A',  					'responders'	=> null,			  				), -				'A replied to the topic “Test”.', +				'<strong>Reply</strong> from A in topic:',  			),  			array(  				array( @@ -86,7 +86,7 @@ class phpbb_notification_user_list_trim_test extends phpbb_database_test_case  						array('username' => '', 'poster_id' => 3),  					),			  				), -				'A and B replied to the topic “Test”.', +				'<strong>Reply</strong> from A and B in topic:',  			),  			array(  				array( @@ -98,7 +98,7 @@ class phpbb_notification_user_list_trim_test extends phpbb_database_test_case  						array('username' => '', 'poster_id' => 4),  					),			  				), -				'A, B, and C replied to the topic “Test”.', +				'<strong>Reply</strong> from A, B, and C in topic:',  			),  			array(  				array( @@ -111,7 +111,7 @@ class phpbb_notification_user_list_trim_test extends phpbb_database_test_case  						array('username' => '', 'poster_id' => 5),  					),			  				), -				'A, B, C, and D replied to the topic “Test”.', +				'<strong>Reply</strong> from A, B, C, and D in topic:',  			),  			array(  				array( @@ -125,7 +125,7 @@ class phpbb_notification_user_list_trim_test extends phpbb_database_test_case  						array('username' => '', 'poster_id' => 6),  					),			  				), -				'A, B, C, and 2 others replied to the topic “Test”.', +				'<strong>Reply</strong> from A, B, C, and 2 others in topic:',  			),  		);  	} diff --git a/tests/profile/custom_string_test.php b/tests/profile/custom_string_test.php deleted file mode 100644 index 9e45d05ae3..0000000000 --- a/tests/profile/custom_string_test.php +++ /dev/null @@ -1,120 +0,0 @@ -<?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'; - -class phpbb_profile_custom_string_test extends phpbb_database_test_case -{ -	public function getDataSet() -	{ -		return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/profile_fields.xml'); -	} - -	static public function string_fields() -	{ -		return array( -			// note, there is an offset of 1 between option_id (0-indexed) -			// in the database and values (1-indexed) to avoid problems with -			// transmitting 0 in an HTML form -			//    required, value, validation, expected, description -			array( -					1, -					'H3110', -					'[0-9]+', -					'FIELD_INVALID_CHARS_NUMBERS_ONLY-field', -					'Required field should reject characters in a numbers-only field', -			), -			array( -					1, -					'This string is too long', -					'.*', -					'FIELD_TOO_LONG-10-field', -					'Required field should reject a field too long', -			), -			array( -					0, -					'<>"&%&><>', -					'.*', -					false, -					'Optional field should accept html entities', -			), -			array( -					1, -					'ö ä ü ß', -					'.*', -					false, -					'Required field should accept UTF-8 string', -			), -			array( -					1, -					'This ö ä string has to b', -					'.*', -					'FIELD_TOO_LONG-10-field', -					'Required field should reject an UTF-8 string which is too long', -			), -			array( -					1, -					'ö äö äö ä', -					'[\w]+', -					'FIELD_INVALID_CHARS_ALPHA_ONLY-field', -					'Required field should reject UTF-8 in alpha only field', -			), -			array( -					1, -					'Hello', -					'[\w]+', -					false, -					'Required field should accept a characters only field', -			), -		); -	} - -	/** -	* @dataProvider string_fields -	*/ -	public function test_string_validate($field_required, $field_value, $field_validation, $expected, $description) -	{ -		$db = $this->new_dbal(); - -		$field_data = array( -			'field_id'          => 1, -			'lang_id'			=> 1, -			'lang_name'			=> 'field', -			'field_novalue'		=> 1, -			'field_required'    => $field_required, -			'field_maxlen'      => 10, -			'field_validation'  => $field_validation, -		); -		$user = $this->getMock('\phpbb\user'); -		$user->expects($this->any()) -			->method('lang') -			->will($this->returnCallback(array($this, 'return_callback_implode'))); - -		$request = $this->getMock('\phpbb\request\request'); -		$template = $this->getMock('\phpbb\template\template'); - -		$cp = new \phpbb\profilefields\type\type_string( -			$request, -			$template, -			$user -		); -		$result = $cp->validate_profile_field($field_value, $field_data); - -		$this->assertEquals($expected, $result, $description); -	} - -	public function return_callback_implode() -	{ -		return implode('-', func_get_args()); -	} -} diff --git a/tests/profile/custom_test.php b/tests/profile/custom_test.php deleted file mode 100644 index 8570e8e6ee..0000000000 --- a/tests/profile/custom_test.php +++ /dev/null @@ -1,75 +0,0 @@ -<?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. -* -*/ - -class phpbb_profile_custom_test extends phpbb_database_test_case -{ -	public function getDataSet() -	{ -		return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/profile_fields.xml'); -	} - -	static public function dropdown_fields() -	{ -		return array( -			// note, there is an offset of 1 between option_id (0-indexed) -			// in the database and values (1-indexed) to avoid problems with -			// transmitting 0 in an HTML form -			//    required, value, expected -			array(1,        '0',   'FIELD_INVALID_VALUE-field',	'Required field should throw error for out-of-range value'), -			array(1,        '1',   'FIELD_REQUIRED-field',		'Required field should throw error for default value'), -			array(1,        '2',   false,						'Required field should accept non-default value'), -			array(0,        '0',   'FIELD_INVALID_VALUE-field', 'Optional field should throw error for out-of-range value'), -			array(0,        '1',   false,						'Optional field should accept default value'), -			array(0,        '2',   false,						'Optional field should accept non-default value'), -		); -	} - -	/** -	* @dataProvider dropdown_fields -	*/ -	public function test_dropdown_validate($field_required, $field_value, $expected, $description) -	{ -		global $db, $table_prefix; -		$db = $this->new_dbal(); - -		$field_data = array( -			'field_id'			=> 1, -			'lang_id'			=> 1, -			'lang_name'			=> 'field', -			'field_novalue'		=> 1, -			'field_required'	=> $field_required, -		); -		$user = $this->getMock('\phpbb\user'); -		$user->expects($this->any()) -			->method('lang') -			->will($this->returnCallback(array($this, 'return_callback_implode'))); - -		$request = $this->getMock('\phpbb\request\request'); -		$template = $this->getMock('\phpbb\template\template'); - -		$cp = new \phpbb\profilefields\type\type_dropdown( -			new \phpbb\profilefields\lang_helper($db, $table_prefix . 'profile_fields_lang'), -			$request, -			$template, -			$user -		); -		$result = $cp->validate_profile_field($field_value, $field_data); - -		$this->assertEquals($expected, $result, $description); -	} - -	public function return_callback_implode() -	{ -		return implode('-', func_get_args()); -	} -} diff --git a/tests/profile/fixtures/profile_fields.xml b/tests/profile/fixtures/profile_fields.xml deleted file mode 100644 index e0c260bbf5..0000000000 --- a/tests/profile/fixtures/profile_fields.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<dataset> -	<table name="phpbb_profile_fields_lang"> -		<column>field_id</column> -		<column>lang_id</column> -		<column>option_id</column> -		<column>field_type</column> -		<column>lang_value</column> -		<row> -			<value>1</value> -			<value>1</value> -			<value>0</value> -			<value>profilefields.type.dropdown</value> -			<value>Default Option</value> -		</row> -		<row> -			<value>1</value> -			<value>1</value> -			<value>1</value> -			<value>profilefields.type.dropdown</value> -			<value>First Alternative</value> -		</row> -		<row> -			<value>1</value> -			<value>1</value> -			<value>2</value> -			<value>profilefields.type.dropdown</value> -			<value>Third Alternative</value> -		</row> -	</table> -</dataset> diff --git a/tests/profile/get_profile_value_test.php b/tests/profile/get_profile_value_test.php deleted file mode 100644 index 7a4a4ab5c2..0000000000 --- a/tests/profile/get_profile_value_test.php +++ /dev/null @@ -1,46 +0,0 @@ -<?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. -* -*/ - -class phpbb_profile_get_profile_value_test extends phpbb_test_case -{ -	static public function get_profile_value_int_data() -	{ -		return array( -			array('\phpbb\profilefields\type\type_int',	'10',	true,	10), -			array('\phpbb\profilefields\type\type_int',	'0',	true,	0), -			array('\phpbb\profilefields\type\type_int',	'',		true,	0), -			array('\phpbb\profilefields\type\type_int',	null,	true,	0), -			array('\phpbb\profilefields\type\type_int',	'10',	false,	10), -			array('\phpbb\profilefields\type\type_int',	'0',	false,	0), -			array('\phpbb\profilefields\type\type_int',	'',		false,	null), -			array('\phpbb\profilefields\type\type_int',	null,	false,	null), -		); -	} - -	/** -	* @dataProvider get_profile_value_int_data -	*/ -	public function test_get_profile_value_int($type, $value, $show_novalue, $expected) -	{ -		$cp = new $type( -			$this->getMock('\phpbb\request\request'), -			$this->getMock('\phpbb\template\template'), -			$this->getMock('\phpbb\user') -		); - -		$this->assertSame($expected, $cp->get_profile_value($value, array( -			'field_type'			=> $type, -			'field_show_novalue'	=> $show_novalue, -		))); -	} -} diff --git a/tests/profilefields/type_bool_test.php b/tests/profilefields/type_bool_test.php new file mode 100644 index 0000000000..29c118d57d --- /dev/null +++ b/tests/profilefields/type_bool_test.php @@ -0,0 +1,147 @@ +<?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. +* +*/ + +class phpbb_profilefield_type_bool_test extends phpbb_test_case +{ +	protected $cp; +	protected $field_options = array(); +	protected $options = array(); + +	/** +	* Sets up basic test objects +	* +	* @access public +	* @return void +	*/ +	public function setUp() +	{ +		$user = $this->getMock('\phpbb\user'); +		$user->expects($this->any()) +			->method('lang') +			->will($this->returnCallback(array($this, 'return_callback_implode'))); + +		$lang = $this->getMock('\phpbb\profilefields\lang_helper', array(), array(null, null)); + +		$lang->expects($this->any()) +			->method('get_options_lang'); + +		$lang->expects($this->any()) +			->method('is_set') +			->will($this->returnCallback(array($this, 'is_set_callback'))); + +		$lang->expects($this->any()) +			->method('get') +			->will($this->returnCallback(array($this, 'get'))); + +		$request = $this->getMock('\phpbb\request\request'); +		$template = $this->getMock('\phpbb\template\template'); + +		$this->cp = new \phpbb\profilefields\type\type_bool( +			$lang, +			$request, +			$template, +			$user +		); + +		$this->field_options = array( +			'field_type'       => '\phpbb\profilefields\type\type_bool', +			'field_name' 	   => 'field', +			'field_id'	 	   => 1, +			'lang_id'	 	   => 1, +			'lang_name'        => 'field', +			'field_required'   => false, +			'field_default_value' => 1, +			'field_length' => 1, +		); + +		$this->options = array( +			0 => 'Yes', +			1 => 'No', +		); +	} + +	public function validate_profile_field_data() +	{ +		return array( +			array( +					false, +					array('field_required' => true), +					'FIELD_REQUIRED-field', +					'Field should not accept empty values for required fields', +			), +		); +	} + +	/** +	* @dataProvider validate_profile_field_data +	*/ +	public function test_validate_profile_field($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->validate_profile_field($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function profile_value_data() +	{ +		return array( +			array( +				false, +				array('field_show_novalue' => true), +				'No', +				'Field should output the default value', +			), +			array( +				false, +				array('field_show_novalue' => false, 'field_length' => 2), +				null, +				'Field should not show anything for empty value', +			), +			array( +				0, +				array(), +				'Yes', +				'Field should show the set value', +			), +		); +	} + +	/** +	 * @dataProvider profile_value_data +	 */ +	public function test_get_profile_value($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->get_profile_value($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function is_set_callback($field_id, $lang_id, $field_value) +	{ +		return isset($this->options[$field_value]); +	} + +	public function get($field_id, $lang_id, $field_value) +	{ +		return $this->options[$field_value]; +	} + +	public function return_callback_implode() +	{ +		return implode('-', func_get_args()); +	} +} diff --git a/tests/profilefields/type_date_test.php b/tests/profilefields/type_date_test.php new file mode 100644 index 0000000000..39fe95b97f --- /dev/null +++ b/tests/profilefields/type_date_test.php @@ -0,0 +1,192 @@ +<?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. +* +*/ + +class phpbb_profilefield_type_date_test extends phpbb_test_case +{ +	protected $cp; +	protected $field_options; +	protected $user; + +	/** +	* Sets up basic test objects +	* +	* @access public +	* @return null +	*/ +	public function setUp() +	{ +		$this->user = $this->getMock('\phpbb\user'); +		$this->user->expects($this->any()) +			->method('lang') +			->will($this->returnCallback(array($this, 'return_callback_implode'))); + +		$this->user->expects($this->any()) +			->method('create_datetime') +			->will($this->returnCallback(array($this, 'create_datetime_callback'))); + +		$this->user->timezone = new DateTimeZone('UTC'); +		$this->user->lang = array( +			'datetime' => array(), +			'DATE_FORMAT' => 'm/d/Y', +		); + +		$request = $this->getMock('\phpbb\request\request'); +		$template = $this->getMock('\phpbb\template\template'); + +		$this->cp = new \phpbb\profilefields\type\type_date( +			$request, +			$template, +			$this->user +		); + +		$this->field_options = array( +			'field_type'     => '\phpbb\profilefields\type\type_date', +			'field_name' 	 => 'field', +			'field_id'	 	 => 1, +			'lang_id'	 	 => 1, +			'lang_name'      => 'field', +			'field_required' => false, +		); +	} + +	public function profile_value_data() +	{ +		return array( +			array( +				'01-01-2009', +				array('field_show_novalue' => true), +				'01/01/2009', +				'Field should output the correctly formatted date', +			), +			array( +				null, +				array('field_show_novalue' => false), +				null, +				'Field should leave empty value as is', +			), +			array( +				'None', +				array('field_show_novalue' => true), +				'None', +				'Field should leave invalid value as is', +			), +		); +	} + +	/** +	* @dataProvider profile_value_data +	*/ +	public function test_get_profile_value($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->get_profile_value($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function validate_profile_field_data() +	{ +		return array( +			array( +				'', +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'Field should reject value for being empty', +			), +			array( +				'0125', +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'Field should reject value for being invalid', +			), +			array( +				'01-01-2012', +				array(), +				false, +				'Field should accept a valid value', +			), +			array( +				'40-05-2009', +				array(), +				'FIELD_INVALID_DATE-field', +				'Field should reject value for being invalid', +			), +			array( +				'12-30-2012', +				array(), +				'FIELD_INVALID_DATE-field', +				'Field should reject value for being invalid', +			), +			array( +				'string', +				array(), +				false, +				'Field should reject value for being invalid', +			), +			array( +				'string', +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'Field should reject value for being invalid', +			), +			array( +				100, +				array(), +				false, +				'Field should reject value for being invalid', +			), +			array( +				100, +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'Field should reject value for being invalid', +			), +			array( +				null, +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'Field should reject value for being empty', +			), +			array( +				true, +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'Field should reject value for being empty', +			), +		); +	} + +	/** +	* @dataProvider validate_profile_field_data +	*/ +	public function test_validate_profile_field($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->validate_profile_field($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function return_callback_implode() +	{ +		return implode('-', func_get_args()); +	} + +	public function create_datetime_callback($time = 'now', \DateTimeZone $timezone = null) +	{ +		$timezone = $timezone ?: $this->user->timezone; +		return new \phpbb\datetime($this->user, $time, $timezone); +	} +} diff --git a/tests/profilefields/type_dropdown_test.php b/tests/profilefields/type_dropdown_test.php new file mode 100644 index 0000000000..0e92afd504 --- /dev/null +++ b/tests/profilefields/type_dropdown_test.php @@ -0,0 +1,187 @@ +<?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. +* +*/ + +class phpbb_profilefield_type_dropdown_test extends phpbb_test_case +{ +	protected $cp; +	protected $field_options = array(); +	protected $dropdown_options = array(); + +	/** +	* Sets up basic test objects +	* +	* @access public +	* @return null +	*/ +	public function setUp() +	{ +		$user = $this->getMock('\phpbb\user'); +		$user->expects($this->any()) +			->method('lang') +			->will($this->returnCallback(array($this, 'return_callback_implode'))); + +		$request = $this->getMock('\phpbb\request\request'); +		$template = $this->getMock('\phpbb\template\template'); + +		$lang = $this->getMock('\phpbb\profilefields\lang_helper', array(), array(null, null)); + +		$lang->expects($this->any()) +			 ->method('get_options_lang'); + +		$lang->expects($this->any()) +			 ->method('is_set') +			 ->will($this->returnCallback(array($this, 'is_set_callback'))); + +		$lang->expects($this->any()) +			 ->method('get') +			 ->will($this->returnCallback(array($this, 'get'))); + +		$this->cp = new \phpbb\profilefields\type\type_dropdown( +			$lang, +			$request, +			$template, +			$user +		); + +		$this->field_options = array( +			'field_type'       => '\phpbb\profilefields\type\type_dropdown', +			'field_name' 	   => 'field', +			'field_id'	 	   => 1, +			'lang_id'	 	   => 1, +			'lang_name'        => 'field', +			'field_required'   => false, +			'field_validation' => '.*', +			'field_novalue'    => 0, +		); + +		$this->dropdown_options = array( +			0 => '<No Value>', +			1 => 'Option 1', +			2 => 'Option 2', +			3 => 'Option 3', +			4 => 'Option 4', +		); +	} + +	public function validate_profile_field_data() +	{ +		return array( +			array( +				7, +				array(), +				'FIELD_INVALID_VALUE-field', +				'Invalid value should throw error', +			), +			array( +				true, +				array('field_required' => true), +				false, +				'Boolean would evaluate to 1 and hence correct value', +			), +			array( +				'string', +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'String should be rejected for value', +			), +			array( +				2, +				array(), +				false, +				'Valid value should not throw error' +			), +			array( +				0, +				array(), +				false, +				'Empty value should be acceptible', +			), +			array( +				0, +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'Required field should not accept empty value', +			), +		); +	} + +	/** +	* @dataProvider validate_profile_field_data +	*/ +	public function test_validate_profile_field($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->validate_profile_field($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function profile_value_data() +	{ +		return array( +			array( +				1, +				array('field_show_novalue' => true), +				'Option 1', +				'Field should output the given value', +			), +			array( +				4, +				array('field_show_novalue' => false), +				'Option 4', +				'Field should output the given value', +			), +			array( +				'', +				array('field_show_novalue' => true), +				'<No Value>', +				'Field should output nothing for empty value', +			), +			array( +				'', +				array('field_show_novalue' => false), +				null, +				'Field should simply output null for empty value', +			), +		); +	} + + +	/** +	* @dataProvider profile_value_data +	*/ +	public function test_get_profile_value($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->get_profile_value($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function is_set_callback($field_id, $lang_id, $field_value) +	{ +		return isset($this->dropdown_options[$field_value]); +	} + +	public function get($field_id, $lang_id, $field_value) +	{ +		return $this->dropdown_options[$field_value]; +	} + +	public function return_callback_implode() +	{ +		return implode('-', func_get_args()); +	} +} diff --git a/tests/profilefields/type_googleplus_test.php b/tests/profilefields/type_googleplus_test.php new file mode 100644 index 0000000000..fdbdd86553 --- /dev/null +++ b/tests/profilefields/type_googleplus_test.php @@ -0,0 +1,62 @@ +<?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. +* +*/ + +class phpbb_profilefield_type_googleplus_test extends phpbb_test_case +{ +	public function get_profile_contact_value_data() +	{ +		return array( +			array( +				'112010191010100', +				array(), +				'112010191010100', +				'Field should return a numerical Google+ ID as is', +			), +			array( +				'TestUsername', +				array(), +				'+TestUsername', +				'Field should return a string Google+ ID with a + prefixed', +			), +		); +	} + +	/** +	* @dataProvider get_profile_contact_value_data +	*/ +	public function test_get_profile_contact_value($value, $field_options, $expected, $description) +	{ +		$user = $this->getMock('\phpbb\user'); +		$request = $this->getMock('\phpbb\request\request'); +		$template = $this->getMock('\phpbb\template\template'); + +		$field = new \phpbb\profilefields\type\type_googleplus( +			$request, +			$template, +			$user +		); + +		$default_field_options = array( +			'field_type'       => '\phpbb\profilefields\type\type_googleplus', +			'field_name' 	   => 'field', +			'field_id'	 	   => 1, +			'lang_id'	 	   => 1, +			'lang_name'        => 'field', +			'field_required'   => false, +			'field_validation' => '[\w]+', +		); +		$field_options = array_merge($default_field_options, $field_options); + +		$this->assertSame($expected, $field->get_profile_contact_value($value, $field_options), $description); +	} +} diff --git a/tests/profilefields/type_int_test.php b/tests/profilefields/type_int_test.php new file mode 100644 index 0000000000..611edd32b9 --- /dev/null +++ b/tests/profilefields/type_int_test.php @@ -0,0 +1,176 @@ +<?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. +* +*/ + +class phpbb_profilefield_type_int_test extends phpbb_test_case +{ +	protected $cp; +	protected $field_options; + +	/** +	* Sets up basic test objects +	* +	* @access public +	* @return null +	*/ +	public function setUp() +	{ +		$user = $this->getMock('\phpbb\user'); +		$user->expects($this->any()) +			->method('lang') +			->will($this->returnCallback(array($this, 'return_callback_implode'))); + +		$request = $this->getMock('\phpbb\request\request'); +		$template = $this->getMock('\phpbb\template\template'); + +		$this->cp = new \phpbb\profilefields\type\type_int( +			$request, +			$template, +			$user +		); + +		$this->field_options = array( +			'field_type'     => '\phpbb\profilefields\type\type_int', +			'field_name' 	 => 'field', +			'field_id'	 	 => 1, +			'lang_id'	 	 => 1, +			'lang_name'      => 'field', +			'field_required' => false, +		); +	} + +	public function profile_value_data() +	{ +		return array( +			array( +				'10', +				array('field_show_novalue' => true), +				10, +				'Field should output integer value of given input', +			), +			array( +				'0', +				array('field_show_novalue' => true), +				0, +				'Field should output integer value of given input', +			), +			array( +				'', +				array('field_show_novalue' => true), +				0, +				'Field should translate empty value to 0 as integer', +				false, +			), +			array( +				null, +				array('field_show_novalue' => true), +				0, +				'Field should translate null value to 0 as integer', +			), +			array( +				'10', +				array('field_show_novalue' => false), +				10, +				'Field should output integer value of given input', +			), +			array( +				'0', +				array('field_show_novalue' => false), +				0, +				'Field should output integer value of given input', +			), +			array( +				'', +				array('field_show_novalue' => false), +				null, +				'Field should leave empty value as is', +			), +			array( +				null, +				array('field_show_novalue' => false), +				null, +				'Field should leave empty value as is', +			), +		); +	} + +	/** +	* @dataProvider profile_value_data +	*/ +	public function test_get_profile_value($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->get_profile_value($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function validate_profile_field_data() +	{ +		return array( +			array( +				'15', +				array('field_minlen' => 10, 'field_maxlen' => 20, 'field_required' => true), +				false, +				'Field should accept input of correct boundaries', +			), +			array( +				'556476', +				array('field_maxlen' => 50000, 'field_required' => true), +				'FIELD_TOO_LARGE-50000-field', +				'Field should reject value of greater value than max', +			), +			array( +				'9', +				array('field_minlen' => 10, 'field_required' => true), +				'FIELD_TOO_SMALL-10-field', +				'Field should reject value which is less than defined minimum', +			), +			array( +				true, +				array('field_maxlen' => 20), +				false, +				'Field should accept correct boolean value', +			), +			array( +				'string', +				array('field_maxlen' => 10, 'field_required' => true), +				false, +				'Field should accept correct string value', +			), +			array( +				null, +				array('field_minlen' => 1, 'field_maxlen' => 10, 'field_required' => true), +				'FIELD_TOO_SMALL-1-field', +				'Field should not accept an empty value', +			), +		); +	} + +	/** +	* @dataProvider validate_profile_field_data +	*/ +	public function test_validate_profile_field($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->validate_profile_field($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function return_callback_implode() +	{ +		return implode('-', func_get_args()); +	} +} diff --git a/tests/profilefields/type_string_test.php b/tests/profilefields/type_string_test.php new file mode 100644 index 0000000000..cee8a1d863 --- /dev/null +++ b/tests/profilefields/type_string_test.php @@ -0,0 +1,232 @@ +<?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.php'; +require_once dirname(__FILE__) . '/../../phpBB/includes/functions_content.php'; +require_once dirname(__FILE__) . '/../../phpBB/includes/utf/utf_tools.php'; + +class phpbb_profilefield_type_string_test extends phpbb_test_case +{ +	protected $cp; +	protected $field_options; + +	/** +	* Sets up basic test objects +	* +	* @access public +	* @return null +	*/ +	public function setUp() +	{ +		global $request, $user, $cache; + +		$user = $this->getMock('\phpbb\user'); +		$cache = new phpbb_mock_cache; +		$user->expects($this->any()) +			->method('lang') +			->will($this->returnCallback(array($this, 'return_callback_implode'))); + +		$request = $this->getMock('\phpbb\request\request'); +		$template = $this->getMock('\phpbb\template\template'); + +		$this->cp = new \phpbb\profilefields\type\type_string( +			$request, +			$template, +			$user +		); + +		$this->field_options = array( +			'field_type'       => '\phpbb\profilefields\type\type_string', +			'field_name' 	   => 'field', +			'field_id'	 	   => 1, +			'lang_id'	 	   => 1, +			'lang_name'        => 'field', +			'field_required'   => false, +			'field_validation' => '.*', +		); +	} + +	public function validate_profile_field_data() +	{ +		return array( +			array( +				'', +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'Field should not accept empty values for required fields', +			), +			array( +				null, +				array('field_required' => true), +				'FIELD_REQUIRED-field', +				'Field should not accept empty values for required field', +			), +			array( +				0, +				array('field_required' => true), +				false, +				'Field should accept a non-empty input', +			), +			array( +				'false', +				array('field_required' => true), +				false, +				'Field should accept a non-empty input', +			), +			array( +				10, +				array('field_required' => true), +				false, +				'Field should accept a non-empty input', +			), +			array( +				'tas', +				array('field_minlen' => 2, 'field_maxlen' => 5), +				false, +				'Field should accept value of correct length', +			), +			array( +				't', +				array('field_minlen' => 2, 'field_maxlen' => 5), +				'FIELD_TOO_SHORT-2-field', +				'Field should reject value of incorrect length', +			), +			array( +				'this is a long string', +				array('field_minlen' => 2, 'field_maxlen' => 5), +				'FIELD_TOO_LONG-5-field', +				'Field should reject value of incorrect length', +			), +			array( +				'H3110', +				array('field_validation' => '[0-9]+'), +				'FIELD_INVALID_CHARS_NUMBERS_ONLY-field', +				'Required field should reject characters in a numbers-only field', +			), +			array( +				'<>"&%&><>', +				array('field_maxlen' => 10, 'field_minlen' => 2), +				false, +				'Optional field should accept html entities', +			), +			array( +				'ö ä ü ß', +				array(), +				false, +				'Required field should accept UTF-8 string', +			), +			array( +				'This ö ä string has to b', +				array('field_maxlen' => 10), +				'FIELD_TOO_LONG-10-field', +				'Required field should reject an UTF-8 string which is too long', +			), +			array( +				'ö äö äö ä', +				array('field_validation' => '[\w]+'), +				'FIELD_INVALID_CHARS_ALPHA_ONLY-field', +				'Required field should reject UTF-8 in alpha only field', +			), +			array( +				'Hello', +				array('field_validation' => '[\w]+'), +				false, +				'Required field should accept a characters only field', +			), +			array( +				'Valid.Username123', +				array('field_validation' => '[\w.]+'), +				false, +				'Required field should accept a alphanumeric field with dots', +			), +			array( +				'Invalid.,username123', +				array('field_validation' => '[\w.]+'), +				'FIELD_INVALID_CHARS_ALPHA_DOTS-field', +				'Required field should reject field with comma', +			), +			array( +				'skype.test.name,_this', +				array('field_validation' => '[a-zA-Z][\w\.,\-_]+'), +				false, +				'Required field should accept alphanumeric field with punctuations', +			), +			array( +				'1skype.this.should.faila', +				array('field_validation' => '[a-zA-Z][\w\.,\-_]+'), +				'FIELD_INVALID_CHARS_ALPHA_PUNCTUATION-field', +				'Required field should reject field having invalid input for the given validation', +			), +		); +	} + +	/** +	* @dataProvider validate_profile_field_data +	*/ +	public function test_validate_profile_field($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->validate_profile_field($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function profile_value_data() +	{ +		return array( +			array( +				'test', +				array('field_show_novalue' => true), +				'test', +				'Field should output the given value', +			), +			array( +				'test', +				array('field_show_novalue' => false), +				'test', +				'Field should output the given value', +			), +			array( +				'', +				array('field_show_novalue' => true), +				'', +				'Field should output nothing for empty value', +			), +			array( +				'', +				array('field_show_novalue' => false), +				null, +				'Field should simply output null for empty vlaue', +			), +		); +	} + + +	/** +	* @dataProvider profile_value_data +	*/ +	public function test_get_profile_value($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->get_profile_value($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function return_callback_implode() +	{ +		return implode('-', func_get_args()); +	} +} diff --git a/tests/profilefields/type_url_test.php b/tests/profilefields/type_url_test.php new file mode 100644 index 0000000000..9957510d90 --- /dev/null +++ b/tests/profilefields/type_url_test.php @@ -0,0 +1,111 @@ +<?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.php'; + +class phpbb_profilefield_type_url_test extends phpbb_test_case +{ +	protected $cp; +	protected $field_options; + +	/** +	* Sets up basic test objects +	* +	* @access public +	* @return null +	*/ +	public function setUp() +	{ +		$user = $this->getMock('\phpbb\user'); +		$user->expects($this->any()) +			->method('lang') +			->will($this->returnCallback(array($this, 'return_callback_implode'))); + +		$request = $this->getMock('\phpbb\request\request'); +		$template = $this->getMock('\phpbb\template\template'); + +		$this->cp = new \phpbb\profilefields\type\type_url( +			$request, +			$template, +			$user +		); + +		$this->field_options = array( +			'field_type'     => '\phpbb\profilefields\type\type_url', +			'field_name' 	 => 'field', +			'field_id'	 	 => 1, +			'lang_id'	 	 => 1, +			'lang_name'      => 'field', +			'field_required' => false, +		); +	} + +	public function validate_profile_field_data() +	{ +		return array( +			array( +				'', +				array('field_required' => true), +				'FIELD_INVALID_URL-field', +				'Field should reject empty field that is required', +			), +			array( +				'invalidURL', +				array(), +				'FIELD_INVALID_URL-field', +				'Field should reject invalid input', +			), +			array( +				'http://onetwothree.example.io', +				array(), +				false, +				'Field should accept valid URL', +			), +			array( +				'http://example.com/index.html?param1=test¶m2=awesome', +				array(), +				false, +				'Field should accept valid URL', +			), +			array( +				'http://example.com/index.html/test/path?document=get', +				array(), +				false, +				'Field should accept valid URL', +			), +			array( +				'http://example.com/index.html/test/path?document[]=DocType%20test&document[]=AnotherDoc', +				array(), +				'FIELD_INVALID_URL-field', +				'Field should reject invalid URL having multi value parameters', +			), +		); +	} + +	/** +	* @dataProvider validate_profile_field_data +	*/ +	public function test_validate_profile_field($value, $field_options, $expected, $description) +	{ +		$field_options = array_merge($this->field_options, $field_options); + +		$result = $this->cp->validate_profile_field($value, $field_options); + +		$this->assertSame($expected, $result, $description); +	} + +	public function return_callback_implode() +	{ +		return implode('-', func_get_args()); +	} +} diff --git a/tests/test_framework/phpbb_database_connection_odbc_pdo_wrapper.php b/tests/test_framework/phpbb_database_connection_odbc_pdo_wrapper.php index 22d55b4ed5..db31edc984 100644 --- a/tests/test_framework/phpbb_database_connection_odbc_pdo_wrapper.php +++ b/tests/test_framework/phpbb_database_connection_odbc_pdo_wrapper.php @@ -25,7 +25,7 @@ if (!class_exists('PDO'))  */  class phpbb_database_connection_odbc_pdo_wrapper extends PDO  { -	// Name of the driver being used (i.e. mssql, firebird) +	// Name of the driver being used (i.e. mssql)  	public $driver = '';  	// Version number of driver since PDO::getAttribute(PDO::ATTR_CLIENT_VERSION) is pretty useless for this diff --git a/tests/test_framework/phpbb_database_test_case.php b/tests/test_framework/phpbb_database_test_case.php index 1f3a564205..46276bcfcb 100644 --- a/tests/test_framework/phpbb_database_test_case.php +++ b/tests/test_framework/phpbb_database_test_case.php @@ -145,25 +145,7 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test  	public function createXMLDataSet($path)  	{ -		$db_config = $this->get_database_config(); - -		// Firebird requires table and column names to be uppercase -		if ($db_config['dbms'] == 'phpbb\db\driver\firebird') -		{ -			$xml_data = file_get_contents($path); -			$xml_data = preg_replace_callback('/(?:(<table name="))([a-z_]+)(?:(">))/', 'phpbb_database_test_case::to_upper', $xml_data); -			$xml_data = preg_replace_callback('/(?:(<column>))([a-z_]+)(?:(<\/column>))/', 'phpbb_database_test_case::to_upper', $xml_data); - -			$new_fixture = tmpfile(); -			fwrite($new_fixture, $xml_data); -			fseek($new_fixture, 0); - -			$meta_data = stream_get_meta_data($new_fixture); -			$path = $meta_data['uri']; -		} -  		$this->fixture_xml_data = parent::createXMLDataSet($path); -  		return $this->fixture_xml_data;  	} @@ -244,19 +226,6 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test  		return new phpbb_database_test_connection_manager($config);  	} -	/** -	* Converts a match in the middle of a string to uppercase. -	* This is necessary for transforming the fixture information for Firebird tests -	* -	* @param $matches The array of matches from a regular expression -	* -	* @return string The string with the specified match converted to uppercase -	*/ -	static public function to_upper($matches) -	{ -		return $matches[1] . strtoupper($matches[2]) . $matches[3]; -	} -  	public function assert_array_content_equals($one, $two)  	{  		// http://stackoverflow.com/questions/3838288/phpunit-assert-two-arrays-are-equal-but-order-of-elements-not-important diff --git a/tests/test_framework/phpbb_database_test_connection_manager.php b/tests/test_framework/phpbb_database_test_connection_manager.php index b73b05025e..0d0f08f1f5 100644 --- a/tests/test_framework/phpbb_database_test_connection_manager.php +++ b/tests/test_framework/phpbb_database_test_connection_manager.php @@ -116,7 +116,7 @@ class phpbb_database_test_connection_manager  		// These require different connection strings on the phpBB side than they do in PDO  		// so you must provide a DSN string for ODBC separately -		if (!empty($this->config['custom_dsn']) && ($this->config['dbms'] == 'phpbb\db\driver\mssql' || $this->config['dbms'] == 'phpbb\db\driver\firebird')) +		if (!empty($this->config['custom_dsn']) && $this->config['dbms'] == 'phpbb\db\driver\mssql')  		{  			$dsn = 'odbc:' . $this->config['custom_dsn'];  		} @@ -130,14 +130,6 @@ class phpbb_database_test_connection_manager  					$this->pdo = new phpbb_database_connection_odbc_pdo_wrapper('mssql', 0, $dsn, $this->config['dbuser'], $this->config['dbpasswd']);  				break; -				case 'phpbb\db\driver\firebird': -					if (!empty($this->config['custom_dsn'])) -					{ -						$this->pdo = new phpbb_database_connection_odbc_pdo_wrapper('firebird', 0, $dsn, $this->config['dbuser'], $this->config['dbpasswd']); -						break; -					} -					// Fall through if they're using the firebird PDO driver and not the generic ODBC driver -  				default:  					$this->pdo = new PDO($dsn, $this->config['dbuser'], $this->config['dbpasswd']);  				break; @@ -197,7 +189,6 @@ class phpbb_database_test_connection_manager  		{  			case 'phpbb\db\driver\sqlite':  			case 'phpbb\db\driver\sqlite3': -			case 'phpbb\db\driver\firebird':  				$this->connect();  				// Drop all of the tables  				foreach ($this->get_tables() as $table) @@ -298,13 +289,6 @@ class phpbb_database_test_connection_manager  					FROM pg_stat_user_tables';  			break; -			case 'phpbb\db\driver\firebird': -				$sql = 'SELECT rdb$relation_name -					FROM rdb$relations -					WHERE rdb$view_source is null -						AND rdb$system_flag = 0'; -			break; -  			case 'phpbb\db\driver\oracle':  				$sql = 'SELECT table_name  					FROM USER_TABLES'; @@ -404,11 +388,6 @@ class phpbb_database_test_connection_manager  	protected function get_dbms_data($dbms)  	{  		$available_dbms = array( -			'phpbb\db\driver\firebird'	=> array( -				'SCHEMA'		=> 'firebird', -				'DELIM'			=> ';;', -				'PDO'			=> 'firebird', -			),  			'phpbb\db\driver\mysqli'	=> array(  				'SCHEMA'		=> 'mysql_41',  				'DELIM'			=> ';', @@ -478,18 +457,6 @@ class phpbb_database_test_connection_manager  		switch ($this->config['dbms'])  		{ -			case 'phpbb\db\driver\firebird': -				$sql = 'SELECT RDB$GENERATOR_NAME -					FROM RDB$GENERATORS -					WHERE RDB$SYSTEM_FLAG = 0'; -				$result = $this->pdo->query($sql); - -				while ($row = $result->fetch(PDO::FETCH_NUM)) -				{ -					$queries[] = 'DROP GENERATOR ' . current($row); -				} -			break; -  			case 'phpbb\db\driver\oracle':  				$sql = 'SELECT sequence_name  					FROM USER_SEQUENCES'; diff --git a/tests/test_framework/phpbb_functional_test_case.php b/tests/test_framework/phpbb_functional_test_case.php index e4504a5f8d..fde6a6a4ff 100644 --- a/tests/test_framework/phpbb_functional_test_case.php +++ b/tests/test_framework/phpbb_functional_test_case.php @@ -1076,9 +1076,17 @@ class phpbb_functional_test_case extends phpbb_test_case  		if ($expected !== '')  		{ -			$this->assertContainsLang($expected, $crawler->filter('html')->text()); +			if (isset($this->lang[$expected])) +			{ +				$this->assertContainsLang($expected, $crawler->filter('html')->text()); +			} +			else +			{ +				$this->assertContains($expected, $crawler->filter('html')->text()); +			}  			return null;  		} +  		$url = $crawler->selectLink($form_data['subject'])->link()->getUri();  		return array( diff --git a/tests/text_processing/make_clickable_test.php b/tests/text_processing/make_clickable_test.php index 2c78391453..95e304dd97 100644 --- a/tests/text_processing/make_clickable_test.php +++ b/tests/text_processing/make_clickable_test.php @@ -104,5 +104,50 @@ class phpbb_text_processing_make_clickable_test extends phpbb_test_case  		$this->assertEquals($expected, $result, $label);  	} +	public function make_clickable_mixed_serverurl_data() +	{ +		$urls = array( +			'http://thisdomain.org' => array('tag' => 'm', 'url' => false, 'text' => false), +			'http://thisdomain.org/' => array('tag' => 'm', 'url' => false, 'text' => false), +			'http://thisdomain.org/1' => array('tag' => 'm', 'url' => false, 'text' => false), +			'http://thisdomain.org/path/some?query=abc#test' => array('tag' => 'm', 'url' => false, 'text' => false), + +			'https://www.phpbb.com' => array('tag' => 'm', 'url' => false, 'text' => false), +			'https://www.phpbb.com/' => array('tag' => 'm', 'url' => false, 'text' => false), +			'https://www.phpbb.com/1' => array('tag' => 'l', 'url' => false, 'text' => '1'), +			'https://www.phpbb.com/path/some?query=abc#test' => array('tag' => 'l', 'url' => false, 'text' => 'path/some?query=abc#test'), +		); + +		$test_data = array(); + +		// run the test for each combination +		foreach ($urls as $url => $url_type) +		{ +			// false means it's the same as the url, less typing +			$url_type['url'] = ($url_type['url']) ? $url_type['url'] : $url; +			$url_type['text'] = ($url_type['text']) ? $url_type['text'] : $url; + +			$class = ($url_type['tag'] === 'l') ? 'postlink-local' : 'postlink'; + +			// replace the url with the desired output format +			$output = '<!-- ' . $url_type['tag'] . ' --><a class="' . $class . '" href="' . $url_type['url'] . '">' . $url_type['text'] . '</a><!-- ' . $url_type['tag'] . ' -->'; + +			$test_data[] = array($url, $output); +		} + +		return $test_data; +	} + +	/** +	* @dataProvider make_clickable_mixed_serverurl_data +	*/ +	public function test_make_clickable_mixed_serverurl($input, $expected) +	{ +		$result = make_clickable($input, 'https://www.phpbb.com'); + +		$label = 'Making text clickable: ' . $input; +		$this->assertEquals($expected, $result, $label); +	} +  }  | 
