mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-23 05:46:11 +01:00
f7cd0ba051
This PR introduces a new `TEST_CASE` macro called `TEST_CASE_PERSISTENT_FIXTURE`. `TEST_CASE_PERSISTENT_FIXTURE` offers the same functionality as `TEST_CASE_METHOD` except for one difference. The object on which the test method is invoked is only created once for all invocations of the test case. The object is created just after the `testCaseStarting` event is broadcast and the object is destroyed just before the `testCaseEnding` event is broadcast. The main motivation for this new functionality is to allow `TEST_CASE`s to do expensive setup and teardown once per `TEST_CASE`, without having to resort to abusing event listeners or static function variables with manual initialization. Implements #1602 --------- Co-authored-by: Martin Hořeňovský <martin.horenovsky@gmail.com>
80 lines
2.2 KiB
C++
80 lines
2.2 KiB
C++
|
|
// 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
|
|
* Test that CATCH_CONFIG_DISABLE turns off TEST_CASE autoregistration
|
|
* and expressions in assertion macros are not run.
|
|
*/
|
|
|
|
#include <catch2/benchmark/catch_benchmark.hpp>
|
|
#include <catch2/catch_test_macros.hpp>
|
|
#include <catch2/matchers/catch_matchers.hpp>
|
|
#include <catch2/matchers/catch_matchers_predicate.hpp>
|
|
|
|
#include <iostream>
|
|
|
|
struct foo {
|
|
foo() { REQUIRE_NOTHROW( print() ); }
|
|
void print() const { std::cout << "This should not happen\n"; }
|
|
};
|
|
|
|
#if defined( __clang__ )
|
|
# pragma clang diagnostic push
|
|
# pragma clang diagnostic ignored "-Wglobal-constructors"
|
|
#endif
|
|
// Construct foo, but `foo::print` should not be run
|
|
static foo f;
|
|
|
|
#if defined( __clang__ )
|
|
// The test is unused since the registration is disabled
|
|
# pragma clang diagnostic ignored "-Wunused-function"
|
|
#endif
|
|
|
|
// This test should not be run, because it won't be registered
|
|
TEST_CASE( "Disabled Macros" ) {
|
|
CHECK( 1 == 2 );
|
|
REQUIRE( 1 == 2 );
|
|
std::cout << "This should not happen\n";
|
|
FAIL();
|
|
|
|
// Test that static assertions don't fire when macros are disabled
|
|
STATIC_CHECK( 0 == 1 );
|
|
STATIC_REQUIRE( !true );
|
|
|
|
CAPTURE( 1 );
|
|
CAPTURE( 1, "captured" );
|
|
|
|
REQUIRE_THAT( 1,
|
|
Catch::Matchers::Predicate( []( int ) { return false; } ) );
|
|
BENCHMARK( "Disabled benchmark" ) { REQUIRE( 1 == 2 ); };
|
|
}
|
|
|
|
struct DisabledFixture {};
|
|
|
|
TEST_CASE_PERSISTENT_FIXTURE( DisabledFixture, "Disabled Persistent Fixture" ) {
|
|
CHECK( 1 == 2 );
|
|
REQUIRE( 1 == 2 );
|
|
std::cout << "This should not happen\n";
|
|
FAIL();
|
|
|
|
// Test that static assertions don't fire when macros are disabled
|
|
STATIC_CHECK( 0 == 1 );
|
|
STATIC_REQUIRE( !true );
|
|
|
|
CAPTURE( 1 );
|
|
CAPTURE( 1, "captured" );
|
|
|
|
REQUIRE_THAT( 1,
|
|
Catch::Matchers::Predicate( []( int ) { return false; } ) );
|
|
BENCHMARK( "Disabled benchmark" ) { REQUIRE( 1 == 2 ); };
|
|
}
|
|
|
|
#if defined( __clang__ )
|
|
# pragma clang diagnostic pop
|
|
#endif
|