git-svn-id: file:///home/shish/svn/shimmie2/trunk@1068 7f39781d-f577-437e-ae19-be835c7a54ca
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  *  Autorunner which runs all tests cases found in a file
 | |
|  *  that includes this module.
 | |
|  *  @package    SimpleTest
 | |
|  *  @version    $Id: autorun.php 1721 2008-04-07 19:27:10Z lastcraft $
 | |
|  */
 | |
| 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();
 | |
| register_shutdown_function('simpletest_autorun');
 | |
| 
 | |
| /**
 | |
|  *    Exit handler to 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().
 | |
|  */
 | |
| function simpletest_autorun() {
 | |
|     if (tests_have_run()) {
 | |
|         return;
 | |
|     }
 | |
|     $candidates = array_intersect(
 | |
|             capture_new_classes(),
 | |
|             classes_defined_in_initial_file());
 | |
|     $loader = new SimpleFileLoader();
 | |
|     $suite = $loader->createSuiteFromClasses(
 | |
|             basename(initial_file()),
 | |
|             $loader->selectRunnableTests($candidates));
 | |
|     $result = $suite->run(new DefaultReporter());
 | |
|     if (SimpleReporter::inCli()) {
 | |
|         exit($result ? 0 : 1);
 | |
|     }
 | |
| }
 | |
| 
 | |
| /**
 | |
|  *    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) {
 | |
|         $file = reset(get_included_files());
 | |
|     }
 | |
|     return $file;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  *    Just the classes from the first autorun script. May
 | |
|  *    get a few false positives, as it just does a regex based
 | |
|  *    on following the word "class".
 | |
|  *    @return array        List of all possible classes in first
 | |
|  *                         autorun script.
 | |
|  */
 | |
| function classes_defined_in_initial_file() {
 | |
|     if (preg_match_all('/\bclass\s+(\w+)/i', file_get_contents(initial_file()), $matches)) {
 | |
|         return array_map('strtolower', $matches[1]);
 | |
|     }
 | |
|     return array();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  *    Every class since the first autorun include. This
 | |
|  *    is safe enough if require_once() is alwyas 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()));
 | |
| }
 | |
| ?>
 |