kekrozsak/vendor/swiftmailer/swiftmailer/test-suite/lib/simpletest/extensions/junit_xml_reporter.php
2012-07-16 21:40:19 +02:00

119 lines
3.6 KiB
PHP

<?php
/**
* @package SimpleTest
* @subpackage Extensions
* @version $Id: junit_xml_reporter.php 1802 2008-09-08 10:43:58Z maetl_ $
* @author Patrice Neff - mailinglists@patrice.ch (original code)
*/
require_once dirname(__FILE__).'/../reporter.php';
/**
* Reporter which outputs test results in a format compatible
* with JUnit / Maven XML output. Can be used for integrating
* test suite with continuous integration servers such as
* Atlassian Bamboo.
*/
class JUnitXMLReporter extends SimpleReporter {
function JUnitXMLReporter() {
$this->SimpleReporter();
$this->doc = new DOMDocument();
$this->doc->loadXML('<testsuite/>');
$this->root = $this->doc->documentElement;
}
function paintHeader($test_name) {
$this->testsStart = microtime(true);
$this->root->setAttribute('name', $test_name);
$this->root->setAttribute('timestamp', date('c'));
$this->root->setAttribute('hostname', 'localhost');
echo "<?xml version=\"1.0\"?>\n";
echo "<!-- starting test suite $test_name\n";
}
/**
* Paints the end of the test with a summary of
* the passes and failures.
* @param string $test_name Name class of test.
* @access public
*/
function paintFooter($test_name) {
echo "-->\n";
$duration = microtime(true) - $this->testsStart;
$this->root->setAttribute('tests', $this->getPassCount() + $this->getFailCount() + $this->getExceptionCount());
$this->root->setAttribute('failures', $this->getFailCount());
$this->root->setAttribute('errors', $this->getExceptionCount());
$this->root->setAttribute('time', $duration);
$this->doc->formatOutput = true;
$xml = $this->doc->saveXML();
// Cut out XML declaration
echo preg_replace('/<\?[^>]*\?>/', "", $xml);
echo "\n";
}
function paintCaseStart($case) {
echo "- case start $case\n";
$this->currentCaseName = $case;
}
function paintCaseEnd($case) {
// No output here
}
function paintMethodStart($test) {
echo " - test start: $test\n";
$this->methodStart = microtime(true);
$this->currCase = $this->doc->createElement('testcase');
}
function paintMethodEnd($test) {
$duration = microtime(true) - $this->methodStart;
$this->currCase->setAttribute('name', $test);
$this->currCase->setAttribute('classname', $this->currentCaseName);
$this->currCase->setAttribute('time', $duration);
$this->root->appendChild($this->currCase);
}
function paintFail($message) {
parent::paintFail($message);
error_log("Failure: " . $message);
$this->terminateAbnormally($message);
}
function paintException($exception) {
parent::paintException($exception);
error_log("Exception: " . $exception);
$this->terminateAbnormally($exception);
}
function terminateAbnormally($message) {
if (!$this->currCase) {
error_log("!! currCase was not set.");
return;
}
$ch = $this->doc->createElement('failure');
$breadcrumb = $this->getTestList();
$ch->setAttribute('message', $breadcrumb[count($breadcrumb)-1]);
$ch->setAttribute('type', $breadcrumb[count($breadcrumb)-1]);
$message = implode(' -> ', $breadcrumb) . "\n\n\n" . $message;
$content = $this->doc->createTextNode($message);
$ch->appendChild($content);
$this->currCase->appendChild($ch);
}
}
?>