From 8b42acc328fc7b6c4526e649a30c4b3c198c974d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ho=C5=99e=C5=88ovsk=C3=BD?= Date: Mon, 9 Dec 2019 10:04:26 +0100 Subject: [PATCH] Reintegrate extra tests --- CMakeLists.txt | 5 ++- src/catch2/catch_assertionhandler.cpp | 1 + src/catch2/catch_interfaces_exception.h | 5 +++ tests/ExtraTests/CMakeLists.txt | 43 ++++++++++--------- tests/ExtraTests/X01-PrefixedMacros.cpp | 3 +- tests/ExtraTests/X02-DisabledMacros.cpp | 7 +-- .../X03-DisabledExceptions-DefaultHandler.cpp | 2 +- .../X04-DisabledExceptions-CustomHandler.cpp | 4 +- tests/ExtraTests/X10-FallbackStringifier.cpp | 2 +- .../ExtraTests/X11-DisableStringification.cpp | 2 +- tests/ExtraTests/X20-BenchmarkingMacros.cpp | 2 +- .../ExtraTests/X90-WindowsHeaderInclusion.cpp | 2 +- 12 files changed, 41 insertions(+), 37 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4985beef..4b596798 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,7 @@ endif() option(CATCH_BUILD_TESTING "Build SelfTest project" ON) option(CATCH_BUILD_EXAMPLES "Build documentation examples" OFF) +option(CATCH_BUILD_EXTRA_TESTS "Build extra tests" OFF) # Catch2's build breaks if done in-tree. You probably should not build @@ -50,9 +51,11 @@ if(CATCH_BUILD_EXAMPLES) add_subdirectory(examples) endif() +if(CATCH_BUILD_EXTRA_TESTS) + add_subdirectory(tests/ExtraTests) +endif() #option(CATCH_USE_VALGRIND "Perform SelfTests with Valgrind" OFF) -#option(CATCH_BUILD_EXTRA_TESTS "Build extra tests" OFF) #option(CATCH_ENABLE_COVERAGE "Generate coverage for codecov.io" OFF) #option(CATCH_ENABLE_WERROR "Enable all warnings as errors" ON) #option(CATCH_INSTALL_DOCS "Install documentation alongside library" ON) diff --git a/src/catch2/catch_assertionhandler.cpp b/src/catch2/catch_assertionhandler.cpp index 2f2e8ecd..892e78a4 100644 --- a/src/catch2/catch_assertionhandler.cpp +++ b/src/catch2/catch_assertionhandler.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include diff --git a/src/catch2/catch_interfaces_exception.h b/src/catch2/catch_interfaces_exception.h index 0afbd67b..0f9fbd32 100644 --- a/src/catch2/catch_interfaces_exception.h +++ b/src/catch2/catch_interfaces_exception.h @@ -9,6 +9,7 @@ #define TWOBLUECUBES_CATCH_INTERFACES_EXCEPTION_H_INCLUDED #include +#include #if defined(CATCH_CONFIG_DISABLE) #define INTERNAL_CATCH_TRANSLATE_EXCEPTION_NO_REG( translatorName, signature) \ @@ -46,6 +47,7 @@ namespace Catch { {} std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const override { +#if !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) try { if( it == itEnd ) std::rethrow_exception(std::current_exception()); @@ -55,6 +57,9 @@ namespace Catch { catch( T& ex ) { return m_translateFunction( ex ); } +#else + return "You should never get here!"; +#endif } protected: diff --git a/tests/ExtraTests/CMakeLists.txt b/tests/ExtraTests/CMakeLists.txt index 196199df..b9ab2384 100644 --- a/tests/ExtraTests/CMakeLists.txt +++ b/tests/ExtraTests/CMakeLists.txt @@ -1,8 +1,6 @@ # # Build extra tests. # -# Requires CATCH_BUILD_EXTRA_TESTS to be defined 'true', see ../CMakeLists.txt. -# cmake_minimum_required( VERSION 3.5 ) @@ -11,13 +9,13 @@ project( Catch2ExtraTests LANGUAGES CXX ) message( STATUS "Extra tests included" ) # define folders used: - -set( TESTS_DIR ${CATCH_DIR}/projects/ExtraTests ) -set( SINGLE_INCLUDE_PATH ${CATCH_DIR}/single_include ) - +set( TESTS_DIR ${CATCH_DIR}/tests/ExtraTests ) add_executable(PrefixedMacros ${TESTS_DIR}/X01-PrefixedMacros.cpp) -target_compile_definitions( PrefixedMacros PRIVATE CATCH_CONFIG_PREFIX_ALL ) +target_compile_definitions( PrefixedMacros PRIVATE CATCH_CONFIG_PREFIX_ALL CATCH_CONFIG_RUNTIME_STATIC_REQUIRE ) +# Macro configuration does not touch the compiled parts, so we can link +# it against the main library +target_link_libraries( PrefixedMacros Catch2 ) add_test(NAME CATCH_CONFIG_PREFIX_ALL COMMAND PrefixedMacros -s) set_tests_properties( @@ -30,8 +28,12 @@ set_tests_properties( " REQUIRE; REQUIRE_FALSE; REQUIRE_THROWS; REQUIRE_THROWS_AS; REQUIRE_THROWS_WITH; REQUIRE_THROWS_MATCHES; REQUIRE_NOTHROW; CHECK; CHECK_FALSE; CHECKED_IF; CHECKED_ELSE; CHECK_NOFAIL; CHECK_THROWS; CHECK_THROWS_AS; CHECK_THROWS_WITH; CHECK_THROWS_MATCHES; CHECK_NOTHROW; REQUIRE_THAT; CHECK_THAT" ) + add_executable(DisabledMacros ${TESTS_DIR}/X02-DisabledMacros.cpp) target_compile_definitions( DisabledMacros PRIVATE CATCH_CONFIG_DISABLE ) +# Macro configuration does not touch the compiled parts, so we can link +# it against the main library +target_link_libraries( DisabledMacros Catch2 ) add_test(NAME CATCH_CONFIG_DISABLE-1 COMMAND DisabledMacros -s) set_tests_properties( @@ -47,19 +49,19 @@ set_tests_properties( PASS_REGULAR_EXPRESSION "0 test cases" ) - add_executable( DisabledExceptions-DefaultHandler ${TESTS_DIR}/X03-DisabledExceptions-DefaultHandler.cpp ) add_executable( DisabledExceptions-CustomHandler ${TESTS_DIR}/X04-DisabledExceptions-CustomHandler.cpp ) foreach(target DisabledExceptions-DefaultHandler DisabledExceptions-CustomHandler) -target_compile_options( ${target} - PRIVATE - $<$:/EHs-c-;/D_HAS_EXCEPTIONS=0> - $<$,$,$>:-fno-exceptions> -# $<$:-fno-exceptions> -# $<$:-fno-exceptions> -) + StampOutLibrary(${target}) + target_compile_options( Catch2_${target} + PUBLIC + $<$:/EHs-c-;/D_HAS_EXCEPTIONS=0> + $<$,$,$>:-fno-exceptions> + ) + target_link_libraries(${target} Catch2_${target}) endforeach() +target_compile_definitions( Catch2_DisabledExceptions-CustomHandler PUBLIC CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER ) add_test(NAME CATCH_CONFIG_DISABLE_EXCEPTIONS-1 COMMAND DisabledExceptions-DefaultHandler "Tests that run") @@ -96,6 +98,7 @@ set_tests_properties( add_executable(FallbackStringifier ${TESTS_DIR}/X10-FallbackStringifier.cpp) target_compile_definitions( FallbackStringifier PRIVATE CATCH_CONFIG_FALLBACK_STRINGIFIER=fallbackStringifier ) +target_link_libraries( FallbackStringifier Catch2 ) add_test(NAME FallbackStringifier COMMAND FallbackStringifier -r compact -s) set_tests_properties( @@ -107,6 +110,7 @@ set_tests_properties( add_executable(DisableStringification ${TESTS_DIR}/X11-DisableStringification.cpp) target_compile_definitions( DisableStringification PRIVATE CATCH_CONFIG_DISABLE_STRINGIFICATION ) +target_link_libraries(DisableStringification Catch2) add_test(NAME CATCH_CONFIG_DISABLE_STRINGIFICATION COMMAND DisableStringification -r compact -s) set_tests_properties( CATCH_CONFIG_DISABLE_STRINGIFICATION @@ -117,7 +121,9 @@ set_tests_properties( add_executable(BenchmarkingMacros ${TESTS_DIR}/X20-BenchmarkingMacros.cpp) -target_compile_definitions( BenchmarkingMacros PRIVATE CATCH_CONFIG_ENABLE_BENCHMARKING ) +StampOutLibrary(BenchmarkingMacros) +target_compile_definitions( Catch2_BenchmarkingMacros PUBLIC CATCH_CONFIG_ENABLE_BENCHMARKING ) +target_link_libraries( BenchmarkingMacros Catch2_BenchmarkingMacros ) add_test(NAME BenchmarkingMacros COMMAND BenchmarkingMacros -r console -s) set_tests_properties( @@ -133,7 +139,7 @@ if (MSVC) set_property( TARGET WindowsHeader PROPERTY CXX_STANDARD 14 ) set_property( TARGET WindowsHeader PROPERTY CXX_STANDARD_REQUIRED ON ) set_property( TARGET WindowsHeader PROPERTY CXX_EXTENSIONS OFF ) - target_include_directories( WindowsHeader PRIVATE ${SINGLE_INCLUDE_PATH} ) + target_link_libraries( WindowsHeader Catch2 ) add_test(NAME WindowsHeader COMMAND WindowsHeader -r compact) endif() @@ -152,7 +158,4 @@ foreach( test ${EXTRA_TEST_BINARIES} ) set_property( TARGET ${test} PROPERTY CXX_STANDARD 14 ) set_property( TARGET ${test} PROPERTY CXX_STANDARD_REQUIRED ON ) set_property( TARGET ${test} PROPERTY CXX_EXTENSIONS OFF ) - target_include_directories( ${test} PRIVATE ${SINGLE_INCLUDE_PATH} ) endforeach() - - diff --git a/tests/ExtraTests/X01-PrefixedMacros.cpp b/tests/ExtraTests/X01-PrefixedMacros.cpp index c9b16ebc..3626fd10 100644 --- a/tests/ExtraTests/X01-PrefixedMacros.cpp +++ b/tests/ExtraTests/X01-PrefixedMacros.cpp @@ -1,10 +1,9 @@ // X11-DisableStringification.cpp // Test that Catch's prefixed macros compile and run properly. -#define CATCH_CONFIG_MAIN +#include // This won't provide full coverage, but it might be worth checking // the other branch as well -#define CATCH_CONFIG_RUNTIME_STATIC_REQUIRE #include #include diff --git a/tests/ExtraTests/X02-DisabledMacros.cpp b/tests/ExtraTests/X02-DisabledMacros.cpp index 3a969d76..2ed54db3 100644 --- a/tests/ExtraTests/X02-DisabledMacros.cpp +++ b/tests/ExtraTests/X02-DisabledMacros.cpp @@ -2,14 +2,9 @@ // Test that CATCH_CONFIG_DISABLE turns off TEST_CASE autoregistration // and expressions in assertion macros are not run. -#define CATCH_CONFIG_MAIN +#include #include - -// CATCH_CONFIG_DISABLE also prevents reporter registration. -// We need to manually register at least one reporter for our tests -static Catch::ReporterRegistrar temporary( "console" ); - #include struct foo { diff --git a/tests/ExtraTests/X03-DisabledExceptions-DefaultHandler.cpp b/tests/ExtraTests/X03-DisabledExceptions-DefaultHandler.cpp index 846c9b0f..07fac7e8 100644 --- a/tests/ExtraTests/X03-DisabledExceptions-DefaultHandler.cpp +++ b/tests/ExtraTests/X03-DisabledExceptions-DefaultHandler.cpp @@ -1,4 +1,4 @@ -#define CATCH_CONFIG_MAIN +#include #include TEST_CASE("Tests that run") { diff --git a/tests/ExtraTests/X04-DisabledExceptions-CustomHandler.cpp b/tests/ExtraTests/X04-DisabledExceptions-CustomHandler.cpp index 96f3ceb8..028d05bd 100644 --- a/tests/ExtraTests/X04-DisabledExceptions-CustomHandler.cpp +++ b/tests/ExtraTests/X04-DisabledExceptions-CustomHandler.cpp @@ -1,6 +1,4 @@ -#define CATCH_CONFIG_DISABLE_EXCEPTIONS_CUSTOM_HANDLER - -#define CATCH_CONFIG_MAIN +#include #include namespace Catch { diff --git a/tests/ExtraTests/X10-FallbackStringifier.cpp b/tests/ExtraTests/X10-FallbackStringifier.cpp index 0522d1af..bf6601db 100644 --- a/tests/ExtraTests/X10-FallbackStringifier.cpp +++ b/tests/ExtraTests/X10-FallbackStringifier.cpp @@ -9,7 +9,7 @@ std::string fallbackStringifier(T const&) { return "{ !!! }"; } -#define CATCH_CONFIG_MAIN +#include #include struct foo { diff --git a/tests/ExtraTests/X11-DisableStringification.cpp b/tests/ExtraTests/X11-DisableStringification.cpp index 7a93f6e2..23f49f5f 100644 --- a/tests/ExtraTests/X11-DisableStringification.cpp +++ b/tests/ExtraTests/X11-DisableStringification.cpp @@ -4,7 +4,7 @@ // and preprocessor token pasting. In other words, hopefully this test // will be deleted soon :-) -#define CATCH_CONFIG_MAIN +#include #include struct Hidden {}; diff --git a/tests/ExtraTests/X20-BenchmarkingMacros.cpp b/tests/ExtraTests/X20-BenchmarkingMacros.cpp index e76af0c7..b5010609 100644 --- a/tests/ExtraTests/X20-BenchmarkingMacros.cpp +++ b/tests/ExtraTests/X20-BenchmarkingMacros.cpp @@ -1,7 +1,7 @@ // X20-BenchmarkingMacros.cpp // Test that the benchmarking support macros compile properly with the single header -#define CATCH_CONFIG_MAIN +#include #include namespace { diff --git a/tests/ExtraTests/X90-WindowsHeaderInclusion.cpp b/tests/ExtraTests/X90-WindowsHeaderInclusion.cpp index 2b7a074e..0a2bdb55 100644 --- a/tests/ExtraTests/X90-WindowsHeaderInclusion.cpp +++ b/tests/ExtraTests/X90-WindowsHeaderInclusion.cpp @@ -4,7 +4,7 @@ // wrong. #include -#define CATCH_CONFIG_MAIN +#include #include TEST_CASE("Catch2 did survive compilation with windows.h", "[compile-test]") {