set('database.unit_test.benchmark', $default['benchmark']); $config->set('database.unit_test.persistent', $default['persistent']); $config->set('database.unit_test.connection.type', $conn['type']); $config->set('database.unit_test.connection.user', $conn['user']); $config->set('database.unit_test.connection.pass', $conn['pass']); $config->set('database.unit_test.connection.host', $conn['host']); $config->set('database.unit_test.connection.port', $conn['port']); $config->set('database.unit_test.connection.socket', $conn['socket']); $config->set('database.unit_test.connection.database', "{$conn['database']}_test"); $config->set('database.unit_test.character_set', $default['character_set']); $config->set('database.unit_test.table_prefix', $default['table_prefix']); $config->set('database.unit_test.object', $default['object']); $config->set('database.unit_test.cache', $default['cache']); $config->set('database.unit_test.escape', $default['escape']); $db_config = Kohana::config('database'); } if ($db_config['default']['connection']['database'] == $db_config['unit_test']['connection']['database']) { print "Don't use the default database for your unit tests or you'll lose all your data.\n"; return; } try { $db = Database::instance('unit_test'); $db->connect(); // Make this the default database for the rest of this run Database::set_default_instance($db); } catch (Exception $e) { print "{$e->getMessage()}\n"; return; } } try { // Clean out the database if ($tables = $db->list_tables()) { foreach ($db->list_tables() as $table) { $db->query("DROP TABLE {{$table}}"); } } // Clean out the filesystem @system("rm -rf test/var"); @mkdir('test/var/logs', 0777, true); $active_modules = module::$active; // Reset our caches module::$modules = array(); module::$active = array(); module::$var_cache = array(); $db->clear_cache(); // Rest the cascading class path $config->set("core", $config->load("core")); // Install the active modules // Force gallery and user to be installed first to resolve dependencies. gallery_installer::install(true); module::load_modules(); module::install("user"); module::activate("user"); $modules = $paths = array(); foreach (module::available() as $module_name => $unused) { if (in_array($module_name, array("gallery", "user"))) { $paths[] = MODPATH . "{$module_name}/tests"; continue; } if (file_exists($path = MODPATH . "{$module_name}/tests")) { $paths[] = $path; module::install($module_name); module::activate($module_name); } } $config->set('unit_test.paths', $paths); // Trigger late-binding install actions (defined in gallery_event::user_login) graphics::choose_default_toolkit(); $filter = count($_SERVER["argv"]) > 2 ? $_SERVER["argv"][2] : null; print new Unit_Test($modules, $filter); } catch (Exception $e) { print "Exception: {$e->getMessage()}\n"; print $e->getTraceAsString() . "\n"; } } }