$value) { define($key, $value); } TestManager::_installSimpleTest(); list($version) = file(SIMPLE_TEST.'VERSION'); $version = trim($version); if(!version_compare('1.0.1alpha',$version,'<')){ echo "At least SimpleTest Version 1.0.1alpha is required."; echo " Yours is $version\n"; exit; } } function _installSimpleTest() { require_once SIMPLE_TEST . 'unit_tester.php'; require_once SIMPLE_TEST . 'web_tester.php'; require_once SIMPLE_TEST . 'mock_objects.php'; require_once 'web.inc.php'; require_once 'mock_functions.php'; } function runAllTests(&$reporter) { $manager =& new TestManager(); $test_cases =& $manager->_getTestFileList(); $test =& new GroupTest('All Tests'); foreach ($test_cases as $test_case) { $test->addTestFile($test_case); } $test->run($reporter); } function runTestCase($testcase_name, $test_case_directory, &$reporter) { $manager =& new TestManager(); $testcase_name = preg_replace('/[^a-zA-Z0-9_:]/','',$testcase_name); $testcase_name = str_replace(':',DIRECTORY_SEPARATOR,$testcase_name); $testcase_file = $test_case_directory . DIRECTORY_SEPARATOR . strtolower($testcase_name) . $manager->_testcase_extension; if (! file_exists($testcase_file)) { trigger_error("Test case {$testcase_file} cannot be found", E_USER_ERROR); } $test =& new GroupTest("Individual test case: " . $testcase_name); $test->addTestFile($testcase_file); $test->run($reporter); } function runTestFile($testcase_file, &$reporter) { $manager =& new TestManager(); if (! file_exists($testcase_file)) { trigger_error("Test case {$testcase_file} cannot be found", E_USER_ERROR); } $test =& new GroupTest("Individual test case: " . $testcase_file); $test->addTestFile($testcase_file); $test->run($reporter); } function runGroupTest($group_test_name, $group_test_directory, &$reporter) { $manager =& new TestManager(); $group_test_name = preg_replace('/[^a-zA-Z0-9_:]/','',$group_test_name); $group_test_name = str_replace(':',DIRECTORY_SEPARATOR,$group_test_name); $file_path = $group_test_directory . DIRECTORY_SEPARATOR . strtolower($group_test_name) . $manager->_grouptest_extension; if (! file_exists($file_path)) { trigger_error("Group test {$group_test_name} cannot be found at {$file_path}", E_USER_ERROR); } require_once $file_path; $test =& new GroupTest($group_test_name . ' group test'); foreach ($manager->_getGroupTestClassNames($file_path) as $group_test) { $test->addTestCase(new $group_test()); } $test->run($reporter); } function addTestCasesFromDirectory(&$group_test, $directory = '.') { $manager =& new TestManager(); $test_cases =& $manager->_getTestFileList($directory); foreach ($test_cases as $test_case) { $group_test->addTestFile($test_case); } } function &getTestCaseList($directory = '.') { $manager =& new TestManager(); return $manager->_getTestCaseList($directory); } function &_getTestCaseList($directory = '.') { $base = TEST_GROUPS . DIRECTORY_SEPARATOR; $file_list =& $this->_getTestFileList($directory); $testcases = array(); foreach ($file_list as $testcase_file) { $case = str_replace($this->_testcase_extension, '',$testcase_file); $case = str_replace($base, '', $case); $case = str_replace(DIRECTORY_SEPARATOR, ':', $case); $testcases[$testcase_file] = $case; } return $testcases; } function &_getTestFileList($directory = '.') { return $this->_getRecursiveFileList($directory, array(&$this, '_isTestCaseFile')); } function &getGroupTestList($directory = '.') { $manager =& new TestManager(); return $manager->_getTestGroupList($directory); } function &_getTestGroupFileList($directory = '.') { return $this->_getRecursiveFileList($directory, array(&$this, '_isTestGroupFile')); } function &_getTestGroupList($directory = '.') { $base = TEST_GROUPS . DIRECTORY_SEPARATOR; $file_list =& $this->_getTestGroupFileList($directory); $grouptests = array(); foreach ($file_list as $grouptest_file) { $group = str_replace($this->_grouptest_extension, '',$grouptest_file); $group = str_replace($base, '', $group); $group = str_replace(DIRECTORY_SEPARATOR, ':', $group); $grouptests[$grouptest_file] = $group; } sort($grouptests); return $grouptests; } function &_getGroupTestClassNames($grouptest_file) { $file = implode("\n", file($grouptest_file)); preg_match("~lass\s+?(.*)\s+?extends GroupTest~", $file, $matches); if (! empty($matches)) { unset($matches[0]); return $matches; } else { return array(); } } function &_getRecursiveFileList($directory = '.', $file_test_function) { $dh = opendir($directory); if (! is_resource($dh)) { trigger_error("Couldn't open {$directory}", E_USER_ERROR); } $file_list = array(); while ($file = readdir($dh)) { $file_path = $directory . DIRECTORY_SEPARATOR . $file; if (0 === strpos($file, '.')) continue; if (is_dir($file_path)) { $file_list = array_merge($file_list, $this->_getRecursiveFileList($file_path, $file_test_function)); } if ($file_test_function[0]->$file_test_function[1]($file)) { $file_list[] = $file_path; } } closedir($dh); return $file_list; } function _isTestCaseFile($file) { return $this->_hasExpectedExtension($file, $this->_testcase_extension); } function _isTestGroupFile($file) { return $this->_hasExpectedExtension($file, $this->_grouptest_extension); } function _hasExpectedExtension($file, $extension) { return $extension == strtolower(substr($file, (0 - strlen($extension)))); } } /** * @package WACT_TESTS */ class CLITestManager extends TestManager { function &getGroupTestList($directory = '.') { $manager =& new CLITestManager(); $group_tests =& $manager->_getTestGroupList($directory); $buffer = "Available grouptests:\n"; foreach ($group_tests as $group_test) { $buffer .= " " . $group_test . "\n"; } return $buffer . "\n"; } function &getTestCaseList($directory = '.') { $manager =& new CLITestManager(); $test_cases =& $manager->_getTestCaseList($directory); $buffer = "Available test cases:\n"; foreach ($test_cases as $test_case) { $buffer .= " " . $test_case . "\n"; } return $buffer . "\n"; } } class HTMLTestManager extends TestManager { var $_url; function HTMLTestManager() { $this->_url = $_SERVER['PHP_SELF']; } function getBaseURL() { return $this->_url; } function &getGroupTestList($directory = '.') { $manager =& new HTMLTestManager(); $group_tests =& $manager->_getTestGroupList($directory); if (1 > count($group_tests)) { return "
No test groups set up!
"; } $buffer = "Available test groups:
\nNo test cases set up!
"; } $buffer = "Available test cases:
\n