diff options
author | Salvage <29021710+Saalvage@users.noreply.github.com> | 2022-01-12 02:52:38 +0300 |
---|---|---|
committer | Salvage <29021710+Saalvage@users.noreply.github.com> | 2022-01-12 02:52:38 +0300 |
commit | 860904d58644da1af6e08d57a7f47144536d2fb5 (patch) | |
tree | c2d42a43e8e15ea5cd2b5c08e02e78fa74f766fe /examples | |
parent | aa120f0826f4bb2970656a0d2c865a50c43f3a06 (diff) |
Hotfix asserts returning values with DOCTEST_CONFIG_DISABLE
Diffstat (limited to 'examples')
12 files changed, 262 insertions, 29 deletions
diff --git a/examples/all_features/CMakeLists.txt b/examples/all_features/CMakeLists.txt index d8b3cfbe..128676c0 100644 --- a/examples/all_features/CMakeLists.txt +++ b/examples/all_features/CMakeLists.txt @@ -97,6 +97,16 @@ doctest_add_test(NAME minimal ${common_args} -m -sf=*test_cases_and_suit doctest_add_test(NAME minimal_no_fail ${common_args} -m -sf=*no_failures.cpp) # minimal ################################################################################ +## DOCTEST DISABLED - EXPRESSIONS STILL EVALUATE TO RETURN PROPER VALUES +################################################################################ + +add_executable(disabled_but_evaluated assert_returns_disabled.cpp assert_returns_disabled_evaluate.cpp) +target_compile_definitions(disabled_but_evaluated PRIVATE DOCTEST_CONFIG_DISABLE) +target_link_libraries(disabled_but_evaluated doctest ${CMAKE_THREAD_LIBS_INIT}) + +doctest_add_test_impl(NAME disabled_but_evaluated COMMAND $<TARGET_FILE:disabled_but_evaluated>) + +################################################################################ ## VARIATION OF THE BUILD WITH DOCTEST DISABLED - SHOULD STILL COMPILE ################################################################################ @@ -108,7 +118,7 @@ add_executable(disabled ${files_all}) target_compile_definitions(disabled PRIVATE DOCTEST_CONFIG_DISABLE) target_link_libraries(disabled doctest ${CMAKE_THREAD_LIBS_INIT}) -doctest_add_test(NAME disabled COMMAND $<TARGET_FILE:disabled>) +doctest_add_test_impl(NAME disabled COMMAND $<TARGET_FILE:disabled>) # TODO: think about fixing these in a different way! - see issue #61 or commit 6b61e8aa3818c5ea100cedc1bb48a60ea10df6e8 if(MSVC) diff --git a/examples/all_features/assert_returns_disabled.cpp b/examples/all_features/assert_returns_disabled.cpp new file mode 100644 index 00000000..b53be00d --- /dev/null +++ b/examples/all_features/assert_returns_disabled.cpp @@ -0,0 +1,33 @@ +#include <doctest/doctest.h> + +#ifdef _MSC_VER +#define __STDC_WANT_SECURE_LIB__ 1 +#endif +#include <iostream> +#include <limits> + + +#ifndef TEST_FLIP +#define TEST_FLIP 0 +#endif + +#define TEST_FAIL() std::cout << "FAILED ON: " << __LINE__ \ + << " (" << (TEST_FLIP ? "EVALUATED" : "DISABLED") << ")\n"; + +static int test_disabled_var_ = [&] { + (void)&test_disabled_var_; + // none may return true + if (TEST_FLIP ^ CHECK(0 == 0)) { TEST_FAIL(); } + if (TEST_FLIP ^ CHECK_FALSE(0 != 0)) { TEST_FAIL(); } + if (TEST_FLIP ^ CHECK_EQ(0, 0)) { TEST_FAIL(); } + if (TEST_FLIP ^ CHECK_UNARY(true)) { TEST_FAIL(); } + if (TEST_FLIP ^ CHECK_UNARY_FALSE(false)) { TEST_FAIL(); } + if (TEST_FLIP ^ CHECK_THROWS([] { throw 2; }())) { TEST_FAIL(); } + if (TEST_FLIP ^ CHECK_THROWS_AS([] { throw 2; }(), int)) { TEST_FAIL(); } + if (TEST_FLIP ^ CHECK_NOTHROW([]{ }())) { TEST_FAIL(); } + if (CHECK_THROWS_WITH([] { throw 2; }(), "2")) { TEST_FAIL(); } + if (CHECK_NAN(std::numeric_limits<float>::quiet_NaN())) { TEST_FAIL(); } + if (CHECK_NOT_NAN(2'2.)) { TEST_FAIL(); } + + return 0; +}(); diff --git a/examples/all_features/assert_returns_disabled_evaluate.cpp b/examples/all_features/assert_returns_disabled_evaluate.cpp new file mode 100644 index 00000000..722e9b43 --- /dev/null +++ b/examples/all_features/assert_returns_disabled_evaluate.cpp @@ -0,0 +1,4 @@ +#define DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED +#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN +#define TEST_FLIP 1 +#include "assert_returns_disabled.cpp" diff --git a/examples/all_features/assertion_macros.cpp b/examples/all_features/assertion_macros.cpp index 8dcebb94..6ad8287b 100644 --- a/examples/all_features/assertion_macros.cpp +++ b/examples/all_features/assertion_macros.cpp @@ -194,17 +194,34 @@ TEST_CASE("some asserts used in a function called by a test case") { someAssertsInFunction(); } -TEST_CASE("macro return values") { - int a = 4; - int b = 2; - DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4702) // unreachable code - if (CHECK(a == b)) { MESSAGE("should not be reached!"); } - if (CHECK_FALSE(a != b)) { MESSAGE("should not be reached!"); } - if (CHECK_EQ(a, b)) { MESSAGE("should not be reached!"); } - if (CHECK_UNARY(a == b)) { MESSAGE("should not be reached!"); } - if (CHECK_UNARY_FALSE(a != b)) { MESSAGE("should not be reached!"); } - if (CHECK_THROWS([]{}())) { MESSAGE("should not be reached!"); } - DOCTEST_MSVC_SUPPRESS_WARNING_POP +inline DOCTEST_NOINLINE void comp(int a, int b) { + if (CHECK(a == b)) { MESSAGE(":D"); } + if (CHECK_FALSE(a != b)) { MESSAGE(":D"); } + if (CHECK_EQ(a, b)) { MESSAGE(":D"); } + if (CHECK_UNARY(a == b)) { MESSAGE(":D"); } + if (CHECK_UNARY_FALSE(a != b)) { MESSAGE(":D"); } +} + +TEST_CASE("check return values") { + comp(0, 0); + + if (CHECK_THROWS([] { throw 2; }())) { MESSAGE(":D"); } + if (CHECK_THROWS_AS([] { throw 2; }(), int)) { MESSAGE(":D"); } + if (CHECK_NOTHROW([] { }())) { MESSAGE(":D"); } + if (CHECK_THROWS_WITH([] { throw 2; }(), "2")) { MESSAGE(":D"); } + if (CHECK_NAN(std::numeric_limits<float>::quiet_NaN())) { MESSAGE(":D"); } + if (CHECK_NOT_NAN(2'2.)) { MESSAGE(":D"); } +} + +TEST_CASE("check return values no print") { + comp(4, 2); + + if (CHECK_THROWS([] { }())) { MESSAGE(":D"); } + if (CHECK_THROWS_AS([] { throw 2; }(), doctest::Approx)) { MESSAGE(":D"); } + if (CHECK_NOTHROW([] { throw 2; }())) { MESSAGE(":D"); } + if (CHECK_THROWS_WITH([] { throw 2; }(), "1")) { MESSAGE(":D"); } + if (CHECK_NAN(0.)) { MESSAGE(":D"); } + if (CHECK_NOT_NAN(std::numeric_limits<long double>::signaling_NaN())) { MESSAGE(":D"); } } TEST_CASE("nan") { diff --git a/examples/all_features/test_output/assertion_macros.cpp.txt b/examples/all_features/test_output/assertion_macros.cpp.txt index 03660105..ecdad447 100644 --- a/examples/all_features/test_output/assertion_macros.cpp.txt +++ b/examples/all_features/test_output/assertion_macros.cpp.txt @@ -199,7 +199,33 @@ assertion_macros.cpp(0): ERROR: CHECK_THROWS_WITH_AS( throw_if(true, false), "un =============================================================================== assertion_macros.cpp(0): -TEST CASE: macro return values +TEST CASE: check return values + +assertion_macros.cpp(0): MESSAGE: :D + +assertion_macros.cpp(0): MESSAGE: :D + +assertion_macros.cpp(0): MESSAGE: :D + +assertion_macros.cpp(0): MESSAGE: :D + +assertion_macros.cpp(0): MESSAGE: :D + +assertion_macros.cpp(0): MESSAGE: :D + +assertion_macros.cpp(0): MESSAGE: :D + +assertion_macros.cpp(0): MESSAGE: :D + +assertion_macros.cpp(0): MESSAGE: :D + +assertion_macros.cpp(0): MESSAGE: :D + +assertion_macros.cpp(0): MESSAGE: :D + +=============================================================================== +assertion_macros.cpp(0): +TEST CASE: check return values no print assertion_macros.cpp(0): ERROR: CHECK( a == b ) is NOT correct! values: CHECK( 4 == 2 ) @@ -216,7 +242,19 @@ assertion_macros.cpp(0): ERROR: CHECK_UNARY( a == b ) is NOT correct! assertion_macros.cpp(0): ERROR: CHECK_UNARY_FALSE( a != b ) is NOT correct! values: CHECK_UNARY_FALSE( true ) -assertion_macros.cpp(0): ERROR: CHECK_THROWS( []{}() ) did NOT throw at all! +assertion_macros.cpp(0): ERROR: CHECK_THROWS( [] { }() ) did NOT throw at all! + +assertion_macros.cpp(0): ERROR: CHECK_THROWS_AS( [] { throw 2; }(), doctest::Approx ) threw a DIFFERENT exception: "2" + +assertion_macros.cpp(0): ERROR: CHECK_NOTHROW( [] { throw 2; }() ) THREW exception: "2" + +assertion_macros.cpp(0): ERROR: CHECK_THROWS_WITH( [] { throw 2; }(), "1" ) threw a DIFFERENT exception: "2" + +assertion_macros.cpp(0): ERROR: CHECK_NAN( 0. ) is NOT correct! + values: CHECK_NAN( 0.0 ) + +assertion_macros.cpp(0): ERROR: CHECK_NOT_NAN( std::numeric_limits<long double>::signaling_NaN() ) is NOT correct! + values: CHECK_NOT_NAN( nan ) =============================================================================== assertion_macros.cpp(0): @@ -229,7 +267,7 @@ assertion_macros.cpp(0): WARNING: WARN_NOT_NAN( std::numeric_limits<float>::quie values: WARN_NOT_NAN( nanf ) =============================================================================== -[doctest] test cases: 23 | 3 passed | 20 failed | -[doctest] assertions: 84 | 38 passed | 46 failed | +[doctest] test cases: 24 | 4 passed | 20 failed | +[doctest] assertions: 100 | 49 passed | 51 failed | [doctest] Status: FAILURE! Program code. diff --git a/examples/all_features/test_output/assertion_macros.cpp_junit.txt b/examples/all_features/test_output/assertion_macros.cpp_junit.txt index 904841df..aba023d7 100644 --- a/examples/all_features/test_output/assertion_macros.cpp_junit.txt +++ b/examples/all_features/test_output/assertion_macros.cpp_junit.txt @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <testsuites> - <testsuite name="all_features" errors="0" failures="60" tests="84"> + <testsuite name="all_features" errors="0" failures="65" tests="100"> <testcase classname="assertion_macros.cpp" name="normal macros" status="run"> <failure type="CHECK"> assertion_macros.cpp(0): @@ -317,7 +317,8 @@ CHECK_THROWS_WITH_AS( throw_if(true, false), "unknown exception", int ) threw a </failure> </testcase> - <testcase classname="assertion_macros.cpp" name="macro return values" status="run"> + <testcase classname="assertion_macros.cpp" name="check return values" status="run"/> + <testcase classname="assertion_macros.cpp" name="check return values no print" status="run"> <failure message="4 == 2" type="CHECK"> assertion_macros.cpp(0): CHECK( a == b ) is NOT correct! @@ -350,7 +351,34 @@ CHECK_UNARY_FALSE( a != b ) is NOT correct! </failure> <failure type="CHECK_THROWS"> assertion_macros.cpp(0): -CHECK_THROWS( []{}() ) did NOT throw at all! +CHECK_THROWS( [] { }() ) did NOT throw at all! + + </failure> + <failure type="CHECK_THROWS_AS"> +assertion_macros.cpp(0): +CHECK_THROWS_AS( [] { throw 2; }(), doctest::Approx ) threw a DIFFERENT exception: "2" + + </failure> + <failure type="CHECK_NOTHROW"> +assertion_macros.cpp(0): +CHECK_NOTHROW( [] { throw 2; }() ) THREW exception: "2" + + </failure> + <failure type="CHECK_THROWS_WITH"> +assertion_macros.cpp(0): +CHECK_THROWS_WITH( [] { throw 2; }(), "1" ) threw a DIFFERENT exception: "2" + + </failure> + <failure message="0.0" type="CHECK_NAN"> +assertion_macros.cpp(0): +CHECK_NAN( 0. ) is NOT correct! + values: CHECK_NAN( 0.0 ) + + </failure> + <failure message="nan" type="CHECK_NOT_NAN"> +assertion_macros.cpp(0): +CHECK_NOT_NAN( std::numeric_limits<long double>::signaling_NaN() ) is NOT correct! + values: CHECK_NOT_NAN( nan ) </failure> </testcase> diff --git a/examples/all_features/test_output/assertion_macros.cpp_xml.txt b/examples/all_features/test_output/assertion_macros.cpp_xml.txt index 65245d91..48784043 100644 --- a/examples/all_features/test_output/assertion_macros.cpp_xml.txt +++ b/examples/all_features/test_output/assertion_macros.cpp_xml.txt @@ -532,7 +532,65 @@ </Expression> <OverallResultsAsserts successes="9" failures="1" test_case_success="false"/> </TestCase> - <TestCase name="macro return values" filename="assertion_macros.cpp" line="0"> + <TestCase name="check return values" filename="assertion_macros.cpp" line="0"> + <Message type="WARNING" filename="assertion_macros.cpp" line="0"> + <Text> + :D + </Text> + </Message> + <Message type="WARNING" filename="assertion_macros.cpp" line="0"> + <Text> + :D + </Text> + </Message> + <Message type="WARNING" filename="assertion_macros.cpp" line="0"> + <Text> + :D + </Text> + </Message> + <Message type="WARNING" filename="assertion_macros.cpp" line="0"> + <Text> + :D + </Text> + </Message> + <Message type="WARNING" filename="assertion_macros.cpp" line="0"> + <Text> + :D + </Text> + </Message> + <Message type="WARNING" filename="assertion_macros.cpp" line="0"> + <Text> + :D + </Text> + </Message> + <Message type="WARNING" filename="assertion_macros.cpp" line="0"> + <Text> + :D + </Text> + </Message> + <Message type="WARNING" filename="assertion_macros.cpp" line="0"> + <Text> + :D + </Text> + </Message> + <Message type="WARNING" filename="assertion_macros.cpp" line="0"> + <Text> + :D + </Text> + </Message> + <Message type="WARNING" filename="assertion_macros.cpp" line="0"> + <Text> + :D + </Text> + </Message> + <Message type="WARNING" filename="assertion_macros.cpp" line="0"> + <Text> + :D + </Text> + </Message> + <OverallResultsAsserts successes="11" failures="0" test_case_success="true"/> + </TestCase> + <TestCase name="check return values no print" filename="assertion_macros.cpp" line="0"> <Expression success="false" type="CHECK" filename="assertion_macros.cpp" line="0"> <Original> a == b @@ -575,10 +633,56 @@ </Expression> <Expression success="false" type="CHECK_THROWS" filename="assertion_macros.cpp" line="0"> <Original> - []{}() + [] { }() + </Original> + </Expression> + <Expression success="false" type="CHECK_THROWS_AS" filename="assertion_macros.cpp" line="0"> + <Original> + [] { throw 2; }() + </Original> + <Exception> + "2" + </Exception> + <ExpectedException> + doctest::Approx + </ExpectedException> + </Expression> + <Expression success="false" type="CHECK_NOTHROW" filename="assertion_macros.cpp" line="0"> + <Original> + [] { throw 2; }() + </Original> + <Exception> + "2" + </Exception> + </Expression> + <Expression success="false" type="CHECK_THROWS_WITH" filename="assertion_macros.cpp" line="0"> + <Original> + [] { throw 2; }() + </Original> + <Exception> + "2" + </Exception> + <ExpectedExceptionString> + 1 + </ExpectedExceptionString> + </Expression> + <Expression success="false" type="CHECK_NAN" filename="assertion_macros.cpp" line="0"> + <Original> + 0. + </Original> + <Expanded> + 0.0 + </Expanded> + </Expression> + <Expression success="false" type="CHECK_NOT_NAN" filename="assertion_macros.cpp" line="0"> + <Original> + std::numeric_limits<long double>::signaling_NaN() </Original> + <Expanded> + nan + </Expanded> </Expression> - <OverallResultsAsserts successes="0" failures="6" test_case_success="false"/> + <OverallResultsAsserts successes="0" failures="11" test_case_success="false"/> </TestCase> <TestCase name="nan" filename="assertion_macros.cpp" line="0"> <Expression success="false" type="CHECK_NAN" filename="assertion_macros.cpp" line="0"> @@ -600,7 +704,7 @@ <OverallResultsAsserts successes="3" failures="1" test_case_success="false"/> </TestCase> </TestSuite> - <OverallResultsAsserts successes="38" failures="46"/> - <OverallResultsTestCases successes="3" failures="20"/> + <OverallResultsAsserts successes="49" failures="51"/> + <OverallResultsTestCases successes="4" failures="20"/> </doctest> Program code. diff --git a/examples/all_features/test_output/disabled_but_evaluated.txt b/examples/all_features/test_output/disabled_but_evaluated.txt new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/examples/all_features/test_output/disabled_but_evaluated.txt diff --git a/examples/all_features/test_output/disabled_junit.txt b/examples/all_features/test_output/disabled_junit.txt deleted file mode 100644 index fd6c04e6..00000000 --- a/examples/all_features/test_output/disabled_junit.txt +++ /dev/null @@ -1 +0,0 @@ -Program code. diff --git a/examples/all_features/test_output/disabled_xml.txt b/examples/all_features/test_output/disabled_xml.txt deleted file mode 100644 index fd6c04e6..00000000 --- a/examples/all_features/test_output/disabled_xml.txt +++ /dev/null @@ -1 +0,0 @@ -Program code. diff --git a/examples/all_features/test_output/filter_2.txt b/examples/all_features/test_output/filter_2.txt index 662a7e29..86182761 100644 --- a/examples/all_features/test_output/filter_2.txt +++ b/examples/all_features/test_output/filter_2.txt @@ -1,6 +1,6 @@ [doctest] run with "--help" for options =============================================================================== -[doctest] test cases: 0 | 0 passed | 0 failed | 96 skipped +[doctest] test cases: 0 | 0 passed | 0 failed | 97 skipped [doctest] assertions: 0 | 0 passed | 0 failed | [doctest] Status: SUCCESS! Program code. diff --git a/examples/all_features/test_output/filter_2_xml.txt b/examples/all_features/test_output/filter_2_xml.txt index 57a62a05..bb6bd653 100644 --- a/examples/all_features/test_output/filter_2_xml.txt +++ b/examples/all_features/test_output/filter_2_xml.txt @@ -28,6 +28,8 @@ <TestCase name="all binary assertions" filename="assertion_macros.cpp" line="0" skipped="true"/> <TestCase name="an empty test that will succeed - not part of a test suite" filename="test_cases_and_suites.cpp" line="0" skipped="true"/> <TestCase name="bad stringification of type pair<int_pair>" filename="templated_test_cases.cpp" line="0" skipped="true"/> + <TestCase name="check return values" filename="assertion_macros.cpp" line="0" skipped="true"/> + <TestCase name="check return values no print" filename="assertion_macros.cpp" line="0" skipped="true"/> <TestCase name="custom macros" filename="alternative_macros.cpp" line="0" skipped="true"/> <TestCase name="default construction<char>" filename="templated_test_cases.cpp" line="0" skipped="true"/> <TestCase name="default construction<double>" filename="templated_test_cases.cpp" line="0" skipped="true"/> @@ -75,7 +77,6 @@ <TestSuite> <TestCase name="logging the counter of a loop" filename="logging.cpp" line="0" skipped="true"/> <TestCase name="lots of nested subcases" filename="subcases.cpp" line="0" skipped="true"/> - <TestCase name="macro return values" filename="assertion_macros.cpp" line="0" skipped="true"/> <TestCase name="multiple types<>" filename="templated_test_cases.cpp" line="0" skipped="true"/> <TestCase name="multiple types<>" filename="templated_test_cases.cpp" line="0" skipped="true"/> <TestCase name="multiple types<>" filename="templated_test_cases.cpp" line="0" skipped="true"/> @@ -136,6 +137,6 @@ <TestCase name="will end from an unknown exception" filename="coverage_maxout.cpp" line="0" skipped="true"/> </TestSuite> <OverallResultsAsserts successes="0" failures="0"/> - <OverallResultsTestCases successes="0" failures="0" skipped="96"/> + <OverallResultsTestCases successes="0" failures="0" skipped="97"/> </doctest> Program code. |