#include <cppunit/Exception.h> #include <cppunit/SourceLine.h> #include <cppunit/TestFailure.h> #include <cppunit/TextOutputter.h> #include <cppunit/TestResultCollector.h> CPPUNIT_NS_BEGIN TextOutputter::TextOutputter( TestResultCollector *result, OStream &stream ) : m_result( result ) , m_stream( stream ) { } TextOutputter::~TextOutputter() { } void TextOutputter::write() { printHeader(); m_stream << "\n"; printFailures(); m_stream << "\n"; } void TextOutputter::printFailures() { TestResultCollector::TestFailures::const_iterator itFailure = m_result->failures().begin(); int failureNumber = 1; while ( itFailure != m_result->failures().end() ) { m_stream << "\n"; printFailure( *itFailure++, failureNumber++ ); } } void TextOutputter::printFailure( TestFailure *failure, int failureNumber ) { printFailureListMark( failureNumber ); m_stream << ' '; printFailureTestName( failure ); m_stream << ' '; printFailureType( failure ); m_stream << ' '; printFailureLocation( failure->sourceLine() ); m_stream << "\n"; printFailureDetail( failure->thrownException() ); m_stream << "\n"; } void TextOutputter::printFailureListMark( int failureNumber ) { m_stream << failureNumber << ")"; } void TextOutputter::printFailureTestName( TestFailure *failure ) { m_stream << "test: " << failure->failedTestName(); } void TextOutputter::printFailureType( TestFailure *failure ) { m_stream << "(" << (failure->isError() ? "E" : "F") << ")"; } void TextOutputter::printFailureLocation( SourceLine sourceLine ) { if ( !sourceLine.isValid() ) return; m_stream << "line: " << sourceLine.lineNumber() << ' ' << sourceLine.fileName(); } void TextOutputter::printFailureDetail( Exception *thrownException ) { m_stream << thrownException->message().shortDescription() << "\n"; m_stream << thrownException->message().details(); } void TextOutputter::printHeader() { if ( m_result->wasSuccessful() ) m_stream << "\nOK (" << m_result->runTests () << " tests)\n" ; else { m_stream << "\n"; printFailureWarning(); printStatistics(); } } void TextOutputter::printFailureWarning() { m_stream << "!!!FAILURES!!!\n"; } void TextOutputter::printStatistics() { m_stream << "Test Results:\n"; m_stream << "Run: " << m_result->runTests() << " Failures: " << m_result->testFailures() << " Errors: " << m_result->testErrors() << "\n"; } CPPUNIT_NS_END