blob: 6f44bf691b4e6ff1dda73f0f6332e16f2ce4c626 (
plain) (
blame)
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
// Copyright Catch2 Authors
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE.txt or copy at
// https://www.boost.org/LICENSE_1_0.txt)
// SPDX-License-Identifier: BSL-1.0
/**\file
* Registers an event listener to increments counter of assertionStarting events.
*
* Different assertion macros then check that the counter is at expected
* value when they are evaluated.
*/
#include <catch2/catch_test_macros.hpp>
#include <catch2/reporters/catch_reporter_event_listener.hpp>
#include <catch2/reporters/catch_reporter_registrars.hpp>
#include <catch2/matchers/catch_matchers_predicate.hpp>
namespace {
static size_t assertion_starting_events_seen = 0;
class AssertionStartingListener : public Catch::EventListenerBase {
public:
AssertionStartingListener( Catch::IConfig const* config ):
EventListenerBase( config ) {}
void assertionStarting( Catch::AssertionInfo const& ) override {
++assertion_starting_events_seen;
}
};
static bool f1() {
return assertion_starting_events_seen == 1;
}
static void f2() {
if ( assertion_starting_events_seen != 2 ) { throw 1; }
}
static void f3() {
if ( assertion_starting_events_seen == 3 ) { throw 1; }
}
static bool f4() { return assertion_starting_events_seen == 4; }
static void f5() { throw assertion_starting_events_seen; }
} // anonymous namespace
CATCH_REGISTER_LISTENER( AssertionStartingListener )
TEST_CASE() {
// **IMPORTANT**
// The order of assertions below matters.
REQUIRE( f1() );
REQUIRE_NOTHROW( f2() );
REQUIRE_THROWS( f3() );
REQUIRE_THAT( f4(),
Catch::Matchers::Predicate<bool>( []( bool b ) { return b; } ) );
REQUIRE_THROWS_MATCHES(
f5(), size_t, Catch::Matchers::Predicate<size_t>( []( size_t i ) {
return i == 5;
} ) );
CAPTURE( assertion_starting_events_seen ); // **not** an assertion
INFO( "some info msg" ); // **not** an assertion
WARN( "warning! warning!" ); // assertion-like message
SUCCEED(); // assertion-like message
// We skip FAIL/SKIP and so on, which fail the test.
// This require will also increment the count once
REQUIRE( assertion_starting_events_seen == 8 );
}
|