summaryrefslogtreecommitdiff
path: root/tests/test_tools/unit_tests.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_tools/unit_tests.php')
-rw-r--r--tests/test_tools/unit_tests.php139
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('&nbsp;',$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('&nbsp;',($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