note to self: think before commit
[lhc/web/wiklou.git] / tests / RunTests.php
index d88dc80..6011ee8 100644 (file)
@@ -1,12 +1,95 @@
 <?php
+
+if( php_sapi_name() != 'cli' ) {
+       die( 'Must be run from the command line.' );
+}
+
 error_reporting( E_ALL );
 define( "MEDIAWIKI", true );
 
 require_once( 'PHPUnit.php' );
-require_once( 'DatabaseTest.php' );
 
-$suite = new PHPUnit_TestSuite( "DatabaseTest" );
-$result = PHPUnit::run( $suite );
-echo $result->toString();
+$testOptions = array(
+       'mysql3' => array(
+               'server' => null,
+               'user' => null,
+               'password' => null,
+               'database' => null ),
+       'mysql4' => array(
+               'server' => null,
+               'user' => null,
+               'password' => null,
+               'database' => null ),
+       'postgresql' => array(
+               'server' => null,
+               'user' => null,
+               'password' => null,
+               'database' => null ),
+       );
+
+if( file_exists( 'LocalTestSettings.php' ) ) {
+       include( './LocalTestSettings.php' );
+}
+
+$tests = array(
+       'GlobalTest',
+       'DatabaseTest',
+       'SearchMySQL3Test',
+       'SearchMySQL4Test',
+       'ArticleTest',
+       );
+foreach( $tests as $test ) {
+       require_once( $test . '.php' );
+       $suite = new PHPUnit_TestSuite( $test );
+       $result = PHPUnit::run( $suite );
+       echo $result->toString();
+}
+
+/**
+ * @param string $serverType
+ * @param array $tables
+ */
+function &buildTestDatabase( $serverType, $tables ) {
+       global $testOptions, $wgDBprefix;
+       $wgDBprefix = 'parsertest';
+       $db =& new Database(
+               $testOptions[$serverType]['server'],
+               $testOptions[$serverType]['user'],
+               $testOptions[$serverType]['password'],
+               $testOptions[$serverType]['database'] );
+       if( $db->isOpen() ) {
+               if (!(strcmp($db->getServerVersion(), '4.1') < 0 and stristr($db->getSoftwareLink(), 'MySQL'))) {
+                       # Database that supports CREATE TABLE ... LIKE
+                       foreach ($tables as $tbl) {
+                               $newTableName = $db->tableName( $tbl );
+                               #$tableName = $this->oldTableNames[$tbl];
+                               $tableName = $tbl;
+                               $db->query("CREATE TEMPORARY TABLE $newTableName (LIKE $tableName INCLUDING DEFAULTS)");
+                       }
+               } else {
+                       # Hack for MySQL versions < 4.1, which don't support
+                       # "CREATE TABLE ... LIKE". Note that
+                       # "CREATE TEMPORARY TABLE ... SELECT * FROM ... LIMIT 0"
+                       # would not create the indexes we need....
+                       foreach ($tables as $tbl) {
+                               $res = $db->query("SHOW CREATE TABLE $tbl");
+                               $row = $db->fetchRow($res);
+                               $create = $row[1];
+                               $create_tmp = preg_replace('/CREATE TABLE `(.*?)`/', 'CREATE TEMPORARY TABLE `'
+                                       . $wgDBprefix . '\\1`', $create);
+                               if ($create === $create_tmp) {
+                                       # Couldn't do replacement
+                                       die("could not create temporary table $tbl");
+                               }
+                               $db->query($create_tmp);
+                       }
+
+               }
+               return $db;
+       } else {
+               // Something amiss
+               return null;
+       }
+}
 
 ?>
\ No newline at end of file