|
Packit Service |
e31359 |
#include <cppunit/Exception.h>
|
|
Packit Service |
e31359 |
#include <cppunit/Test.h>
|
|
Packit Service |
e31359 |
#include <cppunit/TestFailure.h>
|
|
Packit Service |
e31359 |
#include <cppunit/TestResultCollector.h>
|
|
Packit Service |
e31359 |
#include <cppunit/XmlOutputter.h>
|
|
Packit Service |
e31359 |
#include <cppunit/XmlOutputterHook.h>
|
|
Packit Service |
e31359 |
#include <cppunit/tools/XmlDocument.h>
|
|
Packit Service |
e31359 |
#include <cppunit/tools/XmlElement.h>
|
|
Packit Service |
e31359 |
#include <stdlib.h>
|
|
Packit Service |
e31359 |
#include <algorithm>
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
CPPUNIT_NS_BEGIN
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
XmlOutputter::XmlOutputter( TestResultCollector *result,
|
|
Packit Service |
e31359 |
OStream &stream,
|
|
Packit Service |
e31359 |
const std::string& encoding )
|
|
Packit Service |
e31359 |
: m_result( result )
|
|
Packit Service |
e31359 |
, m_stream( stream )
|
|
Packit Service |
e31359 |
, m_encoding( encoding )
|
|
Packit Service |
e31359 |
, m_styleSheet()
|
|
Packit Service |
e31359 |
, m_xml( new XmlDocument( encoding ) )
|
|
Packit Service |
e31359 |
, m_hooks()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
XmlOutputter::~XmlOutputter()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
delete m_xml;
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlOutputter::addHook( XmlOutputterHook *hook )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
m_hooks.push_back( hook );
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlOutputter::removeHook( XmlOutputterHook *hook )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
m_hooks.erase( std::find( m_hooks.begin(), m_hooks.end(), hook ) );
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlOutputter::write()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
setRootNode();
|
|
Packit Service |
e31359 |
m_stream << m_xml->toString();
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlOutputter::setStyleSheet( const std::string &styleSheet )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
m_xml->setStyleSheet( styleSheet );
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlOutputter::setStandalone( bool standalone )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
m_xml->setStandalone( standalone );
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlOutputter::setRootNode()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
XmlElement *rootNode = new XmlElement( "TestRun" );
|
|
Packit Service |
e31359 |
m_xml->setRootElement( rootNode );
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
for ( Hooks::iterator it = m_hooks.begin(); it != m_hooks.end(); ++it )
|
|
Packit Service |
e31359 |
(*it)->beginDocument( m_xml );
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
FailedTests failedTests;
|
|
Packit Service |
e31359 |
fillFailedTestsMap( failedTests );
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
addFailedTests( failedTests, rootNode );
|
|
Packit Service |
e31359 |
addSuccessfulTests( failedTests, rootNode );
|
|
Packit Service |
e31359 |
addStatistics( rootNode );
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
for ( Hooks::iterator itEnd = m_hooks.begin(); itEnd != m_hooks.end(); ++itEnd )
|
|
Packit Service |
e31359 |
(*itEnd)->endDocument( m_xml );
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlOutputter::fillFailedTestsMap( FailedTests &failedTests )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
const TestResultCollector::TestFailures &failures = m_result->failures();
|
|
Packit Service |
e31359 |
TestResultCollector::TestFailures::const_iterator itFailure = failures.begin();
|
|
Packit Service |
e31359 |
while ( itFailure != failures.end() )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
TestFailure *failure = *itFailure++;
|
|
Packit Service |
e31359 |
failedTests.insert( std::pair<Test* const, TestFailure*>(failure->failedTest(), failure ) );
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlOutputter::addFailedTests( FailedTests &failedTests,
|
|
Packit Service |
e31359 |
XmlElement *rootNode )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
XmlElement *testsNode = new XmlElement( "FailedTests" );
|
|
Packit Service |
e31359 |
rootNode->addElement( testsNode );
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
const TestResultCollector::Tests &tests = m_result->tests();
|
|
Packit Service |
e31359 |
for ( unsigned int testNumber = 0; testNumber < tests.size(); ++testNumber )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
Test *test = tests[testNumber];
|
|
Packit Service |
e31359 |
if ( failedTests.find( test ) != failedTests.end() )
|
|
Packit Service |
e31359 |
addFailedTest( test, failedTests[test], testNumber+1, testsNode );
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlOutputter::addSuccessfulTests( FailedTests &failedTests,
|
|
Packit Service |
e31359 |
XmlElement *rootNode )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
XmlElement *testsNode = new XmlElement( "SuccessfulTests" );
|
|
Packit Service |
e31359 |
rootNode->addElement( testsNode );
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
const TestResultCollector::Tests &tests = m_result->tests();
|
|
Packit Service |
e31359 |
for ( unsigned int testNumber = 0; testNumber < tests.size(); ++testNumber )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
Test *test = tests[testNumber];
|
|
Packit Service |
e31359 |
if ( failedTests.find( test ) == failedTests.end() )
|
|
Packit Service |
e31359 |
addSuccessfulTest( test, testNumber+1, testsNode );
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlOutputter::addStatistics( XmlElement *rootNode )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
XmlElement *statisticsElement = new XmlElement( "Statistics" );
|
|
Packit Service |
e31359 |
rootNode->addElement( statisticsElement );
|
|
Packit Service |
e31359 |
statisticsElement->addElement( new XmlElement( "Tests", m_result->runTests() ) );
|
|
Packit Service |
e31359 |
statisticsElement->addElement( new XmlElement( "FailuresTotal",
|
|
Packit Service |
e31359 |
m_result->testFailuresTotal() ) );
|
|
Packit Service |
e31359 |
statisticsElement->addElement( new XmlElement( "Errors", m_result->testErrors() ) );
|
|
Packit Service |
e31359 |
statisticsElement->addElement( new XmlElement( "Failures", m_result->testFailures() ) );
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
for ( Hooks::iterator it = m_hooks.begin(); it != m_hooks.end(); ++it )
|
|
Packit Service |
e31359 |
(*it)->statisticsAdded( m_xml, statisticsElement );
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlOutputter::addFailedTest( Test *test,
|
|
Packit Service |
e31359 |
TestFailure *failure,
|
|
Packit Service |
e31359 |
int testNumber,
|
|
Packit Service |
e31359 |
XmlElement *testsNode )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
Exception *thrownException = failure->thrownException();
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
XmlElement *testElement = new XmlElement( "FailedTest" );
|
|
Packit Service |
e31359 |
testsNode->addElement( testElement );
|
|
Packit Service |
e31359 |
testElement->addAttribute( "id", testNumber );
|
|
Packit Service |
e31359 |
testElement->addElement( new XmlElement( "Name", test->getName() ) );
|
|
Packit Service |
e31359 |
testElement->addElement( new XmlElement( "FailureType",
|
|
Packit Service |
e31359 |
failure->isError() ? "Error" :
|
|
Packit Service |
e31359 |
"Assertion" ) );
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
if ( failure->sourceLine().isValid() )
|
|
Packit Service |
e31359 |
addFailureLocation( failure, testElement );
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
testElement->addElement( new XmlElement( "Message", thrownException->what() ) );
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
for ( Hooks::iterator it = m_hooks.begin(); it != m_hooks.end(); ++it )
|
|
Packit Service |
e31359 |
(*it)->failTestAdded( m_xml, testElement, test, failure );
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlOutputter::addFailureLocation( TestFailure *failure,
|
|
Packit Service |
e31359 |
XmlElement *testElement )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
XmlElement *locationNode = new XmlElement( "Location" );
|
|
Packit Service |
e31359 |
testElement->addElement( locationNode );
|
|
Packit Service |
e31359 |
SourceLine sourceLine = failure->sourceLine();
|
|
Packit Service |
e31359 |
locationNode->addElement( new XmlElement( "File", sourceLine.fileName() ) );
|
|
Packit Service |
e31359 |
locationNode->addElement( new XmlElement( "Line", sourceLine.lineNumber() ) );
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlOutputter::addSuccessfulTest( Test *test,
|
|
Packit Service |
e31359 |
int testNumber,
|
|
Packit Service |
e31359 |
XmlElement *testsNode )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
XmlElement *testElement = new XmlElement( "Test" );
|
|
Packit Service |
e31359 |
testsNode->addElement( testElement );
|
|
Packit Service |
e31359 |
testElement->addAttribute( "id", testNumber );
|
|
Packit Service |
e31359 |
testElement->addElement( new XmlElement( "Name", test->getName() ) );
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
for ( Hooks::iterator it = m_hooks.begin(); it != m_hooks.end(); ++it )
|
|
Packit Service |
e31359 |
(*it)->successfulTestAdded( m_xml, testElement, test );
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
CPPUNIT_NS_END
|