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)."[ url}\">{$this->name} ]
\n"; foreach($this->subFolders as $folder) $str.=$folder->getHtml($level+1); foreach($this->testFiles as $name=>$url) $str.=str_repeat(' ',($level+1)*4)."$name
\n"; return $str; } } class PradoUnitTester { private $_root; function __construct($root, $app_dir='.') { $this->_root = $root; Prado::setPathOfAlias('Tests', $root); if($app_dir===null) $app_dir='.'; $app = new TShellApplication($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$/i', $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=realpath($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 " Prado Unit Tests

Prado Unit Tests

"; $root=new TestFolder($rootPath,$rootPath,$rootUri); echo $root->getHtml(); echo "\n"; } } } ?>