1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
<?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');
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$/i', $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;
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 "<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>";
}
}
}
?>
|