diff options
Diffstat (limited to 'tests/test_tools/unit_tests.php')
-rw-r--r-- | tests/test_tools/unit_tests.php | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/tests/test_tools/unit_tests.php b/tests/test_tools/unit_tests.php new file mode 100644 index 00000000..b714f452 --- /dev/null +++ b/tests/test_tools/unit_tests.php @@ -0,0 +1,139 @@ +<?php + +if(!defined('PRADO_FRAMEWORK')) + define('PRADO_FRAMEWORK',realpath(dirname(__FILE__).'/../framework')); + +$TEST_TOOLS = dirname(__FILE__); + +require_once($TEST_TOOLS.'/simpletest/unit_tester.php'); +require_once($TEST_TOOLS.'/simpletest/web_tester.php'); +require_once($TEST_TOOLS.'/simpletest/mock_objects.php'); +require_once($TEST_TOOLS.'/simpletest/reporter.php'); + +require_once(PRADO_FRAMEWORK.'/prado.php'); + +//set_include_path(get_include_path().";".PRADO_FRAMEWORK); + +//error_reporting(E_ALL); +//restore_error_handler(); + +class TMockApplication extends TApplication +{ + public function run() + { + $this->initApplication(); + } +} + +class TestFolder +{ + public $name=''; + public $url=''; + public $subFolders=array(); + public $testFiles=array(); + + public function __construct($path,$rootPath,$rootUri) + { + $script = basename($_SERVER['SCRIPT_NAME']); + $this->url="$rootUri/$script?target=".strtr(substr($path,strlen($rootPath)+1),"\\",'/'); + $this->name=basename($path); + $dir=opendir($path); + while(($entry=readdir($dir))!==false) + { + $fullpath="$path/$entry"; + if($entry!=='.' && $entry!=='..' && $entry!=='.svn' && is_dir($fullpath)) + { + $folder=new TestFolder($fullpath,$rootPath,$rootUri); + if(!empty($folder->subFolders) || !empty($folder->testFiles)) + $this->subFolders[]=$folder; + } + else if(is_file($fullpath) && (strncmp($entry,'ut',2)===0 + || preg_match('/test.*\.php/', strtolower($entry)))) + { + $this->testFiles[$entry]="$rootUri/$script?target=".strtr(substr($fullpath,strlen($rootPath)+1),"\\",'/'); + } + } + closedir($dir); + } + + public function getHtml($level=0) + { + $str=str_repeat(' ',$level*4)."[ <a href=\"{$this->url}\">{$this->name}</a> ]<br/>\n"; + foreach($this->subFolders as $folder) + $str.=$folder->getHtml($level+1); + foreach($this->testFiles as $name=>$url) + $str.=str_repeat(' ',($level+1)*4)."<a href=\"$url\">$name</a><br/>\n"; + return $str; + } +} + +class PradoUnitTester +{ + private $_root; + + function __construct($root, $app_dir) + { + $this->_root = $root; + $app = new TMockApplication($app_dir); + $app->run(); + } + + function addTests($test,$path,$recursive) + { + $dir=opendir($path); + while(($entry=readdir($dir))!==false) + { + if(is_file($path.'/'.$entry) && (strncmp($entry,'ut',2)===0||preg_match('/test.*\.php/', strtolower($entry)))) + $test->addTestFile($path.'/'.$entry); + else if($entry!=='.' && $entry!=='..' && $entry!=='.svn' && is_dir($path.'/'.$entry) && $recursive) + $this->addTests($test,$path.'/'.$entry,$recursive); + } + closedir($dir); + } + + function run($reporter) + { + $rootPath=$this->_root; + $rootUri=dirname($_SERVER['PHP_SELF']); + if(isset($_GET['target'])) + { + $target=$_GET['target']; + $recursive=true; + $fullpath=realpath("$rootPath/$target"); + if($fullpath===false || strpos($fullpath,$rootPath)!==0) + die('invalid test target'); + + if(is_dir($fullpath)) + { + + $test=new GroupTest(basename($rootPath)."/$target"); + $this->addTests($test,$fullpath,$recursive); + $test->run($reporter); + //$test->run(new HtmlReporterWithCoverage('index.php',$rootPath)); + } + else + { + $testClass=basename($fullpath,'.php'); + include_once($fullpath); + $test=new $testClass(basename($rootPath)."/$target"); + $test->run($reporter); + } + } + else + { + echo "<html> + <head> + <title>Prado Unit Tests</title> + <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"> + </head> + <body> + <h1>Prado Unit Tests</h1> + "; + $root=new TestFolder($rootPath,$rootPath,$rootUri); + echo $root->getHtml(); + echo "</body>\n</html>"; + } + } +} + +?>
\ No newline at end of file |