aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoas Schilling <nickvergessen@gmx.de>2010-03-26 16:39:37 +0100
committerJoas Schilling <nickvergessen@gmx.de>2010-03-26 16:39:37 +0100
commit94bc65e2038407b8b6d2b23c195b232e07208d22 (patch)
treef3423e9b9db1868b1471570b374af1d6e0eb27b8
parentc71b1245ecf60d7b8b1143b1f558fcd2a974383a (diff)
downloadforums-94bc65e2038407b8b6d2b23c195b232e07208d22.tar
forums-94bc65e2038407b8b6d2b23c195b232e07208d22.tar.gz
forums-94bc65e2038407b8b6d2b23c195b232e07208d22.tar.bz2
forums-94bc65e2038407b8b6d2b23c195b232e07208d22.tar.xz
forums-94bc65e2038407b8b6d2b23c195b232e07208d22.zip
[feature/dbal-tests] Added database test & refactored test framework
There is now a phpbb_database_test_case which can be used as a base class for tests that require database access. You have to set up a test_config.php file in your tests/ directory containing host, user, pass etc. Extra test functionality has been moved to phpbb_test_case_helpers to provide the same functionality in database tests and regular tests without duplicating the code. This is achieved through delegation of method calls.
-rw-r--r--tests/test_framework/framework.php3
-rw-r--r--tests/test_framework/phpbb_database_test_case.php42
-rw-r--r--tests/test_framework/phpbb_test_case.php30
-rw-r--r--tests/test_framework/phpbb_test_case_helpers.php82
4 files changed, 137 insertions, 20 deletions
diff --git a/tests/test_framework/framework.php b/tests/test_framework/framework.php
index 5913d20ca0..abdcd1ad79 100644
--- a/tests/test_framework/framework.php
+++ b/tests/test_framework/framework.php
@@ -33,4 +33,7 @@ if (version_compare(PHPUnit_Runner_Version::id(), '3.3.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
new file mode 100644
index 0000000000..f0aa54ec8d
--- /dev/null
+++ b/tests/test_framework/phpbb_database_test_case.php
@@ -0,0 +1,42 @@
+<?php
+/**
+*
+* @package testing
+* @copyright (c) 2008 phpBB Group
+* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+*
+*/
+
+abstract class phpbb_database_test_case extends PHPUnit_Extensions_Database_TestCase
+{
+ protected $test_case_helpers;
+
+ public function init_test_case_helpers()
+ {
+ if (!$this->test_case_helpers)
+ {
+ $this->test_case_helpers = new phpbb_test_case_helpers($this);
+ }
+ }
+
+ public function getConnection()
+ {
+ $this->init_test_case_helpers();
+ $database_config = $this->test_case_helpers->get_database_config();
+
+ $pdo = new PDO('mysql:host=' . $database_config['dbhost'] . ';dbname=' . $database_config['dbname'], $database_config['dbuser'], $database_config['dbpasswd']);
+ return $this->createDefaultDBConnection($pdo, 'testdb');
+ }
+
+ public function new_dbal()
+ {
+ $this->init_test_case_helpers();
+ return $this->test_case_helpers->new_dbal();
+ }
+
+ public function setExpectedTriggerError($errno, $message = '')
+ {
+ $this->init_test_case_helpers();
+ $this->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 3cf2a9d442..af867b29ff 100644
--- a/tests/test_framework/phpbb_test_case.php
+++ b/tests/test_framework/phpbb_test_case.php
@@ -9,29 +9,19 @@
class phpbb_test_case extends PHPUnit_Framework_TestCase
{
- protected $expectedTriggerError = false;
+ protected $test_case_helpers;
- public function setExpectedTriggerError($errno, $message = '')
+ public function init_test_case_helpers()
{
- $exceptionName = '';
- switch ($errno)
+ if (!$this->test_case_helpers)
{
- case E_NOTICE:
- case E_STRICT:
- PHPUnit_Framework_Error_Notice::$enabled = true;
- $exceptionName = 'PHPUnit_Framework_Error_Notice';
- break;
-
- case E_WARNING:
- PHPUnit_Framework_Error_Warning::$enabled = true;
- $exceptionName = 'PHPUnit_Framework_Error_Warning';
- break;
-
- default:
- $exceptionName = 'PHPUnit_Framework_Error';
- break;
+ $this->test_case_helpers = new phpbb_test_case_helpers($this);
}
- $this->expectedTriggerError = true;
- $this->setExpectedException($exceptionName, (string) $message, $errno);
+ }
+
+ public function setExpectedTriggerError($errno, $message = '')
+ {
+ $this->init_test_case_helpers();
+ $this->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
new file mode 100644
index 0000000000..27a730e2dd
--- /dev/null
+++ b/tests/test_framework/phpbb_test_case_helpers.php
@@ -0,0 +1,82 @@
+<?php
+/**
+*
+* @package testing
+* @copyright (c) 2008 phpBB Group
+* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+*
+*/
+
+class phpbb_test_case_helpers
+{
+ protected $expectedTriggerError = false;
+
+ protected $test_case;
+
+ public function __construct($test_case)
+ {
+ $this->test_case = $test_case;
+ }
+
+ public function get_database_config()
+ {
+ if (!file_exists('test_config.php'))
+ {
+ trigger_error("You have to create a test_config.php like this:
+<?php
+$dbms = 'mysqli';
+$dbhost = 'localhost';
+$dbport = '';
+$dbname = 'database';
+$dbuser = 'user';
+$dbpasswd = 'password';", 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 = '';
+ switch ($errno)
+ {
+ case E_NOTICE:
+ case E_STRICT:
+ PHPUnit_Framework_Error_Notice::$enabled = true;
+ $exceptionName = 'PHPUnit_Framework_Error_Notice';
+ break;
+
+ case E_WARNING:
+ PHPUnit_Framework_Error_Warning::$enabled = true;
+ $exceptionName = 'PHPUnit_Framework_Error_Warning';
+ break;
+
+ default:
+ $exceptionName = 'PHPUnit_Framework_Error';
+ break;
+ }
+ $this->expectedTriggerError = true;
+ $this->test_case->setExpectedException($exceptionName, (string) $message, $errno);
+ }
+}