Blame src/cppunit/CompilerOutputter.cpp

Packit 8c9aa0
#include <cppunit/config/SourcePrefix.h>
Packit 8c9aa0
#include <cppunit/Exception.h>
Packit 8c9aa0
#include <cppunit/SourceLine.h>
Packit 8c9aa0
#include <cppunit/TestFailure.h>
Packit 8c9aa0
#include <cppunit/TestResultCollector.h>
Packit 8c9aa0
#include <cppunit/CompilerOutputter.h>
Packit 8c9aa0
#include <algorithm>
Packit 8c9aa0
#include <cppunit/tools/StringTools.h>
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
CPPUNIT_NS_BEGIN
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
CompilerOutputter::CompilerOutputter( TestResultCollector *result,
Packit 8c9aa0
                                      OStream &stream,
Packit 8c9aa0
                                      const std::string &locationFormat )
Packit 8c9aa0
    : m_result( result )
Packit 8c9aa0
    , m_stream( stream )
Packit 8c9aa0
    , m_locationFormat( locationFormat )
Packit 8c9aa0
    , m_wrapColumn( CPPUNIT_WRAP_COLUMN )
Packit 8c9aa0
{
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
CompilerOutputter::~CompilerOutputter()
Packit 8c9aa0
{
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
CompilerOutputter::setLocationFormat( const std::string &locationFormat )
Packit 8c9aa0
{
Packit 8c9aa0
  m_locationFormat = locationFormat;
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
CompilerOutputter *
Packit 8c9aa0
CompilerOutputter::defaultOutputter( TestResultCollector *result,
Packit 8c9aa0
                                     OStream &stream )
Packit 8c9aa0
{
Packit 8c9aa0
  return new CompilerOutputter( result, stream );
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
CompilerOutputter::write()
Packit 8c9aa0
{
Packit 8c9aa0
  if ( m_result->wasSuccessful() )
Packit 8c9aa0
    printSuccess();
Packit 8c9aa0
  else
Packit 8c9aa0
    printFailureReport();
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
CompilerOutputter::printSuccess()
Packit 8c9aa0
{
Packit 8c9aa0
  m_stream  << "OK (" << m_result->runTests()  << ")\n";
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
CompilerOutputter::printFailureReport()
Packit 8c9aa0
{
Packit 8c9aa0
  printFailuresList();
Packit 8c9aa0
  printStatistics();
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
CompilerOutputter::printFailuresList()
Packit 8c9aa0
{
Packit 8c9aa0
  for ( int index =0; index < m_result->testFailuresTotal(); ++index)
Packit 8c9aa0
  {
Packit 8c9aa0
    printFailureDetail( m_result->failures()[ index ] );
Packit 8c9aa0
  }
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
CompilerOutputter::printFailureDetail( TestFailure *failure )
Packit 8c9aa0
{
Packit 8c9aa0
  printFailureLocation( failure->sourceLine() );
Packit 8c9aa0
  printFailureType( failure );
Packit 8c9aa0
  printFailedTestName( failure );
Packit 8c9aa0
  printFailureMessage( failure );
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
 
Packit 8c9aa0
void 
Packit 8c9aa0
CompilerOutputter::printFailureLocation( SourceLine sourceLine )
Packit 8c9aa0
{
Packit 8c9aa0
  if ( !sourceLine.isValid() )
Packit 8c9aa0
  {
Packit 8c9aa0
    m_stream  <<  "##Failure Location unknown## : ";
Packit 8c9aa0
    return;
Packit 8c9aa0
  }
Packit 8c9aa0
Packit 8c9aa0
  std::string location;
Packit 8c9aa0
  for ( unsigned int index = 0; index < m_locationFormat.length(); ++index )
Packit 8c9aa0
  {
Packit 8c9aa0
    char c = m_locationFormat[ index ];
Packit 8c9aa0
    if ( c == '%'  &&  ( index+1 < m_locationFormat.length() ) )
Packit 8c9aa0
    {
Packit 8c9aa0
      char command = m_locationFormat[index+1];
Packit 8c9aa0
      if ( processLocationFormatCommand( command, sourceLine ) )
Packit 8c9aa0
      {
Packit 8c9aa0
        ++index;
Packit 8c9aa0
        continue;
Packit 8c9aa0
      }
Packit 8c9aa0
    }
Packit 8c9aa0
Packit 8c9aa0
    m_stream  << c;
Packit 8c9aa0
  }
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
bool 
Packit 8c9aa0
CompilerOutputter::processLocationFormatCommand( char command, 
Packit 8c9aa0
                                                 const SourceLine &sourceLine )
Packit 8c9aa0
{
Packit 8c9aa0
  switch ( command )
Packit 8c9aa0
  {
Packit 8c9aa0
  case 'p':
Packit 8c9aa0
    m_stream  <<  sourceLine.fileName();
Packit 8c9aa0
    return true;
Packit 8c9aa0
  case 'l':
Packit 8c9aa0
    m_stream  <<  sourceLine.lineNumber();
Packit 8c9aa0
    return true;
Packit 8c9aa0
  case 'f':
Packit 8c9aa0
    m_stream  <<  extractBaseName( sourceLine.fileName() );
Packit 8c9aa0
    return true;
Packit 8c9aa0
  }
Packit 8c9aa0
  
Packit 8c9aa0
  return false;
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
std::string 
Packit 8c9aa0
CompilerOutputter::extractBaseName( const std::string &fileName ) const
Packit 8c9aa0
{
Packit 8c9aa0
  int indexLastDirectorySeparator = fileName.find_last_of( '/' );
Packit 8c9aa0
  
Packit 8c9aa0
  if ( indexLastDirectorySeparator < 0 )
Packit 8c9aa0
    indexLastDirectorySeparator = fileName.find_last_of( '\\' );
Packit 8c9aa0
  
Packit 8c9aa0
  if ( indexLastDirectorySeparator < 0 )
Packit 8c9aa0
    return fileName;
Packit 8c9aa0
Packit 8c9aa0
  return fileName.substr( indexLastDirectorySeparator +1 );
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
CompilerOutputter::printFailureType( TestFailure *failure )
Packit 8c9aa0
{
Packit 8c9aa0
  m_stream  <<  (failure->isError() ? "Error" : "Assertion");
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
CompilerOutputter::printFailedTestName( TestFailure *failure )
Packit 8c9aa0
{
Packit 8c9aa0
  m_stream  <<  "\nTest name: "  <<  failure->failedTestName();
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
CompilerOutputter::printFailureMessage( TestFailure *failure )
Packit 8c9aa0
{
Packit 8c9aa0
  m_stream  <<  "\n";
Packit 8c9aa0
  Exception *thrownException = failure->thrownException();
Packit 8c9aa0
  m_stream  << thrownException->message().shortDescription()  <<  "\n";
Packit 8c9aa0
Packit 8c9aa0
  std::string message = thrownException->message().details();
Packit 8c9aa0
  if ( m_wrapColumn > 0 )
Packit 8c9aa0
    message = StringTools::wrap( message, m_wrapColumn );
Packit 8c9aa0
Packit 8c9aa0
  m_stream  <<  message  <<  "\n";
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
CompilerOutputter::printStatistics()
Packit 8c9aa0
{
Packit 8c9aa0
  m_stream  <<  "Failures !!!\n";
Packit 8c9aa0
  m_stream  <<  "Run: "  <<  m_result->runTests()  << "   "
Packit 8c9aa0
            <<  "Failure total: "  <<  m_result->testFailuresTotal()  << "   "
Packit 8c9aa0
            <<  "Failures: "  <<  m_result->testFailures()  << "   "
Packit 8c9aa0
            <<  "Errors: "  <<  m_result->testErrors()
Packit 8c9aa0
            <<  "\n";
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
CompilerOutputter::setWrapColumn( int wrapColumn )
Packit 8c9aa0
{
Packit 8c9aa0
  m_wrapColumn = wrapColumn;
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
CompilerOutputter::setNoWrap()
Packit 8c9aa0
{
Packit 8c9aa0
  m_wrapColumn = 0;
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
int 
Packit 8c9aa0
CompilerOutputter::wrapColumn() const
Packit 8c9aa0
{
Packit 8c9aa0
  return m_wrapColumn;
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
CPPUNIT_NS_END