From 3f93973a122f50a4cc574c7ba5f042cb9446b2c3 Mon Sep 17 00:00:00 2001 From: Marcin Kurczewski Date: Thu, 15 May 2014 11:01:47 +0200 Subject: [PATCH] Added support for MySQL in test runner --- tests/run-all.php | 58 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 13 deletions(-) diff --git a/tests/run-all.php b/tests/run-all.php index 5f96b9a0..a0545191 100644 --- a/tests/run-all.php +++ b/tests/run-all.php @@ -2,13 +2,31 @@ require_once __DIR__ . '/../src/core.php'; \Chibi\Autoloader::registerFileSystem(__DIR__); -$dbPath = __DIR__ . '/db.sqlite'; +function getSqliteDatabasePath() +{ + return __DIR__ . '/db.sqlite'; +} + +function getMysqlDatabaseName() +{ + return 'booru_test'; +} function cleanDatabase() { - global $dbPath; - if (file_exists($dbPath)) - unlink($dbPath); + if (Core::getConfig()->main->dbDriver == 'sqlite') + { + $dbPath = getSqliteDatabasePath(); + if (file_exists($dbPath)) + unlink($dbPath); + } + elseif (Core::getConfig()->main->dbDriver == 'mysql') + { + $stmt = new \Chibi\Sql\RawStatement('DROP DATABASE IF EXISTS ' . getMysqlDatabaseName()); + \Chibi\Database::exec($stmt); + $stmt = new \Chibi\Sql\RawStatement('CREATE DATABASE ' . getMysqlDatabaseName()); + \Chibi\Database::exec($stmt); + } } function removeTestFolders() @@ -41,20 +59,34 @@ function removeTestFolders() } } -function resetEnvironment() +function resetEnvironment($dbDriver) { - global $dbPath; - $_SESSION = []; Core::prepareConfig(true); - Core::getConfig()->main->dbDriver = 'sqlite'; - Core::getConfig()->main->dbLocation = $dbPath; + Core::getConfig()->main->dbDriver = $dbDriver; + if ($dbDriver == 'sqlite') + { + Core::getConfig()->main->dbLocation = getSqliteDatabasePath(); + } + elseif ($dbDriver == 'mysql') + { + Core::getConfig()->main->dbLocation = getMysqlDatabaseName(); + Core::getConfig()->main->dbUser = 'test'; + Core::getConfig()->main->dbPass = 'test'; + } removeTestFolders(); Core::prepareEnvironment(true); + + if ($dbDriver == 'mysql') + { + $stmt = new \Chibi\Sql\RawStatement('USE ' . getMysqlDatabaseName()); + \Chibi\Database::execUnprepared($stmt); + } } -$options = getopt('cf:', ['clean', 'filter:']); +$options = getopt('cf:', ['clean', 'filter:', 'driver:']); $cleanDatabase = (isset($options['c']) or isset($options['clean'])); +$dbDriver = isset($options['driver']) ? $options['driver'] : 'sqlite'; if (isset($options['f'])) $filter = $options['f']; @@ -63,16 +95,16 @@ elseif (isset($options['filter'])) else $filter = null; -resetEnvironment(); +resetEnvironment($dbDriver); if ($cleanDatabase) cleanDatabase(); -resetEnvironment(); +resetEnvironment($dbDriver); Core::upgradeDatabase(); $testRunner = new TestRunner; $testRunner->setFilter($filter); -$testRunner->setEnvironmentPrepareAction(function() { resetEnvironment(); }); +$testRunner->setEnvironmentPrepareAction(function() use ($dbDriver) { resetEnvironment($dbDriver); }); $testRunner->setEnvironmentCleanAction(function() { removeTestFolders(); }); $testRunner->setTestWrapperAction(function($callback) {