diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/RUNNING_TESTS.txt | 57 | ||||
| -rw-r--r-- | tests/all_tests.php | 15 | ||||
| -rw-r--r-- | tests/dbal/all_tests.php | 6 | ||||
| -rw-r--r-- | tests/dbal/fixtures/config.xml | 18 | ||||
| -rw-r--r-- | tests/dbal/select.php (renamed from tests/dbal/dbal.php) | 37 | ||||
| -rw-r--r-- | tests/dbal/write.php | 172 | ||||
| -rw-r--r-- | tests/network/all_tests.php | 40 | ||||
| -rw-r--r-- | tests/network/checkdnsrr.php | 63 | ||||
| -rw-r--r-- | tests/random/all_tests.php | 40 | ||||
| -rw-r--r-- | tests/random/gen_rand_string.php | 63 | ||||
| -rw-r--r-- | tests/regex/all_tests.php | 46 | ||||
| -rw-r--r-- | tests/regex/email.php | 119 | ||||
| -rw-r--r-- | tests/regex/ipv4.php | 72 | ||||
| -rw-r--r-- | tests/regex/ipv6.php | 143 | ||||
| -rw-r--r-- | tests/regex/url.php | 34 | ||||
| -rw-r--r-- | tests/template/template.php | 25 | ||||
| -rw-r--r-- | tests/test_framework/framework.php | 8 | ||||
| -rw-r--r-- | tests/test_framework/phpbb_database_test_case.php | 288 | ||||
| -rw-r--r-- | tests/test_framework/phpbb_test_case.php | 7 | ||||
| -rw-r--r-- | tests/test_framework/phpbb_test_case_helpers.php | 53 |
20 files changed, 1180 insertions, 126 deletions
diff --git a/tests/RUNNING_TESTS.txt b/tests/RUNNING_TESTS.txt new file mode 100644 index 0000000000..74a0635c1a --- /dev/null +++ b/tests/RUNNING_TESTS.txt @@ -0,0 +1,57 @@ +Running Tests +============= + +Prerequisites +============= + +PHPUnit +------- + +phpBB unit tests use PHPUnit framework. Version 3.3 or better is required +to run the tests. PHPUnit prefers to be installed via PEAR; refer to +http://www.phpunit.de/ for more information. + +PHP extensions +-------------- + +Unit tests use several PHP extensions that board code does not use. Currently +the following PHP extensions must be installed and enabled to run unit tests: + +- ctype + +Database Tests +-------------- +By default all tests requiring a database connection will use sqlite. If you +do not have sqlite installed the tests will be skipped. If you wish to run the +tests on a different database you have to create a test_config.php file within +your tests directory following the same format as phpBB's config.php. An example +for mysqli can be found below. More information on configuration options can be +found on the wiki (see below). + + <?php + $dbms = 'mysqli'; + $dbhost = 'localhost'; + $dbport = ''; + $dbname = 'database'; + $dbuser = 'user'; + $dbpasswd = 'password'; + +Alternatively you can specify parameters in the environment, so e.g. the following +will run phpunit with the same parameters as in the shown test_config.php file: + + $ PHPBB_TEST_DBMS='mysqli' PHPBB_TEST_DBHOST='localhost' \ + PHPBB_TEST_DBNAME='database' PHPBB_TEST_DBUSER='user' \ + PHPBB_TEST_DBPASSWD='password' phpunit all_tests.php + +Running +======= + +Once the prerequisites are installed, run the tests from tests directory: + + $ phpunit all_tests.php + +More Information +================ + +Further information is available on phpbb wiki: +http://wiki.phpbb.com/display/DEV/Unit+Tests diff --git a/tests/all_tests.php b/tests/all_tests.php index e693427809..d1d711c4d7 100644 --- a/tests/all_tests.php +++ b/tests/all_tests.php @@ -23,9 +23,19 @@ require_once 'security/all_tests.php'; require_once 'template/all_tests.php'; require_once 'text_processing/all_tests.php'; require_once 'dbal/all_tests.php'; +require_once 'regex/all_tests.php'; +require_once 'network/all_tests.php'; +require_once 'random/all_tests.php'; // exclude the test directory from code coverage reports -PHPUnit_Util_Filter::addDirectoryToFilter('./'); +if (version_compare(PHPUnit_Runner_Version::id(), '3.5.0') >= 0) +{ + PHP_CodeCoverage_Filter::getInstance()->addDirectoryToBlacklist('./'); +} +else +{ + PHPUnit_Util_Filter::addDirectoryToFilter('./'); +} class phpbb_all_tests { @@ -44,6 +54,9 @@ class phpbb_all_tests $suite->addTest(phpbb_template_all_tests::suite()); $suite->addTest(phpbb_text_processing_all_tests::suite()); $suite->addTest(phpbb_dbal_all_tests::suite()); + $suite->addTest(phpbb_regex_all_tests::suite()); + $suite->addTest(phpbb_network_all_tests::suite()); + $suite->addTest(phpbb_random_all_tests::suite()); return $suite; } diff --git a/tests/dbal/all_tests.php b/tests/dbal/all_tests.php index 7aee0f6b16..cfa8176246 100644 --- a/tests/dbal/all_tests.php +++ b/tests/dbal/all_tests.php @@ -15,7 +15,8 @@ if (!defined('PHPUnit_MAIN_METHOD')) require_once 'test_framework/framework.php'; require_once 'PHPUnit/TextUI/TestRunner.php'; -require_once 'dbal/dbal.php'; +require_once 'dbal/select.php'; +require_once 'dbal/write.php'; class phpbb_dbal_all_tests { @@ -28,7 +29,8 @@ class phpbb_dbal_all_tests { $suite = new PHPUnit_Framework_TestSuite('phpBB Database Abstraction Layer'); - $suite->addTestSuite('phpbb_dbal_test'); + $suite->addTestSuite('phpbb_dbal_select_test'); + $suite->addTestSuite('phpbb_dbal_write_test'); return $suite; } diff --git a/tests/dbal/fixtures/config.xml b/tests/dbal/fixtures/config.xml new file mode 100644 index 0000000000..019f582a91 --- /dev/null +++ b/tests/dbal/fixtures/config.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<dataset> + <table name="phpbb_config"> + <column>config_name</column> + <column>config_value</column> + <column>is_dynamic</column> + <row> + <value>config1</value> + <value>foo</value> + <value>0</value> + </row> + <row> + <value>config2</value> + <value>bar</value> + <value>1</value> + </row> + </table> +</dataset> diff --git a/tests/dbal/dbal.php b/tests/dbal/select.php index f90b5efeb5..70f27549d2 100644 --- a/tests/dbal/dbal.php +++ b/tests/dbal/select.php @@ -10,7 +10,7 @@ require_once 'test_framework/framework.php'; require_once '../phpBB/includes/functions.php'; -class phpbb_dbal_test extends phpbb_database_test_case +class phpbb_dbal_select_test extends phpbb_database_test_case { public function getDataSet() { @@ -21,10 +21,7 @@ class phpbb_dbal_test extends phpbb_database_test_case { return array( array('phpbb_users', "username_clean = 'bertie'", array(array('username_clean' => 'bertie'))), - array('phpbb_users', "username_clean = 'phpBB'", array()), array('phpbb_users', 'username_clean syntax_error', false), - array('phpbb_users', 'column_not_exists = 2', false), - array('table_not_exists', 'column_not_exists = 2', false), ); } @@ -103,7 +100,6 @@ class phpbb_dbal_test extends phpbb_database_test_case return array( array('', array('barfoo', 'foobar', 'bertie')), array('user_id = 2', array('foobar')), - array("username_clean = 'bertie'", array('bertie')), ); } @@ -138,7 +134,6 @@ class phpbb_dbal_test extends phpbb_database_test_case array(0, 1, array(array('username_clean' => 'foobar'), array('username_clean' => 'bertie'))), array(1, 0, array(array('username_clean' => 'barfoo'))), - array(1, 1, array(array('username_clean' => 'foobar'))), array(1, 2, array(array('username_clean' => 'bertie'))), array(2, 0, array(array('username_clean' => 'barfoo'), array('username_clean' => 'foobar'))), @@ -180,9 +175,6 @@ class phpbb_dbal_test extends phpbb_database_test_case array('bar*', array(array('username_clean' => 'barfoo'))), array('*bar*', array(array('username_clean' => 'barfoo'), array('username_clean' => 'foobar'))), - array('*b*', array(array('username_clean' => 'barfoo'), - array('username_clean' => 'foobar'), - array('username_clean' => 'bertie'))), array('b*r', array()), array('b*e', array(array('username_clean' => 'bertie'))), array('#b*e', array()), @@ -220,11 +212,11 @@ class phpbb_dbal_test extends phpbb_database_test_case array('username_clean' => 'foobar'))), array('user_id', 3, true, true, array(array('username_clean' => 'barfoo'), array('username_clean' => 'foobar'))), - array('user_id', '3', false, false, array(array('username_clean' => 'bertie'))), - array('user_id', '3', false, true, array(array('username_clean' => 'bertie'))), - array('user_id', '3', true, false, array(array('username_clean' => 'barfoo'), + array('username_clean', 'bertie', false, false, array(array('username_clean' => 'bertie'))), + array('username_clean', 'bertie', false, true, array(array('username_clean' => 'bertie'))), + array('username_clean', 'bertie', true, false, array(array('username_clean' => 'barfoo'), array('username_clean' => 'foobar'))), - array('user_id', '3', true, true, array(array('username_clean' => 'barfoo'), + array('username_clean', 'bertie', true, true, array(array('username_clean' => 'barfoo'), array('username_clean' => 'foobar'))), array('user_id', array(3), false, false, array(array('username_clean' => 'bertie'))), array('user_id', array(3), false, true, array(array('username_clean' => 'bertie'))), @@ -238,12 +230,12 @@ class phpbb_dbal_test extends phpbb_database_test_case array('username_clean' => 'bertie'))), array('user_id', array(1, 3), true, false, array(array('username_clean' => 'foobar'))), array('user_id', array(1, 3), true, true, array(array('username_clean' => 'foobar'))), - array('user_id', '', false, false, array()), - array('user_id', '', false, true, array()), - array('user_id', '', true, false, array(array('username_clean' => 'barfoo'), + array('username_clean', '', false, false, array()), + array('username_clean', '', false, true, array()), + array('username_clean', '', true, false, array(array('username_clean' => 'barfoo'), array('username_clean' => 'foobar'), array('username_clean' => 'bertie'))), - array('user_id', '', true, true, array(array('username_clean' => 'barfoo'), + array('username_clean', '', true, true, array(array('username_clean' => 'barfoo'), array('username_clean' => 'foobar'), array('username_clean' => 'bertie'))), array('user_id', array(), false, true, array()), @@ -252,8 +244,9 @@ class phpbb_dbal_test extends phpbb_database_test_case array('username_clean' => 'bertie'))), // These here would throw errors and therefor $result should be false. - array('user_id', array(), false, false, false, true), - array('user_id', array(), true, false, false, true), + // Removing for now because SQLite accepts empty IN() syntax + /*array('user_id', array(), false, false, false, true), + array('user_id', array(), true, false, false, true),*/ ); } @@ -310,10 +303,11 @@ class phpbb_dbal_test extends phpbb_database_test_case $db->sql_return_on_error(true); } - $result = $db->sql_query('SELECT username_clean + $sql = 'SELECT username_clean FROM phpbb_users WHERE ' . $db->sql_build_array('SELECT', $assoc_ary) . ' - ORDER BY user_id ASC'); + ORDER BY user_id ASC'; + $result = $db->sql_query($sql); if ($catch_error) { @@ -325,4 +319,3 @@ class phpbb_dbal_test extends phpbb_database_test_case $db->sql_freeresult($result); } } - diff --git a/tests/dbal/write.php b/tests/dbal/write.php new file mode 100644 index 0000000000..01deacda69 --- /dev/null +++ b/tests/dbal/write.php @@ -0,0 +1,172 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2008 phpBB Group +* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* +*/ + +require_once 'test_framework/framework.php'; +require_once '../phpBB/includes/functions.php'; + +class phpbb_dbal_write_test extends phpbb_database_test_case +{ + public function getDataSet() + { + return $this->createXMLDataSet(dirname(__FILE__).'/fixtures/config.xml'); + } + + public static function build_array_insert_data() + { + return array( + array(array( + 'config_name' => 'test_version', + 'config_value' => '0.0.0', + 'is_dynamic' => 1, + )), + array(array( + 'config_name' => 'second config', + 'config_value' => '10', + 'is_dynamic' => 0, + )), + ); + } + + /** + * @dataProvider build_array_insert_data + */ + public function test_build_array_insert($sql_ary) + { + $db = $this->new_dbal(); + + $sql = 'INSERT INTO phpbb_config ' . $db->sql_build_array('INSERT', $sql_ary); + $result = $db->sql_query($sql); + + $sql = "SELECT * + FROM phpbb_config + WHERE config_name = '" . $sql_ary['config_name'] . "'"; + $result = $db->sql_query_limit($sql, 1); + + $this->assertEquals($sql_ary, $db->sql_fetchrow($result)); + + $db->sql_freeresult($result); + } + + public function test_delete() + { + $db = $this->new_dbal(); + + $sql = "DELETE FROM phpbb_config + WHERE config_name = 'config1'"; + $result = $db->sql_query($sql); + + $sql = 'SELECT * + FROM phpbb_config'; + $result = $db->sql_query($sql); + $rows = $db->sql_fetchrowset($result); + + $this->assertEquals(1, sizeof($rows)); + $this->assertEquals('config2', $rows[0]['config_name']); + + $db->sql_freeresult($result); + } + + public function test_multiple_insert() + { + $db = $this->new_dbal(); + + // empty the table + $sql = 'DELETE FROM phpbb_config'; + $db->sql_query($sql); + + $batch_ary = array( + array( + 'config_name' => 'batch one', + 'config_value' => 'b1', + 'is_dynamic' => 0, + ), + array( + 'config_name' => 'batch two', + 'config_value' => 'b2', + 'is_dynamic' => 1, + ), + ); + + $result = $db->sql_multi_insert('phpbb_config', $batch_ary); + + $sql = 'SELECT * + FROM phpbb_config + ORDER BY config_name ASC'; + $result = $db->sql_query($sql); + + $this->assertEquals($batch_ary, $db->sql_fetchrowset($result)); + + $db->sql_freeresult($result); + } + + public static function update_data() + { + return array( + array( + array( + 'config_value' => '23', + 'is_dynamic' => 0, + ), + " WHERE config_name = 'config1'", + array( + array( + 'config_name' => 'config1', + 'config_value' => '23', + 'is_dynamic' => 0, + ), + array( + 'config_name' => 'config2', + 'config_value' => 'bar', + 'is_dynamic' => 1, + ), + ), + ), + array( + array( + 'config_value' => '0', + 'is_dynamic' => 1, + ), + '', + array( + array( + 'config_name' => 'config1', + 'config_value' => '0', + 'is_dynamic' => 1, + ), + array( + 'config_name' => 'config2', + 'config_value' => '0', + 'is_dynamic' => 1, + ), + ), + ), + ); + } + + /** + * @dataProvider update_data + */ + public function test_update($sql_ary, $where, $expected) + { + $db = $this->new_dbal(); + + $sql = 'UPDATE phpbb_config + SET ' . $db->sql_build_array('UPDATE', $sql_ary) . $where; + $result = $db->sql_query($sql); + + $sql = 'SELECT * + FROM phpbb_config + ORDER BY config_name ASC'; + $result = $db->sql_query($sql); + + $this->assertEquals($expected, $db->sql_fetchrowset($result)); + + $db->sql_freeresult($result); + } +} diff --git a/tests/network/all_tests.php b/tests/network/all_tests.php new file mode 100644 index 0000000000..b500647f81 --- /dev/null +++ b/tests/network/all_tests.php @@ -0,0 +1,40 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2010 phpBB Group +* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* +*/ + +if (!defined('PHPUnit_MAIN_METHOD')) +{ + define('PHPUnit_MAIN_METHOD', 'phpbb_network_all_tests::main'); +} + +require_once 'test_framework/framework.php'; +require_once 'PHPUnit/TextUI/TestRunner.php'; + +require_once 'network/checkdnsrr.php'; + +class phpbb_network_all_tests +{ + public static function main() + { + PHPUnit_TextUI_TestRunner::run(self::suite()); + } + + public static function suite() + { + $suite = new PHPUnit_Framework_TestSuite('phpBB Network Functions'); + + $suite->addTestSuite('phpbb_network_checkdnsrr_test'); + + return $suite; + } +} + +if (PHPUnit_MAIN_METHOD == 'phpbb_network_all_tests::main') +{ + phpbb_network_all_tests::main(); +} diff --git a/tests/network/checkdnsrr.php b/tests/network/checkdnsrr.php new file mode 100644 index 0000000000..57fe2761cc --- /dev/null +++ b/tests/network/checkdnsrr.php @@ -0,0 +1,63 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2010 phpBB Group +* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* +*/ + +require_once 'test_framework/framework.php'; +require_once '../phpBB/includes/functions.php'; + +class phpbb_network_checkdnsrr_test extends phpbb_test_case +{ + public function data_provider() + { + return array( + // Existing MX record + array('phpbb.com', 'MX', true), + + // Non-existing MX record + array('does-not-exist.phpbb.com', 'MX', false), + + // Existing A record + array('www.phpbb.com', 'A', true), + + // Non-existing A record + array('does-not-exist.phpbb.com', 'A', false), + + // Existing AAAA record + array('www.six.heise.de', 'AAAA', true), + + // Non-existing AAAA record + array('does-not-exist.phpbb.com', 'AAAA', false), + + // Existing CNAME record + array('news.cnet.com', 'CNAME', true), + + // Non-existing CNAME record + array('does-not-exist.phpbb.com', 'CNAME', false), + + // Existing NS record + array('phpbb.com', 'NS', true), + + // Non-existing NS record + array('does-not-exist', 'NS', false), + + // Existing TXT record + array('phpbb.com', 'TXT', true), + + // Non-existing TXT record + array('does-not-exist', 'TXT', false), + ); + } + + /** + * @dataProvider data_provider + */ + public function test_checkdnsrr($host, $type, $expected) + { + $this->assertEquals($expected, phpbb_checkdnsrr($host, $type)); + } +} diff --git a/tests/random/all_tests.php b/tests/random/all_tests.php new file mode 100644 index 0000000000..c6ffe78024 --- /dev/null +++ b/tests/random/all_tests.php @@ -0,0 +1,40 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2010 phpBB Group +* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* +*/ + +if (!defined('PHPUnit_MAIN_METHOD')) +{ + define('PHPUnit_MAIN_METHOD', 'phpbb_random_all_tests::main'); +} + +require_once 'test_framework/framework.php'; +require_once 'PHPUnit/TextUI/TestRunner.php'; + +require_once 'random/gen_rand_string.php'; + +class phpbb_random_all_tests +{ + public static function main() + { + PHPUnit_TextUI_TestRunner::run(self::suite()); + } + + public static function suite() + { + $suite = new PHPUnit_Framework_TestSuite('phpBB Random Functions'); + + $suite->addTestSuite('phpbb_random_gen_rand_string_test'); + + return $suite; + } +} + +if (PHPUnit_MAIN_METHOD == 'phpbb_random_all_tests::main') +{ + phpbb_random_all_tests::main(); +} diff --git a/tests/random/gen_rand_string.php b/tests/random/gen_rand_string.php new file mode 100644 index 0000000000..cd58d14ed3 --- /dev/null +++ b/tests/random/gen_rand_string.php @@ -0,0 +1,63 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2010 phpBB Group +* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* +*/ + +require_once 'test_framework/framework.php'; +require_once '../phpBB/includes/functions.php'; + +class phpbb_random_gen_rand_string_test extends phpbb_test_case +{ + const TEST_COUNT = 100; + const MIN_STRING_LENGTH = 1; + const MAX_STRING_LENGTH = 15; + + public function setUp() + { + global $config; + + if (!is_array($config)) + { + $config = array(); + } + + $config['rand_seed'] = ''; + $config['rand_seed_last_update'] = time() + 600; + } + + public function test_gen_rand_string() + { + for ($tests = 0; $tests <= self::TEST_COUNT; ++$tests) + { + for ($num_chars = self::MIN_STRING_LENGTH; $num_chars <= self::MAX_STRING_LENGTH; ++$num_chars) + { + $random_string = gen_rand_string($num_chars); + $random_string_length = strlen($random_string); + + $this->assertTrue($random_string_length >= self::MIN_STRING_LENGTH); + $this->assertTrue($random_string_length <= $num_chars); + $this->assertRegExp('#^[A-Z0-9]+$#', $random_string); + } + } + } + + public function test_gen_rand_string_friendly() + { + for ($tests = 0; $tests <= self::TEST_COUNT; ++$tests) + { + for ($num_chars = self::MIN_STRING_LENGTH; $num_chars <= self::MAX_STRING_LENGTH; ++$num_chars) + { + $random_string = gen_rand_string_friendly($num_chars); + $random_string_length = strlen($random_string); + + $this->assertTrue($random_string_length >= self::MIN_STRING_LENGTH); + $this->assertTrue($random_string_length <= $num_chars); + $this->assertRegExp('#^[A-NP-Z1-9]+$#', $random_string); + } + } + } +} diff --git a/tests/regex/all_tests.php b/tests/regex/all_tests.php new file mode 100644 index 0000000000..316a9d4a58 --- /dev/null +++ b/tests/regex/all_tests.php @@ -0,0 +1,46 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2010 phpBB Group +* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* +*/ + +if (!defined('PHPUnit_MAIN_METHOD')) +{ + define('PHPUnit_MAIN_METHOD', 'phpbb_regex_all_tests::main'); +} + +require_once 'test_framework/framework.php'; +require_once 'PHPUnit/TextUI/TestRunner.php'; + +require_once 'regex/email.php'; +require_once 'regex/ipv4.php'; +require_once 'regex/ipv6.php'; +require_once 'regex/url.php'; + +class phpbb_regex_all_tests +{ + public static function main() + { + PHPUnit_TextUI_TestRunner::run(self::suite()); + } + + public static function suite() + { + $suite = new PHPUnit_Framework_TestSuite('phpBB Regular Expressions'); + + $suite->addTestSuite('phpbb_regex_email_test'); + $suite->addTestSuite('phpbb_regex_ipv4_test'); + $suite->addTestSuite('phpbb_regex_ipv6_test'); + $suite->addTestSuite('phpbb_regex_url_test'); + + return $suite; + } +} + +if (PHPUnit_MAIN_METHOD == 'phpbb_regex_all_tests::main') +{ + phpbb_regex_all_tests::main(); +} diff --git a/tests/regex/email.php b/tests/regex/email.php new file mode 100644 index 0000000000..8658b8af36 --- /dev/null +++ b/tests/regex/email.php @@ -0,0 +1,119 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2010 phpBB Group +* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* +*/ + +require_once 'test_framework/framework.php'; +require_once '../phpBB/includes/functions.php'; + +class phpbb_regex_email_test extends phpbb_test_case +{ + protected $regex; + + public function setUp() + { + $this->regex = '#^' . get_preg_expression('email') . '$#i'; + } + + public function positive_match_data() + { + return array( + array('nobody@phpbb.com'), + array('Nobody@sub.phpbb.com'), + array('alice.bob@foo.phpbb.com'), + array('alice-foo@bar.phpbb.com'), + array('alice_foo@bar.phpbb.com'), + array('alice+tag@foo.phpbb.com'), + array('alice&tag@foo.phpbb.com'), + + //array('"John Doe"@example.com'), + //array('Alice@[192.168.2.1]'), // IPv4 + //array('Bob@[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]'), // IPv6 + + // http://fightingforalostcause.net/misc/2006/compare-email-regex.php + array('l3tt3rsAndNumb3rs@domain.com'), + array('has-dash@domain.com'), + array('hasApostrophe.o\'leary@domain.org'), + array('uncommonTLD@domain.museum'), + array('uncommonTLD@domain.travel'), + array('uncommonTLD@domain.mobi'), + array('countryCodeTLD@domain.uk'), + array('countryCodeTLD@domain.rw'), + array('numbersInDomain@911.com'), + array('underscore_inLocal@domain.net'), + array('IPInsteadOfDomain@127.0.0.1'), + array('IPAndPort@127.0.0.1:25'), + array('subdomain@sub.domain.com'), + array('local@dash-inDomain.com'), + array('dot.inLocal@foo.com'), + array('a@singleLetterLocal.org'), + array('singleLetterDomain@x.org'), + array('&*=?^+{}\'~@validCharsInLocal.net'), + array('foor@bar.newTLD'), + ); + } + + public function negative_match_data() + { + return array( + array('foo.example.com'), // @ is missing + array('.foo.example.com'), // . as first character + array('Foo.@example.com'), // . is last in local part + array('foo..123@example.com'), // . doubled + array('a@b@c@example.com'), // @ doubled + + array('()[]\;:,<>@example.com'), // invalid characters + array('abc(def@example.com'), // invalid character ( + array('abc)def@example.com'), // invalid character ) + array('abc[def@example.com'), // invalid character [ + array('abc]def@example.com'), // invalid character ] + array('abc\def@example.com'), // invalid character \ + array('abc;def@example.com'), // invalid character ; + array('abc:def@example.com'), // invalid character : + array('abc,def@example.com'), // invalid character , + array('abc<def@example.com'), // invalid character < + array('abc>def@example.com'), // invalid character > + + // http://fightingforalostcause.net/misc/2006/compare-email-regex.php + array('missingDomain@.com'), + array('@missingLocal.org'), + array('missingatSign.net'), + array('missingDot@com'), + array('two@@signs.com'), + array('colonButNoPort@127.0.0.1:'), + array(''), + array('someone-else@127.0.0.1.26'), + array('.localStartsWithDot@domain.com'), + array('localEndsWithDot.@domain.com'), + array('two..consecutiveDots@domain.com'), + array('domainStartsWithDash@-domain.com'), + array('domainEndsWithDash@domain-.com'), + array('numbersInTLD@domain.c0m'), + array('missingTLD@domain.'), + array('! "#$%(),/;<>[]`|@invalidCharsInLocal.org'), + array('invalidCharsInDomain@! "#$%(),/;<>_[]`|.org'), + array('local@SecondLevelDomainNamesAreInvalidIfTheyAreLongerThan64Charactersss.org'), + ); + } + + /** + * @dataProvider positive_match_data + */ + public function test_positive_match($email) + { + $this->assertEquals(1, preg_match($this->regex, $email)); + } + + /** + * @dataProvider negative_match_data + */ + public function test_negative_match($email) + { + $this->assertEquals(0, preg_match($this->regex, $email)); + } +} + diff --git a/tests/regex/ipv4.php b/tests/regex/ipv4.php new file mode 100644 index 0000000000..9d131ad0ca --- /dev/null +++ b/tests/regex/ipv4.php @@ -0,0 +1,72 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2010 phpBB Group +* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* +*/ + +require_once 'test_framework/framework.php'; +require_once '../phpBB/includes/functions.php'; + +class phpbb_regex_ipv4_test extends phpbb_test_case +{ + protected $regex; + + public function setUp() + { + $this->regex = get_preg_expression('ipv4'); + } + + public function positive_match_data() + { + return array( + array('0.0.0.0'), + array('127.0.0.1'), + array('192.168.0.1'), + array('255.255.255.255'), + ); + } + + public function negative_match_data() + { + return array( + // IPv6 addresses + array('2001:0db8:85a3:0000:0000:8a2e:0370:1337'), + array('2001:db8:85a3:c:d:8a2e:370:1337'), + array('2001:db8:85a3::8a2e:370:1337'), + array('2001:db8:0:1::192.168.0.2'), + array('0:0:0:0:0:0:0:1'), + array('0:0::0:0:1'), + array('::1'), + + // Out of scope + array('255.255.255.256'), + + // Other tests + array('a.b.c.d'), + array('11.22.33.'), + array('11.22.33'), + array('11.22'), + array('11'), + ); + } + + /** + * @dataProvider positive_match_data + */ + public function test_positive_match($address) + { + $this->assertEquals(1, preg_match($this->regex, $address)); + } + + /** + * @dataProvider negative_match_data + */ + public function test_negative_match($address) + { + $this->assertEquals(0, preg_match($this->regex, $address)); + } +} + diff --git a/tests/regex/ipv6.php b/tests/regex/ipv6.php new file mode 100644 index 0000000000..3d7a72e492 --- /dev/null +++ b/tests/regex/ipv6.php @@ -0,0 +1,143 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2010 phpBB Group +* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* +*/ + +require_once 'test_framework/framework.php'; +require_once '../phpBB/includes/functions.php'; + +class phpbb_regex_ipv6_test extends phpbb_test_case +{ + protected $regex; + + public function setUp() + { + $this->regex = get_preg_expression('ipv6'); + } + + public function positive_match_data() + { + return array( + // Full length IPv6 address + array('2001:0db8:85a3:0000:0000:8a2e:0370:1337'), + array('0000:0000:0000:0000:0000:0000:0000:0001'), + array('3FFE:0b00:0000:0000:0001:0000:0000:000a'), + array('3ffe:0b00:0000:0000:0001:0000:0000:000a'), + array('2002:0db8:0000:0000:0000:dead:1337:d00d'), + + // No leading zeroes in the group + array('2001:db8:85a3:0:0:8a2e:370:1337'), + array('2001:db8:85a3:c:d:8a2e:370:1337'), + + // Consecutive all-zero groups + array('2001:db8:85a3::8a2e:370:1337'), + array('1::2:3:4:5:6:7'), + array('1::2:3:4:5:6'), + array('1::2:3:4:5'), + array('1::2:3:4'), + array('1::2:3'), + array('1::2'), + + // Last 32bit in dotted quad notation + array('2001:db8:0:1::192.168.0.2'), + + // IPv4-compatible IPv6 address + array('::13.1.68.3'), + array('0:0:0:0:0:0:13.1.68.3'), + + // IPv4-mapped IPv6 address + array('::ffff:c000:280'), + array('::ffff:c000:0280'), + array('::ffff:192.0.2.128'), + array('0:0:0:0:0:ffff:c000:280'), + array('0:0:0:0:0:ffff:c000:0280'), + array('0:0:0:0:0:ffff:192.0.2.128'), + array('0000:0000:0000:0000:0000:ffff:c000:280'), + array('0000:0000:0000:0000:0000:ffff:c000:0280'), + array('0000:0000:0000:0000:0000:ffff:192.0.2.128'), + + // No trailing zeroes + array('fe80::'), + array('2002::'), + array('2001:db8::'), + array('2001:0db8:1234::'), + array('1:2:3:4:5:6::'), + array('1:2:3:4:5::'), + array('1:2:3:4::'), + array('1:2:3::'), + array('1:2::'), + + // No leading zeroes + array('::2:3:4:5:6:7:8'), + array('::2:3:4:5:6:7'), + array('::2:3:4:5:6'), + array('::2:3:4:5'), + array('::2:3:4'), + array('::2:3'), + array('::1'), + array('::8'), + array('::c'), + array('::abcd'), + + // All zeroes + array('::'), + array('0:0:0:0:0:0:0:0'), + array('0000:0000:0000:0000:0000:0000:0000:0000'), + + // More tests + array('2::10'), + array('0:0::0:0:1'), + array('0:0:0:0:0:0:0:1'), + array('::ffff:0:0'), + ); + } + + public function negative_match_data() + { + return array( + // Empty address + array(''), + + // IPv4 address + array('192.168.0.2'), + + // Out of scope + array('abcd:efgh:0000::0'), + array('::ffff:192.168.255.256'), + + // Double :: + array('2001::23de::2002'), + array('3ffe:b00::1::b'), + array('::1111:2222:3333:4444:5555:6666::'), + + // Too many blocks + array('2001:0db8:85a3:08d3:1319:8a2e:0370:1337:4430'), + + // More tests + array('02001:0000:1234:0000:0000:C1C0:ABCD:9876'), + array('2001:0000:1234: 0000:0000:C1C0:ABCD:9876'), + array('::ffff:192x168.255.255'), + ); + } + + /** + * @dataProvider positive_match_data + */ + public function test_positive_match($address) + { + $this->assertEquals(1, preg_match($this->regex, $address)); + } + + /** + * @dataProvider negative_match_data + */ + public function test_negative_match($address) + { + $this->assertEquals(0, preg_match($this->regex, $address)); + } +} + diff --git a/tests/regex/url.php b/tests/regex/url.php new file mode 100644 index 0000000000..678b7d108f --- /dev/null +++ b/tests/regex/url.php @@ -0,0 +1,34 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2010 phpBB Group +* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* +*/ + +require_once 'test_framework/framework.php'; +require_once '../phpBB/includes/functions.php'; + +class phpbb_regex_url_test extends phpbb_test_case +{ + public function url_test_data() + { + return array( + array('http://www.phpbb.com/community/', 1), + array('http://www.phpbb.com/path/file.ext#section', 1), + array('ftp://ftp.phpbb.com/', 1), + array('sip://bantu@phpbb.com', 1), + + array('www.phpbb.com/community/', 0), + ); + } + + /** + * @dataProvider url_test_data + */ + public function test_url($url, $expected) + { + $this->assertEquals($expected, preg_match('#^' . get_preg_expression('url') . '$#i', $url)); + } +} diff --git a/tests/template/template.php b/tests/template/template.php index 145fe8de61..0c2ca8a032 100644 --- a/tests/template/template.php +++ b/tests/template/template.php @@ -26,12 +26,25 @@ class phpbb_template_template_test extends phpbb_test_case error_reporting($error_level & ~E_NOTICE); ob_start(); - $this->assertTrue($this->template->display($handle, false)); + + try + { + $this->assertTrue($this->template->display($handle, false)); + } + catch (Exception $exception) + { + // reset the error level even when an error occured + // PHPUnit turns trigger_error into exceptions as well + error_reporting($error_level); + ob_end_clean(); + throw $exception; + } + + $result = self::trim_template_result(ob_get_clean()); // reset error level error_reporting($error_level); - - return self::trim_template_result(ob_get_clean()); + return $result; } private static function trim_template_result($result) @@ -368,9 +381,15 @@ class phpbb_template_template_test extends phpbb_test_case $this->template->destroy_block_vars($block); } + $error_level = error_reporting(); + error_reporting($error_level & ~E_NOTICE); + $this->assertEquals($expected, self::trim_template_result($this->template->assign_display('test')), "Testing assign_display($file)"); $this->template->assign_display('test', 'VARIABLE', false); + + error_reporting($error_level); + $this->assertEquals($expected, $this->display('container'), "Testing assign_display($file)"); } diff --git a/tests/test_framework/framework.php b/tests/test_framework/framework.php index abdcd1ad79..3a11cc6df9 100644 --- a/tests/test_framework/framework.php +++ b/tests/test_framework/framework.php @@ -32,8 +32,12 @@ if (version_compare(PHPUnit_Runner_Version::id(), '3.3.0', '<')) trigger_error('PHPUnit >= 3.3.0 required'); } -require_once 'PHPUnit/Framework.php'; -require_once 'PHPUnit/Extensions/Database/TestCase.php'; +if (version_compare(PHPUnit_Runner_Version::id(), '3.5.0', '<')) +{ + require_once 'PHPUnit/Framework.php'; + require_once 'PHPUnit/Extensions/Database/TestCase.php'; +} + require_once 'test_framework/phpbb_test_case_helpers.php'; require_once 'test_framework/phpbb_test_case.php'; require_once 'test_framework/phpbb_database_test_case.php'; diff --git a/tests/test_framework/phpbb_database_test_case.php b/tests/test_framework/phpbb_database_test_case.php index d558874c6f..a64bae8c57 100644 --- a/tests/test_framework/phpbb_database_test_case.php +++ b/tests/test_framework/phpbb_database_test_case.php @@ -9,17 +9,21 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_TestCase { + private static $already_connected; + protected $test_case_helpers; - public function init_test_case_helpers() + public function get_test_case_helpers() { if (!$this->test_case_helpers) { $this->test_case_helpers = new phpbb_test_case_helpers($this); } + + return $this->test_case_helpers; } - function get_dbms_data($dbms) + public function get_dbms_data($dbms) { $available_dbms = array( 'firebird' => array( @@ -50,7 +54,7 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test 'mssqlnative' => array( 'SCHEMA' => 'mssql', 'DELIM' => 'GO', - 'PDO' => 'odbc', + 'PDO' => 'sqlsrv', ), 'oracle' => array( 'SCHEMA' => 'oracle', @@ -65,7 +69,7 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test 'sqlite' => array( 'SCHEMA' => 'sqlite', 'DELIM' => ';', - 'PDO' => 'sqlite', + 'PDO' => 'sqlite2', ), ); @@ -79,10 +83,57 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test } } - function split_sql_file($sql, $delimiter) + public function get_database_config() { + if (isset($_SERVER['PHPBB_TEST_DBMS'])) + { + return array( + 'dbms' => isset($_SERVER['PHPBB_TEST_DBMS']) ? $_SERVER['PHPBB_TEST_DBMS'] : '', + 'dbhost' => isset($_SERVER['PHPBB_TEST_DBHOST']) ? $_SERVER['PHPBB_TEST_DBHOST'] : '', + 'dbport' => isset($_SERVER['PHPBB_TEST_DBPORT']) ? $_SERVER['PHPBB_TEST_DBPORT'] : '', + 'dbname' => isset($_SERVER['PHPBB_TEST_DBNAME']) ? $_SERVER['PHPBB_TEST_DBNAME'] : '', + 'dbuser' => isset($_SERVER['PHPBB_TEST_DBUSER']) ? $_SERVER['PHPBB_TEST_DBUSER'] : '', + 'dbpasswd' => isset($_SERVER['PHPBB_TEST_DBPASSWD']) ? $_SERVER['PHPBB_TEST_DBPASSWD'] : '', + ); + } + else if (file_exists('test_config.php')) + { + include('test_config.php'); + + return array( + 'dbms' => $dbms, + 'dbhost' => $dbhost, + 'dbport' => $dbport, + 'dbname' => $dbname, + 'dbuser' => $dbuser, + 'dbpasswd' => $dbpasswd, + ); + } + else if (extension_loaded('sqlite') && version_compare(PHPUnit_Runner_Version::id(), '3.4.15', '>=')) + { + // Silently use sqlite + return array( + 'dbms' => 'sqlite', + 'dbhost' => 'phpbb_unit_tests.sqlite2', // filename + 'dbport' => '', + 'dbname' => '', + 'dbuser' => '', + 'dbpasswd' => '', + ); + } + else + { + $this->markTestSkipped('Missing test_config.php: See first error.'); + } + } + + // NOTE: This function is not the same as split_sql_file from functions_install + public function split_sql_file($sql, $dbms) + { + $dbms_data = $this->get_dbms_data($dbms); + $sql = str_replace("\r" , '', $sql); - $data = preg_split('/' . preg_quote($delimiter, '/') . '$/m', $sql); + $data = preg_split('/' . preg_quote($dbms_data['DELIM'], '/') . '$/m', $sql); $data = array_map('trim', $data); @@ -94,61 +145,211 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test unset($data[key($data)]); } + if ($dbms == 'sqlite') + { + // remove comment lines starting with # - they are not proper sqlite + // syntax and break sqlite2 + foreach ($data as $i => $query) + { + $data[$i] = preg_replace('/^#.*$/m', "\n", $query); + } + } + return $data; } - public function getConnection() + /** + * Retrieves a list of all tables from the database. + * + * @param PDO $pdo + * @param string $dbms + * @return array(string) + */ + function get_tables($pdo, $dbms) { - static $already_connected; + switch ($pdo) + { + case 'mysql': + case 'mysql4': + case 'mysqli': + $sql = 'SHOW TABLES'; + break; - $this->init_test_case_helpers(); - $database_config = $this->test_case_helpers->get_database_config(); + case 'sqlite': + $sql = 'SELECT name + FROM sqlite_master + WHERE type = "table"'; + break; + + case 'mssql': + case 'mssql_odbc': + case 'mssqlnative': + $sql = "SELECT name + FROM sysobjects + WHERE type='U'"; + break; + + case 'postgres': + $sql = 'SELECT relname + FROM pg_stat_user_tables'; + break; + + case 'firebird': + $sql = 'SELECT rdb$relation_name + FROM rdb$relations + WHERE rdb$view_source is null + AND rdb$system_flag = 0'; + break; + + case 'oracle': + $sql = 'SELECT table_name + FROM USER_TABLES'; + break; + } - $dbms_data = $this->get_dbms_data($database_config['dbms']); + $result = $pdo->query($sql); - if ($already_connected) + $tables = array(); + while ($row = $result->fetch(PDO::FETCH_NUM)) { - $pdo = new PDO($dbms_data['PDO'] . ':host=' . $database_config['dbhost'] . ';dbname=' . $database_config['dbname'], $database_config['dbuser'], $database_config['dbpasswd']); + $tables[] = current($row); } - else + + return $tables; + } + + /** + * Returns a PDO connection for the configured database. + * + * @param array $config The database configuration + * @param array $dbms Information on the used DBMS. + * @param bool $use_db Whether the DSN should be tied to a + * particular database making it impossible + * to delete that database. + * @return PDO The PDO database connection. + */ + public function new_pdo($config, $dbms, $use_db) + { + $dsn = $dbms['PDO'] . ':'; + + switch ($dbms['PDO']) { - $pdo = new PDO($dbms_data['PDO'] . ':host=' . $database_config['dbhost'] . ';', $database_config['dbuser'], $database_config['dbpasswd']); + case 'sqlite2': + $dsn .= $config['dbhost']; + break; - try - { - $pdo->exec('DROP DATABASE ' . $database_config['dbname']); - } - catch (PDOException $e){} // ignore non existent db + case 'sqlsrv': + // prefix the hostname (or DSN) with Server= so using just (local)\SQLExpress + // works for example, further parameters can still be appended using ;x=y + $dsn .= 'Server='; + // no break -> rest like ODBC + case 'odbc': + // for ODBC assume dbhost is a suitable DSN + // e.g. Driver={SQL Server Native Client 10.0};Server=(local)\SQLExpress; + $dsn .= $config['dbhost']; + + if ($use_db) + { + $dsn .= ';Database=' . $config['dbname']; + } + break; + + default: + $dsn .= 'host=' . $config['dbhost']; + + if ($use_db) + { + $dsn .= ';dbname=' . $config['dbname']; + } + break; + } - $pdo->exec('CREATE DATABASE ' . $database_config['dbname']); + $pdo = new PDO($dsn, $config['dbuser'], $config['dbpasswd']);; - $pdo = new PDO($dbms_data['PDO'] . ':host=' . $database_config['dbhost'] . ';dbname=' . $database_config['dbname'], $database_config['dbuser'], $database_config['dbpasswd']); + // good for debug + // $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - if ($database_config['dbms'] == 'mysql') - { - $sth = $pdo->query('SELECT VERSION() AS version'); - $row = $sth->fetch(PDO::FETCH_ASSOC); + return $pdo; + } - if (version_compare($row['version'], '4.1.3', '>=')) + private function recreate_db($config, $dbms) + { + switch ($config['dbms']) + { + case 'sqlite': + if (file_exists($config['dbhost'])) { - $dbms_data['SCHEMA'] .= '_41'; + unlink($config['dbhost']); } - else + break; + + default: + $pdo = $this->new_pdo($config, $dbms, false); + + try { - $dbms_data['SCHEMA'] .= '_40'; + $pdo->exec('DROP DATABASE ' . $config['dbname']); } + catch (PDOException $e) + { + // try to delete all tables if dropping the database was not possible. + foreach ($this->get_tables() as $table) + { + try + { + $pdo->exec('DROP TABLE ' . $table); + } + catch (PDOException $e){} // ignore non-existent tables + } + } - unset($row, $sth); - } + $pdo->exec('CREATE DATABASE ' . $config['dbname']); + break; + } + } - $sql_query = $this->split_sql_file(file_get_contents("../phpBB/install/schemas/{$dbms_data['SCHEMA']}_schema.sql"), $dbms_data['DELIM']); + private function load_schema($pdo, $config, $dbms) + { + if ($config['dbms'] == 'mysql') + { + $sth = $pdo->query('SELECT VERSION() AS version'); + $row = $sth->fetch(PDO::FETCH_ASSOC); - foreach ($sql_query as $sql) + if (version_compare($row['version'], '4.1.3', '>=')) + { + $dbms['SCHEMA'] .= '_41'; + } + else { - $pdo->exec($sql); + $dbms['SCHEMA'] .= '_40'; } + } + + $sql = $this->split_sql_file(file_get_contents("../phpBB/install/schemas/{$dbms['SCHEMA']}_schema.sql"), $config['dbms']); - $already_connected = true; + foreach ($sql as $query) + { + $pdo->exec($query); + } + } + + public function getConnection() + { + $config = $this->get_database_config(); + $dbms = $this->get_dbms_data($config['dbms']); + + if (!self::$already_connected) + { + $this->recreate_db($config, $dbms); + } + + $pdo = $this->new_pdo($config, $dbms, true); + + if (!self::$already_connected) + { + $this->load_schema($pdo, $config, $dbms); + + self::$already_connected = true; } return $this->createDefaultDBConnection($pdo, 'testdb'); @@ -156,13 +357,20 @@ abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_Test public function new_dbal() { - $this->init_test_case_helpers(); - return $this->test_case_helpers->new_dbal(); + global $phpbb_root_path, $phpEx; + + $config = $this->get_database_config(); + + require_once '../phpBB/includes/db/' . $config['dbms'] . '.php'; + $dbal = 'dbal_' . $config['dbms']; + $db = new $dbal(); + $db->sql_connect($config['dbhost'], $config['dbuser'], $config['dbpasswd'], $config['dbname'], $config['dbport']); + + return $db; } public function setExpectedTriggerError($errno, $message = '') { - $this->init_test_case_helpers(); - $this->test_case_helpers->setExpectedTriggerError($errno, $message); + $this->get_test_case_helpers()->setExpectedTriggerError($errno, $message); } } diff --git a/tests/test_framework/phpbb_test_case.php b/tests/test_framework/phpbb_test_case.php index af867b29ff..fe90d321dc 100644 --- a/tests/test_framework/phpbb_test_case.php +++ b/tests/test_framework/phpbb_test_case.php @@ -11,17 +11,18 @@ class phpbb_test_case extends PHPUnit_Framework_TestCase { protected $test_case_helpers; - public function init_test_case_helpers() + public function get_test_case_helpers() { if (!$this->test_case_helpers) { $this->test_case_helpers = new phpbb_test_case_helpers($this); } + + return $this->test_case_helpers; } public function setExpectedTriggerError($errno, $message = '') { - $this->init_test_case_helpers(); - $this->test_case_helpers->setExpectedTriggerError($errno, $message); + $this->get_test_case_helpers()->setExpectedTriggerError($errno, $message); } } diff --git a/tests/test_framework/phpbb_test_case_helpers.php b/tests/test_framework/phpbb_test_case_helpers.php index 0c5932e1ad..0acdce32e0 100644 --- a/tests/test_framework/phpbb_test_case_helpers.php +++ b/tests/test_framework/phpbb_test_case_helpers.php @@ -18,59 +18,6 @@ class phpbb_test_case_helpers $this->test_case = $test_case; } - public function get_database_config() - { - static $show_error = true; - - if (!file_exists('test_config.php')) - { - if ($show_error) - { - $show_error = false; - } - else - { - $this->test_case->markTestSkipped('Missing test_config.php: See first error.'); - return; - } - - trigger_error("You have to create a test_config.php like this: -\"<?php -\$dbms = 'mysqli'; -\$dbhost = 'localhost'; -\$dbport = ''; -\$dbname = 'database'; -\$dbuser = 'user'; -\$dbpasswd = 'password'; -\" - -NOTE: The database is dropped and recreated with the phpbb-db-schema! Do NOT specify a database with important data.", E_USER_ERROR); - } - include('test_config.php'); - - return array( - 'dbms' => $dbms, - 'dbhost' => $dbhost, - 'dbport' => $dbport, - 'dbname' => $dbname, - 'dbuser' => $dbuser, - 'dbpasswd' => $dbpasswd, - ); - } - - public function new_dbal() - { - global $phpbb_root_path, $phpEx; - $config = $this->get_database_config(); - - require_once '../phpBB/includes/db/' . $config['dbms'] . '.php'; - $dbal = 'dbal_' . $config['dbms']; - $db = new $dbal(); - $db->sql_connect($config['dbhost'], $config['dbuser'], $config['dbpasswd'], $config['dbname'], $config['dbport']); - - return $db; - } - public function setExpectedTriggerError($errno, $message = '') { $exceptionName = ''; |
