101 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  *  Autorunner which runs all tests cases found in a file
 | |
|  *  that includes this module.
 | |
|  *  @package    SimpleTest
 | |
|  *  @version    $Id: autorun.php 2037 2011-11-30 17:58:21Z pp11 $
 | |
|  */
 | |
| 
 | |
| /**#@+
 | |
|  * include simpletest files
 | |
|  */
 | |
| require_once dirname(__FILE__) . '/unit_tester.php';
 | |
| require_once dirname(__FILE__) . '/mock_objects.php';
 | |
| require_once dirname(__FILE__) . '/collector.php';
 | |
| require_once dirname(__FILE__) . '/default_reporter.php';
 | |
| /**#@-*/
 | |
| 
 | |
| $GLOBALS['SIMPLETEST_AUTORUNNER_INITIAL_CLASSES'] = get_declared_classes();
 | |
| $GLOBALS['SIMPLETEST_AUTORUNNER_INITIAL_PATH'] = getcwd();
 | |
| register_shutdown_function('simpletest_autorun');
 | |
| 
 | |
| /**
 | |
|  *    Exit handler to run all recent test cases and exit system if in CLI
 | |
|  */
 | |
| function simpletest_autorun() {
 | |
| 	chdir($GLOBALS['SIMPLETEST_AUTORUNNER_INITIAL_PATH']);
 | |
|     if (tests_have_run()) {
 | |
|         return;
 | |
|     }
 | |
|     $result = run_local_tests();
 | |
|     if (SimpleReporter::inCli()) {
 | |
|         exit($result ? 0 : 1);
 | |
|     }
 | |
| }
 | |
| 
 | |
| /**
 | |
|  *    run all recent test cases if no test has
 | |
|  *    so far been run. Uses the DefaultReporter which can have
 | |
|  *    it's output controlled with SimpleTest::prefer().
 | |
|  *    @return boolean/null false if there were test failures, true if
 | |
|  *                         there were no failures, null if tests are
 | |
|  *                         already running
 | |
|  */
 | |
| function run_local_tests() {
 | |
|     try {
 | |
|         if (tests_have_run()) {
 | |
|             return;
 | |
|         }
 | |
|         $candidates = capture_new_classes();
 | |
|         $loader = new SimpleFileLoader();
 | |
|         $suite = $loader->createSuiteFromClasses(
 | |
|                 basename(initial_file()),
 | |
|                 $loader->selectRunnableTests($candidates));
 | |
|         return $suite->run(new DefaultReporter());
 | |
|     } catch (Exception $stack_frame_fix) {
 | |
|         print $stack_frame_fix->getMessage();
 | |
|         return false;
 | |
|     }
 | |
| }
 | |
| 
 | |
| /**
 | |
|  *    Checks the current test context to see if a test has
 | |
|  *    ever been run.
 | |
|  *    @return boolean        True if tests have run.
 | |
|  */
 | |
| function tests_have_run() {
 | |
|     if ($context = SimpleTest::getContext()) {
 | |
|         return (boolean)$context->getTest();
 | |
|     }
 | |
|     return false;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  *    The first autorun file.
 | |
|  *    @return string        Filename of first autorun script.
 | |
|  */
 | |
| function initial_file() {
 | |
|     static $file = false;
 | |
|     if (! $file) {
 | |
|         if (isset($_SERVER, $_SERVER['SCRIPT_FILENAME'])) {
 | |
|             $file = $_SERVER['SCRIPT_FILENAME'];
 | |
|         } else {
 | |
|             $included_files = get_included_files();
 | |
|             $file = reset($included_files);
 | |
|         }
 | |
|     }
 | |
|     return $file;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  *    Every class since the first autorun include. This
 | |
|  *    is safe enough if require_once() is always used.
 | |
|  *    @return array        Class names.
 | |
|  */
 | |
| function capture_new_classes() {
 | |
|     global $SIMPLETEST_AUTORUNNER_INITIAL_CLASSES;
 | |
|     return array_map('strtolower', array_diff(get_declared_classes(),
 | |
|                             $SIMPLETEST_AUTORUNNER_INITIAL_CLASSES ?
 | |
|                             $SIMPLETEST_AUTORUNNER_INITIAL_CLASSES : array()));
 | |
| }
 | |
| ?>
 |