com phpruntests: phpruntests - implemented rtTestOutputWriterXML - added cmpResults to compare test-results: src/cmpResults.php
src/taskScheduler/rtTask.php src/taskScheduler/rtTaskSchedulerFile.php src/taskScheduler/rtTaskTestGroup.php
src/testcase/output/rtTestOutputWriterCSV.php src/testcase/output/rtTestOutputWriterList.php src/testcase/output/rtTestOutputWriterXML.php
src/testcase/rtTestOutputWriter.php src/testgroup/rtPhpTestGroup.php src/t
| From: | David Soria Parra | Date: | Mon, 29 Jun 2009 01:34:55 +0000 |
| Subject: | com phpruntests: phpruntests - implemented rtTestOutputWriterXML - added cmpResults to compare test-results: src/cmpResults.php src/taskScheduler/rtTask.php src/taskScheduler/rtTaskSchedulerFile.php src/taskScheduler/rtTaskTestGroup.php src/testcase/output/rtTestOutputWriterCSV.php src/testcase/output/rtTestOutputWriterList.php src/testcase/output/rtTestOutputWriterXML.php src/testcase/rtTestOutputWriter.php src/testgroup/rtPhpTestGroup.php src/t |
||
| Groups: | php.qa | ||
| Request: | Send a blank email to php-qa+get-66390@lists.php.net to get a copy of this message | ||
Commit: 0bfa9acbff6e23d27ca753ee2ba554e93db17210
Author: Georg Gradwohl <g2@php.net> Mon, 29 Jun 2009 01:34:55 +0000
Parents: 6c6b59692caa2835daae8a8871a0ed86c6847bc0
Branches: master
Link: http://git.php.net/?p=phpruntests.git;a=commitdiff;h=0bfa9acbff6e23d27ca753ee2ba554e93db17210
Log:
phpruntests - implemented rtTestOutputWriterXML - added cmpResults to compare test-results
Changed paths:
A src/cmpResults.php
M src/taskScheduler/rtTask.php
M src/taskScheduler/rtTaskSchedulerFile.php
M src/taskScheduler/rtTaskTestGroup.php
M src/testcase/output/rtTestOutputWriterCSV.php
M src/testcase/output/rtTestOutputWriterList.php
M src/testcase/output/rtTestOutputWriterXML.php
M src/testcase/rtTestOutputWriter.php
M src/testgroup/rtPhpTestGroup.php
M src/testrun/rtPhpTestRun.php
diff --git a/src/cmpResults.php b/src/cmpResults.php new file mode 100644 index 0000000..2420597 --- /dev/null +++ b/src/cmpResults.php @@ -0,0 +1,91 @@ +<?php + +error_reporting(E_ALL); + + +function domToArray($dom) { + + $list = array(); + $tests = $dom->getElementsByTagName('testcase'); + + foreach ($tests as $test) { + + $n = $test->getElementsByTagName('name'); + $n = $n->item(0)->nodeValue; + + $s = $test->getElementsByTagName('status'); + $s = $s->item(0)->nodeValue; + + $list[$n] = $s; + } + + return $list; +} + + +function getResultList() { + + $list = array(); + + foreach (scandir('.') as $file) { + + if (strpos($file, '.xml') !== false && strpos($file, 'results_') !== false) { + + $xml = new DOMDocument(); + $xml->load($file); + $n = explode('_', basename($file, ".xml")); + $list[$n[1]] = domToArray($xml); + } + } + + return $list; +} + + +function compareWith($list, $index) { + + $cmp = false; + $base = $list[$index]; + + foreach ($list as $key => $result) { + + if ($key == $index) { + $cmp = true; + } + + elseif ($cmp === true) { + + print "\nDIFF $index - $key\n"; + + $dif = array_diff_assoc($result, $base); + + if (sizeof($dif) > 0) { + print_r($dif); + } else { + print 'NONE'; + } + + print "\n"; + } + } +} + + + +$results = getResultList(); + +if (sizeof($results) < 2) { + die("at least 2 results needed\n"); +} + +foreach ($results as $index => $list) { + + compareWith($results, $index); +} + + + + + + +?> \ No newline at end of file diff --git a/src/taskScheduler/rtTask.php b/src/taskScheduler/rtTask.php index 4af1902..de45a3f 100644 --- a/src/taskScheduler/rtTask.php +++ b/src/taskScheduler/rtTask.php @@ -11,6 +11,9 @@ abstract class rtTask private $message = NULL; + public function finish() {} + + public function setState($state) { $this->state = $state; diff --git a/src/taskScheduler/rtTaskSchedulerFile.php b/src/taskScheduler/rtTaskSchedulerFile.php index 84f280d..1a1a517 100644 --- a/src/taskScheduler/rtTaskSchedulerFile.php +++ b/src/taskScheduler/rtTaskSchedulerFile.php @@ -187,22 +187,22 @@ class rtTaskSchedulerFile extends rtTaskScheduler private function receiver() { for ($cid=0; $cid<$this->processCount; $cid++) { - + $response = file_get_contents(self::TMP_FILE.$cid); - $response = explode("\n", $response); + $response = explode("[END-TEST-OBJECT]", $response); array_pop($response); foreach ($response as $task) { $task = unserialize($task); - if ($task->getState() == rtTask::PASS) { - $this->countPass++; - } else { - $this->countFail++; + if ($task === false) { + print "ERROR unserialize $cid\n"; + continue; } - + $index = $task->getIndex(); + $task->finish($cid); if ($this->groupTasks == true) { @@ -213,7 +213,7 @@ class rtTaskSchedulerFile extends rtTaskScheduler $this->taskList[$index] = $task; } } - + unlink(self::TMP_FILE.$cid); } @@ -242,16 +242,10 @@ class rtTaskSchedulerFile extends rtTaskScheduler $task = $this->taskList[$index]; } - if ($task->run() === true) { - $task->setState(rtTask::PASS); - - } else { - $task->setState(rtTask::FAIL); - } - + $task->run(); $task->setIndex($index); - $response .= serialize($task)."\n"; + $response .= serialize($task)."[END-TEST-OBJECT]"; } file_put_contents(self::TMP_FILE.$cid, $response); diff --git a/src/taskScheduler/rtTaskTestGroup.php b/src/taskScheduler/rtTaskTestGroup.php index d073880..c0a9d04 100644 --- a/src/taskScheduler/rtTaskTestGroup.php +++ b/src/taskScheduler/rtTaskTestGroup.php @@ -15,7 +15,7 @@ class rtTaskTestGroup extends rtTask implements rtTaskInterface { private $runConfiguration; private $subDirectory; - + private $testGroup; public function __construct($runConfiguration, $subDirectory) { @@ -25,22 +25,25 @@ class rtTaskTestGroup extends rtTask implements rtTaskInterface public function run() { - $testGroup = new rtPhpTestGroup($this->runConfiguration, $this->subDirectory); - $testGroup->runGroup($this->runConfiguration); + $this->testGroup = new rtPhpTestGroup($this->runConfiguration, $this->subDirectory); + $this->testGroup->runGroup($this->runConfiguration); + + return true; + } + + public function finish($cid=null) { + + if (!is_null($cid)) { + print "\n$cid - ".$this->subDirectory."\n"; + } $outType = 'list'; if ($this->runConfiguration->hasCommandLineOption('o')) { - $outType = $this->runConfiguration->getCommandLineOption('o'); + $outType = $this->runConfiguration->getCommandLineOption('o'); } - $testGroup->writeGroup($outType); - return true; - } - public function getDir() - { - return $this->subDirectory; + $this->testGroup->writeGroup($outType, $cid); } - } diff --git a/src/testcase/output/rtTestOutputWriterCSV.php b/src/testcase/output/rtTestOutputWriterCSV.php index 781391e..1269651 100644 --- a/src/testcase/output/rtTestOutputWriterCSV.php +++ b/src/testcase/output/rtTestOutputWriterCSV.php @@ -44,11 +44,16 @@ class rtTestOutputWriterCSV extends rtTestOutputWriter } - public function write($testDirectory = null) + public function write($testDirectory = null, $cid = null) { sort($this->testOutput); foreach ($this->testOutput as $line) { - echo $line ."\n"; + + if (!is_null($cid)) { + echo "$cid - "; + } + + echo $line ."\n"; } } } diff --git a/src/testcase/output/rtTestOutputWriterList.php b/src/testcase/output/rtTestOutputWriterList.php index 4a89859..53b20b6 100644 --- a/src/testcase/output/rtTestOutputWriterList.php +++ b/src/testcase/output/rtTestOutputWriterList.php @@ -46,13 +46,18 @@ class rtTestOutputWriterList extends rtTestOutputWriter } - public function write($testDirectory = null) + public function write($testDirectory = null, $cid = null) { if ($testDirectory != null) { echo "\n\nTest output for tests in " . $testDirectory . "\n"; } sort($this->testOutput); foreach ($this->testOutput as $line) { + + if (!is_null($cid)) { + echo "$cid - "; + } + echo $line ."\n"; } } diff --git a/src/testcase/output/rtTestOutputWriterXML.php b/src/testcase/output/rtTestOutputWriterXML.php index 65b3996..e94d23b 100644 --- a/src/testcase/output/rtTestOutputWriterXML.php +++ b/src/testcase/output/rtTestOutputWriterXML.php @@ -1,6 +1,6 @@ <?php /** - * rtTestOutputWriterXML + * rtTestOutputWriterXML <singleton> * * Write test output as XML * @@ -8,6 +8,7 @@ * @package RUNTESTS * @author Zoe Slattery <zoe@php.net> * @author Stefan Priebsch <spriebsch@php.net> + * @author Georg Gradwohl <g2@php.net> * @copyright 2009 The PHP Group * @license http://www.php.net/license/3_01.txt PHP License 3.01 * @link http://qa.php.net/ @@ -15,12 +16,92 @@ */ class rtTestOutputWriterXML extends rtTestOutputWriter { - public function assemble(rtPhpTest $testCase) + private $dom = null; + private $rootNode = null; + private $stamp = 0; + + private static $instance = null; + + + private function __construct() { + + $this->dom = new DOMDocument(); + $this->rootNode = $this->dom->createElement('RUNTESTS'); + $this->dom->appendChild($this->rootNode); + + $this->stamp = round(microtime(true)); + } + + private function __clone() {} + + + public static function getInstance() { + if (is_null(self::$instance)) { + self::$instance = new self; + } + + return self::$instance; } - - public function write() + + + public function setTestResults(array $testResults) { + $this->init($testResults); + } + + + /** + * + * + * @param array of rtTestResults + * + */ + public function init (array $testResults) + { + $dom = $this->dom; + + foreach ($testResults as $testResult) { + + $test = $dom->createElement('testcase'); + $test->appendChild($dom->createElement('name', $testResult->getName())); + + $status = 'UNDEFINED'; + $testStatus = $testResult->getStatus(); + + foreach($testStatus->getTestStateNames() as $name) { + + if ($testStatus->getValue($name)) { + $status = strtoupper($name); + } + } + + $test->appendChild($dom->createElement('status', $status)); + $this->rootNode->appendChild($test); + } + } + + + public function write($testDirectory = null, $cid = null) + { + if (!is_null($this->dom)) { + + $xml = $this->dom->saveXML(); + file_put_contents('results_'.$this->stamp.'.xml', $xml); + } + } + + + /** + * @Overrides src/testcase/rtTestOutputWriter#getOutput() + */ + public function getOutput() + { + if (!is_null($this->dom)) { + return $this->dom->saveXML(); + } + + return null; } } ?> diff --git a/src/testcase/rtTestOutputWriter.php b/src/testcase/rtTestOutputWriter.php index d23b737..8d3e40a 100644 --- a/src/testcase/rtTestOutputWriter.php +++ b/src/testcase/rtTestOutputWriter.php @@ -21,12 +21,14 @@ abstract class rtTestOutputWriter public static function getInstance (array $testResults, $outputType) { - if ($outputType == 'list') { + if ($outputType == 'list') { return new rtTestOutputWriterList($testResults); } if ($outputType == 'xml') { - return new rtTestOutputWriterXML($testResults); + $writer = rtTestOutputWriterXML::getInstance(); + $writer->setTestResults($testResults); + return $writer; } if ($outputType == 'csv') { return new rtTestOutputWriterCSV($testResults); diff --git a/src/testgroup/rtPhpTestGroup.php b/src/testgroup/rtPhpTestGroup.php index 982d61c..54b2c26 100644 --- a/src/testgroup/rtPhpTestGroup.php +++ b/src/testgroup/rtPhpTestGroup.php @@ -70,10 +70,10 @@ class rtPhpTestGroup } } - public function writeGroup($outType) + public function writeGroup($outType, $cid=null) { $testOutputWriter = rtTestOutputWriter::getInstance($this->results, $outType); - $testOutputWriter->write($this->testDirectory); + $testOutputWriter->write($this->testDirectory, $cid); } } ?> diff --git a/src/testrun/rtPhpTestRun.php b/src/testrun/rtPhpTestRun.php index 6af5a38..c12cd1f 100644 --- a/src/testrun/rtPhpTestRun.php +++ b/src/testrun/rtPhpTestRun.php @@ -62,7 +62,7 @@ class rtPhpTestRun // create the task-list $taskList = array(); foreach ($subDirectories as $subDirectory) { - $taskList[] = new rtTaskTestGroup(&$runConfiguration, &$subDirectory); + $taskList[] = new rtTaskTestGroup($runConfiguration, $subDirectory); }
diff --git a/src/cmpResults.php b/src/cmpResults.php new file mode 100644 index 0000000..2420597 --- /dev/null +++ b/src/cmpResults.php @@ -0,0 +1,91 @@ +<?php + +error_reporting(E_ALL); + + +function domToArray($dom) { + + $list = array(); + $tests = $dom->getElementsByTagName('testcase'); + + foreach ($tests as $test) { + + $n = $test->getElementsByTagName('name'); + $n = $n->item(0)->nodeValue; + + $s = $test->getElementsByTagName('status'); + $s = $s->item(0)->nodeValue; + + $list[$n] = $s; + } + + return $list; +} + + +function getResultList() { + + $list = array(); + + foreach (scandir('.') as $file) { + + if (strpos($file, '.xml') !== false && strpos($file, 'results_') !== false) { + + $xml = new DOMDocument(); + $xml->load($file); + $n = explode('_', basename($file, ".xml")); + $list[$n[1]] = domToArray($xml); + } + } + + return $list; +} + + +function compareWith($list, $index) { + + $cmp = false; + $base = $list[$index]; + + foreach ($list as $key => $result) { + + if ($key == $index) { + $cmp = true; + } + + elseif ($cmp === true) { + + print "\nDIFF $index - $key\n"; + + $dif = array_diff_assoc($result, $base); + + if (sizeof($dif) > 0) { + print_r($dif); + } else { + print 'NONE'; + } + + print "\n"; + } + } +} + + + +$results = getResultList(); + +if (sizeof($results) < 2) { + die("at least 2 results needed\n"); +} + +foreach ($results as $index => $list) { + + compareWith($results, $index); +} + + + + + + +?> \ No newline at end of file diff --git a/src/taskScheduler/rtTask.php b/src/taskScheduler/rtTask.php index 4af1902..de45a3f 100644 --- a/src/taskScheduler/rtTask.php +++ b/src/taskScheduler/rtTask.php @@ -11,6 +11,9 @@ abstract class rtTask private $message = NULL; + public function finish() {} + + public function setState($state) { $this->state = $state; diff --git a/src/taskScheduler/rtTaskSchedulerFile.php b/src/taskScheduler/rtTaskSchedulerFile.php index 84f280d..1a1a517 100644 --- a/src/taskScheduler/rtTaskSchedulerFile.php +++ b/src/taskScheduler/rtTaskSchedulerFile.php @@ -187,22 +187,22 @@ class rtTaskSchedulerFile extends rtTaskScheduler private function receiver() { for ($cid=0; $cid<$this->processCount; $cid++) { - + $response = file_get_contents(self::TMP_FILE.$cid); - $response = explode("\n", $response); + $response = explode("[END-TEST-OBJECT]", $response); array_pop($response); foreach ($response as $task) { $task = unserialize($task); - if ($task->getState() == rtTask::PASS) { - $this->countPass++; - } else { - $this->countFail++; + if ($task === false) { + print "ERROR unserialize $cid\n"; + continue; } - + $index = $task->getIndex(); + $task->finish($cid); if ($this->groupTasks == true) { @@ -213,7 +213,7 @@ class rtTaskSchedulerFile extends rtTaskScheduler $this->taskList[$index] = $task; } } - + unlink(self::TMP_FILE.$cid); } @@ -242,16 +242,10 @@ class rtTaskSchedulerFile extends rtTaskScheduler $task = $this->taskList[$index]; } - if ($task->run() === true) { - $task->setState(rtTask::PASS); - - } else { - $task->setState(rtTask::FAIL); - } - + $task->run(); $task->setIndex($index); - $response .= serialize($task)."\n"; + $response .= serialize($task)."[END-TEST-OBJECT]"; } file_put_contents(self::TMP_FILE.$cid, $response); diff --git a/src/taskScheduler/rtTaskTestGroup.php b/src/taskScheduler/rtTaskTestGroup.php index d073880..c0a9d04 100644 --- a/src/taskScheduler/rtTaskTestGroup.php +++ b/src/taskScheduler/rtTaskTestGroup.php @@ -15,7 +15,7 @@ class rtTaskTestGroup extends rtTask implements rtTaskInterface { private $runConfiguration; private $subDirectory; - + private $testGroup; public function __construct($runConfiguration, $subDirectory) { @@ -25,22 +25,25 @@ class rtTaskTestGroup extends rtTask implements rtTaskInterface public function run() { - $testGroup = new rtPhpTestGroup($this->runConfiguration, $this->subDirectory); - $testGroup->runGroup($this->runConfiguration); + $this->testGroup = new rtPhpTestGroup($this->runConfiguration, $this->subDirectory); + $this->testGroup->runGroup($this->runConfiguration); + + return true; + } + + public function finish($cid=null) { + + if (!is_null($cid)) { + print "\n$cid - ".$this->subDirectory."\n"; + } $outType = 'list'; if ($this->runConfiguration->hasCommandLineOption('o')) { - $outType = $this->runConfiguration->getCommandLineOption('o'); + $outType = $this->runConfiguration->getCommandLineOption('o'); } - $testGroup->writeGroup($outType); - return true; - } - public function getDir() - { - return $this->subDirectory; + $this->testGroup->writeGroup($outType, $cid); } - } diff --git a/src/testcase/output/rtTestOutputWriterCSV.php b/src/testcase/output/rtTestOutputWriterCSV.php index 781391e..1269651 100644 --- a/src/testcase/output/rtTestOutputWriterCSV.php +++ b/src/testcase/output/rtTestOutputWriterCSV.php @@ -44,11 +44,16 @@ class rtTestOutputWriterCSV extends rtTestOutputWriter } - public function write($testDirectory = null) + public function write($testDirectory = null, $cid = null) { sort($this->testOutput); foreach ($this->testOutput as $line) { - echo $line ."\n"; + + if (!is_null($cid)) { + echo "$cid - "; + } + + echo $line ."\n"; } } } diff --git a/src/testcase/output/rtTestOutputWriterList.php b/src/testcase/output/rtTestOutputWriterList.php index 4a89859..53b20b6 100644 --- a/src/testcase/output/rtTestOutputWriterList.php +++ b/src/testcase/output/rtTestOutputWriterList.php @@ -46,13 +46,18 @@ class rtTestOutputWriterList extends rtTestOutputWriter } - public function write($testDirectory = null) + public function write($testDirectory = null, $cid = null) { if ($testDirectory != null) { echo "\n\nTest output for tests in " . $testDirectory . "\n"; } sort($this->testOutput); foreach ($this->testOutput as $line) { + + if (!is_null($cid)) { + echo "$cid - "; + } + echo $line ."\n"; } } diff --git a/src/testcase/output/rtTestOutputWriterXML.php b/src/testcase/output/rtTestOutputWriterXML.php index 65b3996..e94d23b 100644 --- a/src/testcase/output/rtTestOutputWriterXML.php +++ b/src/testcase/output/rtTestOutputWriterXML.php @@ -1,6 +1,6 @@ <?php /** - * rtTestOutputWriterXML + * rtTestOutputWriterXML <singleton> * * Write test output as XML * @@ -8,6 +8,7 @@ * @package RUNTESTS * @author Zoe Slattery <zoe@php.net> * @author Stefan Priebsch <spriebsch@php.net> + * @author Georg Gradwohl <g2@php.net> * @copyright 2009 The PHP Group * @license http://www.php.net/license/3_01.txt PHP License 3.01 * @link http://qa.php.net/ @@ -15,12 +16,92 @@ */ class rtTestOutputWriterXML extends rtTestOutputWriter { - public function assemble(rtPhpTest $testCase) + private $dom = null; + private $rootNode = null; + private $stamp = 0; + + private static $instance = null; + + + private function __construct() { + + $this->dom = new DOMDocument(); + $this->rootNode = $this->dom->createElement('RUNTESTS'); + $this->dom->appendChild($this->rootNode); + + $this->stamp = round(microtime(true)); + } + + private function __clone() {} + + + public static function getInstance() { + if (is_null(self::$instance)) { + self::$instance = new self; + } + + return self::$instance; } - - public function write() + + + public function setTestResults(array $testResults) { + $this->init($testResults); + } + + + /** + * + * + * @param array of rtTestResults + * + */ + public function init (array $testResults) + { + $dom = $this->dom; + + foreach ($testResults as $testResult) { + + $test = $dom->createElement('testcase'); + $test->appendChild($dom->createElement('name', $testResult->getName())); + + $status = 'UNDEFINED'; + $testStatus = $testResult->getStatus(); + + foreach($testStatus->getTestStateNames() as $name) { + + if ($testStatus->getValue($name)) { + $status = strtoupper($name); + } + } + + $test->appendChild($dom->createElement('status', $status)); + $this->rootNode->appendChild($test); + } + } + + + public function write($testDirectory = null, $cid = null) + { + if (!is_null($this->dom)) { + + $xml = $this->dom->saveXML(); + file_put_contents('results_'.$this->stamp.'.xml', $xml); + } + } + + + /** + * @Overrides src/testcase/rtTestOutputWriter#getOutput() + */ + public function getOutput() + { + if (!is_null($this->dom)) { + return $this->dom->saveXML(); + } + + return null; } } ?> diff --git a/src/testcase/rtTestOutputWriter.php b/src/testcase/rtTestOutputWriter.php index d23b737..8d3e40a 100644 --- a/src/testcase/rtTestOutputWriter.php +++ b/src/testcase/rtTestOutputWriter.php @@ -21,12 +21,14 @@ abstract class rtTestOutputWriter public static function getInstance (array $testResults, $outputType) { - if ($outputType == 'list') { + if ($outputType == 'list') { return new rtTestOutputWriterList($testResults); } if ($outputType == 'xml') { - return new rtTestOutputWriterXML($testResults); + $writer = rtTestOutputWriterXML::getInstance(); + $writer->setTestResults($testResults); + return $writer; } if ($outputType == 'csv') { return new rtTestOutputWriterCSV($testResults); diff --git a/src/testgroup/rtPhpTestGroup.php b/src/testgroup/rtPhpTestGroup.php index 982d61c..54b2c26 100644 --- a/src/testgroup/rtPhpTestGroup.php +++ b/src/testgroup/rtPhpTestGroup.php @@ -70,10 +70,10 @@ class rtPhpTestGroup } } - public function writeGroup($outType) + public function writeGroup($outType, $cid=null) { $testOutputWriter = rtTestOutputWriter::getInstance($this->results, $outType); - $testOutputWriter->write($this->testDirectory); + $testOutputWriter->write($this->testDirectory, $cid); } } ?> diff --git a/src/testrun/rtPhpTestRun.php b/src/testrun/rtPhpTestRun.php index 6af5a38..c12cd1f 100644 --- a/src/testrun/rtPhpTestRun.php +++ b/src/testrun/rtPhpTestRun.php @@ -62,7 +62,7 @@ class rtPhpTestRun // create the task-list $taskList = array(); foreach ($subDirectories as $subDirectory) { - $taskList[] = new rtTaskTestGroup(&$runConfiguration, &$subDirectory); + $taskList[] = new rtTaskTestGroup($runConfiguration, $subDirectory); }