1
#include <cppunit/config/SourcePrefix.h>
2
#include <cppunit/Exception.h>
3
#include <cppunit/SourceLine.h>
4
#include <cppunit/TestFailure.h>
5
#include <cppunit/TestResultCollector.h>
6
#include <cppunit/CompilerOutputter.h>
8
#include <cppunit/tools/StringTools.h>
14
CompilerOutputter::CompilerOutputter( TestResultCollector *result,
16
const std::string &locationFormat )
19
, m_locationFormat( locationFormat )
20
, m_wrapColumn( CPPUNIT_WRAP_COLUMN )
25
CompilerOutputter::~CompilerOutputter()
31
CompilerOutputter::setLocationFormat( const std::string &locationFormat )
33
m_locationFormat = locationFormat;
38
CompilerOutputter::defaultOutputter( TestResultCollector *result,
41
return new CompilerOutputter( result, stream );
46
CompilerOutputter::write()
48
if ( m_result->wasSuccessful() )
56
CompilerOutputter::printSuccess()
58
m_stream << "OK (" << m_result->runTests() << ")\n";
63
CompilerOutputter::printFailureReport()
71
CompilerOutputter::printFailuresList()
73
for ( int index =0; index < m_result->testFailuresTotal(); ++index)
75
printFailureDetail( m_result->failures()[ index ] );
81
CompilerOutputter::printFailureDetail( TestFailure *failure )
83
printFailureLocation( failure->sourceLine() );
84
printFailureType( failure );
85
printFailedTestName( failure );
86
printFailureMessage( failure );
91
CompilerOutputter::printFailureLocation( SourceLine sourceLine )
93
if ( !sourceLine.isValid() )
95
m_stream << "##Failure Location unknown## : ";
100
for ( unsigned int index = 0; index < m_locationFormat.length(); ++index )
102
char c = m_locationFormat[ index ];
103
if ( c == '%' && ( index+1 < m_locationFormat.length() ) )
105
char command = m_locationFormat[index+1];
106
if ( processLocationFormatCommand( command, sourceLine ) )
119
CompilerOutputter::processLocationFormatCommand( char command,
120
const SourceLine &sourceLine )
125
m_stream << sourceLine.fileName();
128
m_stream << sourceLine.lineNumber();
131
m_stream << extractBaseName( sourceLine.fileName() );
140
CompilerOutputter::extractBaseName( const std::string &fileName ) const
142
int indexLastDirectorySeparator = fileName.find_last_of( '/' );
144
if ( indexLastDirectorySeparator < 0 )
145
indexLastDirectorySeparator = fileName.find_last_of( '\\' );
147
if ( indexLastDirectorySeparator < 0 )
150
return fileName.substr( indexLastDirectorySeparator +1 );
155
CompilerOutputter::printFailureType( TestFailure *failure )
157
m_stream << (failure->isError() ? "Error" : "Assertion");
162
CompilerOutputter::printFailedTestName( TestFailure *failure )
164
m_stream << "\nTest name: " << failure->failedTestName();
169
CompilerOutputter::printFailureMessage( TestFailure *failure )
172
Exception *thrownException = failure->thrownException();
173
m_stream << thrownException->message().shortDescription() << "\n";
175
std::string message = thrownException->message().details();
176
if ( m_wrapColumn > 0 )
177
message = StringTools::wrap( message, m_wrapColumn );
179
m_stream << message << "\n";
184
CompilerOutputter::printStatistics()
186
m_stream << "Failures !!!\n";
187
m_stream << "Run: " << m_result->runTests() << " "
188
<< "Failure total: " << m_result->testFailuresTotal() << " "
189
<< "Failures: " << m_result->testFailures() << " "
190
<< "Errors: " << m_result->testErrors()
196
CompilerOutputter::setWrapColumn( int wrapColumn )
198
m_wrapColumn = wrapColumn;
203
CompilerOutputter::setNoWrap()
210
CompilerOutputter::wrapColumn() const