drupal_unit_tests.php in SimpleTest 6
File
drupal_unit_tests.php
View source
<?php
class DrupalTestSuite extends TestSuite {
var $_cleanupModules = [];
function DrupalTestSuite($label) {
$this
->TestSuite($label);
}
function getTestInstances() {
for ($i = 0, $count = count($this->_test_cases); $i < $count; $i++) {
if (is_string($this->_test_cases[$i])) {
$class = $this->_test_cases[$i];
$this->_test_cases[$i] =& new $class();
}
}
return $this->_test_cases;
}
}
class DrupalUnitTests extends DrupalTestSuite {
function DrupalUnitTests($class_list = NULL) {
static $classes;
$this
->DrupalTestSuite('Drupal Unit Tests');
if (!$classes) {
$files = array();
foreach (module_list() as $module) {
$module_path = drupal_get_path('module', $module);
if (file_exists($module_path . '/tests/')) {
$dir = $module_path . '/tests';
$tests = file_scan_directory($dir, '\\.test$');
$files = array_merge($files, $tests);
}
}
$files = array_keys($files);
$existing_classes = get_declared_classes();
foreach ($files as $file) {
if (!preg_match('/class\\s+.*?\\s+extends\\s+DrupalWebTestCase/', file_get_contents($file))) {
include_once $file;
}
}
$classes = array_diff(get_declared_classes(), $existing_classes);
}
if (!is_null($class_list)) {
$classes = $class_list;
}
if (count($classes) == 0) {
$this
->addTestCase(new BadGroupTest($test_file, 'No new test cases'));
return;
}
$groups = array();
foreach ($classes as $class) {
if (!is_subclass_of($class, 'DrupalTestCase')) {
continue;
}
$this
->_addClassToGroups($groups, $class);
}
foreach ($groups as $group_name => $group) {
$group_test =& new DrupalTestSuite($group_name);
foreach ($group as $key => $v) {
$group_test
->addTestCase($group[$key]);
}
$this
->addTestCase($group_test);
}
}
function _addClassToGroups(&$groups, $class) {
$test =& new $class();
if (method_exists($test, 'get_info')) {
$info = $test
->get_info();
$groups[$info['group']][] = $test;
}
elseif (method_exists($test, 'getInfo')) {
$info = $test
->getInfo();
$groups[$info['group']][] = $test;
}
}
function run(&$reporter) {
cache_clear_all();
@set_time_limit(0);
ignore_user_abort(true);
if (!variable_get('simpletest_devel', false)) {
$GLOBALS['devel_shutdown'] = FALSE;
}
$result = parent::run($reporter);
foreach ($this->_cleanupModules as $name => $status) {
db_query("UPDATE {system} SET status = %d WHERE name = '%s' AND type = 'module'", $status, $name);
}
$this->_cleanupModules = array();
return $result;
}
function drupalModuleEnable($name) {
if (module_exists($name)) {
return TRUE;
}
include_once './includes/install.inc';
module_rebuild_cache();
if (drupal_get_installed_schema_version($name, TRUE) == SCHEMA_UNINSTALLED) {
drupal_install_modules(array(
$name,
));
}
else {
$try = module_enable(array(
$name,
));
}
if (module_exists($name)) {
if (!isset($this->_cleanupModules[$name])) {
$this->_cleanupModules[$name] = 0;
return TRUE;
}
}
else {
die("required module {$name} could not be enabled (probably file does not exist)");
}
}
function drupalModuleDisable($name) {
if (!module_exists($name)) {
return TRUE;
}
db_query("UPDATE {system} SET status = 0 WHERE name = '%s' AND type = 'module'", $name);
if (db_affected_rows()) {
if (!isset($this->_cleanupModules[$name])) {
$this->_cleanupModules[$name] = 1;
}
module_list(TRUE, FALSE);
return TRUE;
}
die("incompatible module {$name} could not be disabled for unknown reason");
}
}