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