Home | History | Annotate | Download | only in reporters
      1 /*
      2  *  Created by Justin R. Wilson on 2/19/2017.
      3  *  Copyright 2017 Justin R. Wilson. All rights reserved.
      4  *
      5  *  Distributed under the Boost Software License, Version 1.0. (See accompanying
      6  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
      7  */
      8 #ifndef TWOBLUECUBES_CATCH_REPORTER_AUTOMAKE_HPP_INCLUDED
      9 #define TWOBLUECUBES_CATCH_REPORTER_AUTOMAKE_HPP_INCLUDED
     10 
     11 // Don't #include any Catch headers here - we can assume they are already
     12 // included before this header.
     13 // This is not good practice in general but is necessary in this case so this
     14 // file can be distributed as a single header that works with the main
     15 // Catch single header.
     16 
     17 namespace Catch {
     18 
     19     struct AutomakeReporter : StreamingReporterBase<AutomakeReporter> {
     20         AutomakeReporter( ReporterConfig const& _config )
     21           :   StreamingReporterBase( _config )
     22         {}
     23 
     24         ~AutomakeReporter() override;
     25 
     26         static std::string getDescription() {
     27             return "Reports test results in the format of Automake .trs files";
     28         }
     29 
     30         void assertionStarting( AssertionInfo const& ) override {}
     31 
     32         bool assertionEnded( AssertionStats const& /*_assertionStats*/ ) override { return true; }
     33 
     34         void testCaseEnded( TestCaseStats const& _testCaseStats ) override {
     35             // Possible values to emit are PASS, XFAIL, SKIP, FAIL, XPASS and ERROR.
     36             stream << ":test-result: ";
     37             if (_testCaseStats.totals.assertions.allPassed()) {
     38                 stream << "PASS";
     39             } else if (_testCaseStats.totals.assertions.allOk()) {
     40                 stream << "XFAIL";
     41             } else {
     42                 stream << "FAIL";
     43             }
     44             stream << ' ' << _testCaseStats.testInfo.name << '\n';
     45             StreamingReporterBase::testCaseEnded( _testCaseStats );
     46         }
     47 
     48         void skipTest( TestCaseInfo const& testInfo ) override {
     49             stream << ":test-result: SKIP " << testInfo.name << '\n';
     50         }
     51 
     52     };
     53 
     54 #ifdef CATCH_IMPL
     55     AutomakeReporter::~AutomakeReporter() {}
     56 #endif
     57 
     58     CATCH_REGISTER_REPORTER( "automake", AutomakeReporter)
     59 
     60 } // end namespace Catch
     61 
     62 #endif // TWOBLUECUBES_CATCH_REPORTER_AUTOMAKE_HPP_INCLUDED
     63