summaryrefslogtreecommitdiff
path: root/examples/210-Evt-EventListeners.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/210-Evt-EventListeners.cpp')
-rw-r--r--examples/210-Evt-EventListeners.cpp422
1 files changed, 0 insertions, 422 deletions
diff --git a/examples/210-Evt-EventListeners.cpp b/examples/210-Evt-EventListeners.cpp
deleted file mode 100644
index 044a29e3..00000000
--- a/examples/210-Evt-EventListeners.cpp
+++ /dev/null
@@ -1,422 +0,0 @@
-// 210-Evt-EventListeners.cpp
-
-// Contents:
-// 1. Printing of listener data
-// 2. My listener and registration
-// 3. Test cases
-
-// main() provided in 000-CatchMain.cpp
-
-// Let Catch provide the required interfaces:
-#define CATCH_CONFIG_EXTERNAL_INTERFACES
-
-#include <catch2/catch.hpp>
-#include <iostream>
-
-// -----------------------------------------------------------------------
-// 1. Printing of listener data:
-//
-
-std::string ws(int const level) {
- return std::string( 2 * level, ' ' );
-}
-
-template< typename T >
-std::ostream& operator<<( std::ostream& os, std::vector<T> const& v ) {
- os << "{ ";
- for ( const auto& x : v )
- os << x << ", ";
- return os << "}";
-}
-
-// struct SourceLineInfo {
-// char const* file;
-// std::size_t line;
-// };
-
-void print( std::ostream& os, int const level, std::string const& title, Catch::SourceLineInfo const& info ) {
- os << ws(level ) << title << ":\n"
- << ws(level+1) << "- file: " << info.file << "\n"
- << ws(level+1) << "- line: " << info.line << "\n";
-}
-
-//struct MessageInfo {
-// std::string macroName;
-// std::string message;
-// SourceLineInfo lineInfo;
-// ResultWas::OfType type;
-// unsigned int sequence;
-//};
-
-void print( std::ostream& os, int const level, Catch::MessageInfo const& info ) {
- os << ws(level+1) << "- macroName: '" << info.macroName << "'\n"
- << ws(level+1) << "- message '" << info.message << "'\n";
- print( os,level+1 , "- lineInfo", info.lineInfo );
- os << ws(level+1) << "- sequence " << info.sequence << "\n";
-}
-
-void print( std::ostream& os, int const level, std::string const& title, std::vector<Catch::MessageInfo> const& v ) {
- os << ws(level ) << title << ":\n";
- for ( const auto& x : v )
- {
- os << ws(level+1) << "{\n";
- print( os, level+2, x );
- os << ws(level+1) << "}\n";
- }
-// os << ws(level+1) << "\n";
-}
-
-// struct TestRunInfo {
-// std::string name;
-// };
-
-void print( std::ostream& os, int const level, std::string const& title, Catch::TestRunInfo const& info ) {
- os << ws(level ) << title << ":\n"
- << ws(level+1) << "- name: " << info.name << "\n";
-}
-
-// struct Counts {
-// std::size_t total() const;
-// bool allPassed() const;
-// bool allOk() const;
-//
-// std::size_t passed = 0;
-// std::size_t failed = 0;
-// std::size_t failedButOk = 0;
-// };
-
-void print( std::ostream& os, int const level, std::string const& title, Catch::Counts const& info ) {
- os << ws(level ) << title << ":\n"
- << ws(level+1) << "- total(): " << info.total() << "\n"
- << ws(level+1) << "- allPassed(): " << info.allPassed() << "\n"
- << ws(level+1) << "- allOk(): " << info.allOk() << "\n"
- << ws(level+1) << "- passed: " << info.passed << "\n"
- << ws(level+1) << "- failed: " << info.failed << "\n"
- << ws(level+1) << "- failedButOk: " << info.failedButOk << "\n";
-}
-
-// struct Totals {
-// Counts assertions;
-// Counts testCases;
-// };
-
-void print( std::ostream& os, int const level, std::string const& title, Catch::Totals const& info ) {
- os << ws(level) << title << ":\n";
- print( os, level+1, "- assertions", info.assertions );
- print( os, level+1, "- testCases" , info.testCases );
-}
-
-// struct TestRunStats {
-// TestRunInfo runInfo;
-// Totals totals;
-// bool aborting;
-// };
-
-void print( std::ostream& os, int const level, std::string const& title, Catch::TestRunStats const& info ) {
- os << ws(level) << title << ":\n";
- print( os, level+1 , "- runInfo", info.runInfo );
- print( os, level+1 , "- totals" , info.totals );
- os << ws(level+1) << "- aborting: " << info.aborting << "\n";
-}
-
-// struct TestCaseInfo {
-// enum SpecialProperties{
-// None = 0,
-// IsHidden = 1 << 1,
-// ShouldFail = 1 << 2,
-// MayFail = 1 << 3,
-// Throws = 1 << 4,
-// NonPortable = 1 << 5,
-// Benchmark = 1 << 6
-// };
-//
-// bool isHidden() const;
-// bool throws() const;
-// bool okToFail() const;
-// bool expectedToFail() const;
-//
-// std::string tagsAsString() const;
-//
-// std::string name;
-// std::string className;
-// std::string description;
-// std::vector<std::string> tags;
-// std::vector<std::string> lcaseTags;
-// SourceLineInfo lineInfo;
-// SpecialProperties properties;
-// };
-
-void print( std::ostream& os, int const level, std::string const& title, Catch::TestCaseInfo const& info ) {
- os << ws(level ) << title << ":\n"
- << ws(level+1) << "- isHidden(): " << info.isHidden() << "\n"
- << ws(level+1) << "- throws(): " << info.throws() << "\n"
- << ws(level+1) << "- okToFail(): " << info.okToFail() << "\n"
- << ws(level+1) << "- expectedToFail(): " << info.expectedToFail() << "\n"
- << ws(level+1) << "- tagsAsString(): '" << info.tagsAsString() << "'\n"
- << ws(level+1) << "- name: '" << info.name << "'\n"
- << ws(level+1) << "- className: '" << info.className << "'\n"
- << ws(level+1) << "- description: '" << info.description << "'\n"
- << ws(level+1) << "- tags: " << info.tags << "\n"
- << ws(level+1) << "- lcaseTags: " << info.lcaseTags << "\n";
- print( os, level+1 , "- lineInfo", info.lineInfo );
- os << ws(level+1) << "- properties (flags): 0x" << std::hex << info.properties << std::dec << "\n";
-}
-
-// struct TestCaseStats {
-// TestCaseInfo testInfo;
-// Totals totals;
-// std::string stdOut;
-// std::string stdErr;
-// bool aborting;
-// };
-
-void print( std::ostream& os, int const level, std::string const& title, Catch::TestCaseStats const& info ) {
- os << ws(level ) << title << ":\n";
- print( os, level+1 , "- testInfo", info.testInfo );
- print( os, level+1 , "- totals" , info.totals );
- os << ws(level+1) << "- stdOut: " << info.stdOut << "\n"
- << ws(level+1) << "- stdErr: " << info.stdErr << "\n"
- << ws(level+1) << "- aborting: " << info.aborting << "\n";
-}
-
-// struct SectionInfo {
-// std::string name;
-// std::string description;
-// SourceLineInfo lineInfo;
-// };
-
-void print( std::ostream& os, int const level, std::string const& title, Catch::SectionInfo const& info ) {
- os << ws(level ) << title << ":\n"
- << ws(level+1) << "- name: " << info.name << "\n";
- print( os, level+1 , "- lineInfo", info.lineInfo );
-}
-
-// struct SectionStats {
-// SectionInfo sectionInfo;
-// Counts assertions;
-// double durationInSeconds;
-// bool missingAssertions;
-// };
-
-void print( std::ostream& os, int const level, std::string const& title, Catch::SectionStats const& info ) {
- os << ws(level ) << title << ":\n";
- print( os, level+1 , "- sectionInfo", info.sectionInfo );
- print( os, level+1 , "- assertions" , info.assertions );
- os << ws(level+1) << "- durationInSeconds: " << info.durationInSeconds << "\n"
- << ws(level+1) << "- missingAssertions: " << info.missingAssertions << "\n";
-}
-
-// struct AssertionInfo
-// {
-// StringRef macroName;
-// SourceLineInfo lineInfo;
-// StringRef capturedExpression;
-// ResultDisposition::Flags resultDisposition;
-// };
-
-void print( std::ostream& os, int const level, std::string const& title, Catch::AssertionInfo const& info ) {
- os << ws(level ) << title << ":\n"
- << ws(level+1) << "- macroName: '" << info.macroName << "'\n";
- print( os, level+1 , "- lineInfo" , info.lineInfo );
- os << ws(level+1) << "- capturedExpression: '" << info.capturedExpression << "'\n"
- << ws(level+1) << "- resultDisposition (flags): 0x" << std::hex << info.resultDisposition << std::dec << "\n";
-}
-
-//struct AssertionResultData
-//{
-// std::string reconstructExpression() const;
-//
-// std::string message;
-// mutable std::string reconstructedExpression;
-// LazyExpression lazyExpression;
-// ResultWas::OfType resultType;
-//};
-
-void print( std::ostream& os, int const level, std::string const& title, Catch::AssertionResultData const& info ) {
- os << ws(level ) << title << ":\n"
- << ws(level+1) << "- reconstructExpression(): '" << info.reconstructExpression() << "'\n"
- << ws(level+1) << "- message: '" << info.message << "'\n"
- << ws(level+1) << "- lazyExpression: '" << "(info.lazyExpression)" << "'\n"
- << ws(level+1) << "- resultType: '" << info.resultType << "'\n";
-}
-
-//class AssertionResult {
-// bool isOk() const;
-// bool succeeded() const;
-// ResultWas::OfType getResultType() const;
-// bool hasExpression() const;
-// bool hasMessage() const;
-// std::string getExpression() const;
-// std::string getExpressionInMacro() const;
-// bool hasExpandedExpression() const;
-// std::string getExpandedExpression() const;
-// std::string getMessage() const;
-// SourceLineInfo getSourceInfo() const;
-// std::string getTestMacroName() const;
-//
-// AssertionInfo m_info;
-// AssertionResultData m_resultData;
-//};
-
-void print( std::ostream& os, int const level, std::string const& title, Catch::AssertionResult const& info ) {
- os << ws(level ) << title << ":\n"
- << ws(level+1) << "- isOk(): " << info.isOk() << "\n"
- << ws(level+1) << "- succeeded(): " << info.succeeded() << "\n"
- << ws(level+1) << "- getResultType(): " << info.getResultType() << "\n"
- << ws(level+1) << "- hasExpression(): " << info.hasExpression() << "\n"
- << ws(level+1) << "- hasMessage(): " << info.hasMessage() << "\n"
- << ws(level+1) << "- getExpression(): '" << info.getExpression() << "'\n"
- << ws(level+1) << "- getExpressionInMacro(): '" << info.getExpressionInMacro() << "'\n"
- << ws(level+1) << "- hasExpandedExpression(): " << info.hasExpandedExpression() << "\n"
- << ws(level+1) << "- getExpandedExpression(): " << info.getExpandedExpression() << "'\n"
- << ws(level+1) << "- getMessage(): '" << info.getMessage() << "'\n";
- print( os, level+1 , "- getSourceInfo(): ", info.getSourceInfo() );
- os << ws(level+1) << "- getTestMacroName(): '" << info.getTestMacroName() << "'\n";
-
-// print( os, level+1 , "- *** m_info (AssertionInfo)", info.m_info );
-// print( os, level+1 , "- *** m_resultData (AssertionResultData)", info.m_resultData );
-}
-
-// struct AssertionStats {
-// AssertionResult assertionResult;
-// std::vector<MessageInfo> infoMessages;
-// Totals totals;
-// };
-
-void print( std::ostream& os, int const level, std::string const& title, Catch::AssertionStats const& info ) {
- os << ws(level ) << title << ":\n";
- print( os, level+1 , "- assertionResult", info.assertionResult );
- print( os, level+1 , "- infoMessages", info.infoMessages );
- print( os, level+1 , "- totals", info.totals );
-}
-
-// -----------------------------------------------------------------------
-// 2. My listener and registration:
-//
-
-char const * dashed_line =
- "--------------------------------------------------------------------------";
-
-struct MyListener : Catch::TestEventListenerBase {
-
- using TestEventListenerBase::TestEventListenerBase; // inherit constructor
-
- // Get rid of Wweak-tables
- ~MyListener();
-
- // The whole test run starting
- void testRunStarting( Catch::TestRunInfo const& testRunInfo ) override {
- std::cout
- << std::boolalpha
- << "\nEvent: testRunStarting:\n";
- print( std::cout, 1, "- testRunInfo", testRunInfo );
- }
-
- // The whole test run ending
- void testRunEnded( Catch::TestRunStats const& testRunStats ) override {
- std::cout
- << dashed_line
- << "\nEvent: testRunEnded:\n";
- print( std::cout, 1, "- testRunStats", testRunStats );
- }
-
- // A test is being skipped (because it is "hidden")
- void skipTest( Catch::TestCaseInfo const& testInfo ) override {
- std::cout
- << dashed_line
- << "\nEvent: skipTest:\n";
- print( std::cout, 1, "- testInfo", testInfo );
- }
-
- // Test cases starting
- void testCaseStarting( Catch::TestCaseInfo const& testInfo ) override {
- std::cout
- << dashed_line
- << "\nEvent: testCaseStarting:\n";
- print( std::cout, 1, "- testInfo", testInfo );
- }
-
- // Test cases ending
- void testCaseEnded( Catch::TestCaseStats const& testCaseStats ) override {
- std::cout << "\nEvent: testCaseEnded:\n";
- print( std::cout, 1, "testCaseStats", testCaseStats );
- }
-
- // Sections starting
- void sectionStarting( Catch::SectionInfo const& sectionInfo ) override {
- std::cout << "\nEvent: sectionStarting:\n";
- print( std::cout, 1, "- sectionInfo", sectionInfo );
- }
-
- // Sections ending
- void sectionEnded( Catch::SectionStats const& sectionStats ) override {
- std::cout << "\nEvent: sectionEnded:\n";
- print( std::cout, 1, "- sectionStats", sectionStats );
- }
-
- // Assertions before/ after
- void assertionStarting( Catch::AssertionInfo const& assertionInfo ) override {
- std::cout << "\nEvent: assertionStarting:\n";
- print( std::cout, 1, "- assertionInfo", assertionInfo );
- }
-
- bool assertionEnded( Catch::AssertionStats const& assertionStats ) override {
- std::cout << "\nEvent: assertionEnded:\n";
- print( std::cout, 1, "- assertionStats", assertionStats );
- return true;
- }
-};
-
-CATCH_REGISTER_LISTENER( MyListener )
-
-// Get rid of Wweak-tables
-MyListener::~MyListener() {}
-
-
-// -----------------------------------------------------------------------
-// 3. Test cases:
-//
-
-TEST_CASE( "1: Hidden testcase", "[.hidden]" ) {
-}
-
-TEST_CASE( "2: Testcase with sections", "[tag-A][tag-B]" ) {
-
- int i = 42;
-
- REQUIRE( i == 42 );
-
- SECTION("Section 1") {
- INFO("Section 1");
- i = 7;
- SECTION("Section 1.1") {
- INFO("Section 1.1");
- REQUIRE( i == 42 );
- }
- }
-
- SECTION("Section 2") {
- INFO("Section 2");
- REQUIRE( i == 42 );
- }
- WARN("At end of test case");
-}
-
-struct Fixture {
- int fortytwo() const {
- return 42;
- }
-};
-
-TEST_CASE_METHOD( Fixture, "3: Testcase with class-based fixture", "[tag-C][tag-D]" ) {
- REQUIRE( fortytwo() == 42 );
-}
-
-// Compile & run:
-// - g++ -std=c++11 -Wall -I$(CATCH_SINGLE_INCLUDE) -o 210-Evt-EventListeners 210-Evt-EventListeners.cpp 000-CatchMain.o && 210-Evt-EventListeners --success
-// - cl -EHsc -I%CATCH_SINGLE_INCLUDE% 210-Evt-EventListeners.cpp 000-CatchMain.obj && 210-Evt-EventListeners --success
-
-// Expected compact output (all assertions):
-//
-// prompt> 210-Evt-EventListeners --reporter compact --success
-// result omitted for brevity.