restructuring test suite invocation - now we load all test cases into one suite and execute this single suite. this is necessary to be able to generate one xml report and is also a precondition for code coverage analysis(which will follow soon)

This commit is contained in:
Thomas Mueller 2012-07-13 13:41:13 +02:00
parent 967c6d7d3c
commit 5de2a292fc

View file

@ -26,39 +26,59 @@ require_once 'simpletest/mock_objects.php';
require_once 'simpletest/collector.php';
require_once 'simpletest/default_reporter.php';
// test suite instance
$testSuite=new TestSuite("ownCloud Unit Test Suite");
// prepare the reporter
if(OC::$CLI){
$reporter=new TextReporter;
$test=isset($_SERVER['argv'][1])?$_SERVER['argv'][1]:false;
if($test=='xml')
{
$reporter= new XmlReporter;
$test=false;
}
}else{
$reporter='HtmlReporter';
$test=isset($_GET['test'])?$_GET['test']:false;
}
//load core test cases
loadTests(dirname(__FILE__));
loadTests(dirname(__FILE__), $testSuite, $test);
//load app test cases
//
// TODO: define a list of apps to be enabled + enable them
//
$apps=OC_App::getEnabledApps();
foreach($apps as $app){
if(is_dir(OC::$SERVERROOT.'/apps/'.$app.'/tests')){
loadTests(OC::$SERVERROOT.'/apps/'.$app.'/tests');
loadTests(OC::$SERVERROOT.'/apps/'.$app.'/tests', $testSuite, $test);
}
}
function loadTests($dir=''){
if(OC::$CLI){
$reporter='TextReporter';
$test=isset($_SERVER['argv'][1])?$_SERVER['argv'][1]:false;
}else{
$reporter='HtmlReporter';
$test=isset($_GET['test'])?$_GET['test']:false;
}
// run the suite
if($testSuite->getSize()>0){
$testSuite->run($reporter);
}
// helper below
function loadTests($dir,$testSuite, $test){
if($dh=opendir($dir)){
while($name=readdir($dh)){
if($name[0]!='.'){//no hidden files, '.' or '..'
$file=$dir.'/'.$name;
if(is_dir($file)){
loadTests($file);
loadTests($file, $testSuite, $test);
}elseif(substr($file,-4)=='.php' and $file!=__FILE__){
$name=getTestName($file);
if($test===false or $test==$name or substr($name,0,strlen($test))==$test){
$testCase=new TestSuite($name);
$testCase->addFile($file);
if($testCase->getSize()>0){
$testCase->run(new $reporter());
}
$extractor = new SimpleFileLoader();
$loadedSuite=$extractor->load($file);
if ($loadedSuite->getSize() > 0)
$testSuite->add($loadedSuite);
}
}
}