require_once DRUPAL_ROOT . '/' . drupal_get_path('module', 'simpletest') . '/drupal_web_test_case.php'; $files = file_scan_directory('.', '/.*.test$/m'); //print_r($files); $classes = array(); foreach ($files as $file) { $existing_classes = get_declared_classes(); require_once DRUPAL_ROOT . '/' . $file->filepath; $new_classes = array_values(array_diff(get_declared_classes(), $existing_classes)); $parts = explode('/', $file->filepath); $module = $parts[2]; if (!isset($classes[$module])) { $classes[$module] = array(); } if (strpos($file->filepath, '/tests/') !== FALSE) { // In subfolder. $classes[$module]['tests'][$file->name] = $new_classes; } else { $classes[$module]['root'] = $new_classes; } } //print_r($classes); ksort($classes); foreach ($classes as $module => $module_tests) { $info = array(); foreach ($module_tests['root'] as $test_class) { $instance = new $test_class; if (method_exists($instance, 'getInfo')) { $info[$test_class] = $instance->getInfo(); } } foreach ($module_tests['tests'] as $file => $tests) { foreach ($tests as $test_class) { $instance = new $test_class; if (method_exists($instance, 'getInfo')) { $info[$test_class] = $instance->getInfo(); $info[$test_class]['file'] = $file; } } } $hook = "/**\n * Implementation of hook_test().\n */\n"; $hook .= "function {$module}_test() {\n" . ' $tests = array();' . "\n"; foreach ($info as $test_class => $info) { $array = var_export($info, TRUE); $array = str_replace('array (', 'array(', $array); $array = str_replace(" => \n array(", " => array(", $array); $array = str_replace("' => '", "' => t('", $array); $array = str_replace("',", "'),", $array); $array = preg_replace("/'file' => t\((.*?)\),/", "'file' => $1,", $array); $hook .= str_replace("\n", "\n ", "\n" . '$tests[\'' . $test_class . '\'] = ' . $array . ";"); } $hook .= "\n\n return \$tests;"; $hook .= "\n}"; $hook .= "\n"; $test_file = drupal_get_path('module', $module) . "/$module.test"; $contents = file_get_contents($test_file); $contents = preg_replace('/(<\?php.*?\/\/ \$Id.*?\$\n)/s', "\\1\n$hook", $contents); file_put_contents($test_file, $contents); echo "Added hook_test() to: $module, $test_file...\n"; // break; } //return; ksort($files); foreach ($files as $file) { $contents = file_get_contents($file->filepath); $contents = preg_replace("/\n\s+function getInfo\(\) {.*?}/s", '', $contents); if ($contents) { file_put_contents($file->filepath, $contents); echo "Removed getInfo() from: $file->filename...\n"; } // break; } return;