| #include "UnitTest++/Config.h" |
| #include "UnitTest++/UnitTestPP.h" |
| |
| #include "UnitTest++/ReportAssert.h" |
| #include "UnitTest++/ReportAssertImpl.h" |
| #include "UnitTest++/AssertException.h" |
| |
| #include "RecordingReporter.h" |
| #include <csetjmp> |
| |
| using namespace UnitTest; |
| |
| namespace { |
| |
| TEST(CanSetAssertExpected) |
| { |
| Detail::ExpectAssert(true); |
| CHECK(Detail::AssertExpected()); |
| |
| Detail::ExpectAssert(false); |
| CHECK(!Detail::AssertExpected()); |
| } |
| |
| #ifndef UNITTEST_NO_EXCEPTIONS |
| |
| TEST(ReportAssertThrowsAssertException) |
| { |
| bool caught = false; |
| |
| try |
| { |
| TestResults testResults; |
| TestDetails testDetails("", "", "", 0); |
| Detail::ReportAssertEx(&testResults, &testDetails, "", "", 0); |
| } |
| catch(AssertException const&) |
| { |
| caught = true; |
| } |
| |
| CHECK(true == caught); |
| } |
| |
| TEST(ReportAssertClearsExpectAssertFlag) |
| { |
| RecordingReporter reporter; |
| TestResults testResults(&reporter); |
| TestDetails testDetails("", "", "", 0); |
| |
| try |
| { |
| Detail::ExpectAssert(true); |
| Detail::ReportAssertEx(&testResults, &testDetails, "", "", 0); |
| } |
| catch(AssertException const&) |
| { |
| } |
| |
| CHECK(Detail::AssertExpected() == false); |
| CHECK_EQUAL(0, reporter.testFailedCount); |
| } |
| |
| TEST(ReportAssertWritesFailureToResultsAndDetailsWhenAssertIsNotExpected) |
| { |
| const int lineNumber = 12345; |
| const char* description = "description"; |
| const char* filename = "filename"; |
| |
| RecordingReporter reporter; |
| TestResults testResults(&reporter); |
| TestDetails testDetails("", "", "", 0); |
| |
| try |
| { |
| Detail::ReportAssertEx(&testResults, &testDetails, description, filename, lineNumber); |
| } |
| catch(AssertException const&) |
| { |
| } |
| |
| CHECK_EQUAL(description, reporter.lastFailedMessage); |
| CHECK_EQUAL(filename, reporter.lastFailedFile); |
| CHECK_EQUAL(lineNumber, reporter.lastFailedLine); |
| } |
| |
| TEST(ReportAssertReportsNoErrorsWhenAssertIsExpected) |
| { |
| Detail::ExpectAssert(true); |
| |
| RecordingReporter reporter; |
| TestResults testResults(&reporter); |
| TestDetails testDetails("", "", "", 0); |
| |
| try |
| { |
| Detail::ReportAssertEx(&testResults, &testDetails, "", "", 0); |
| } |
| catch(AssertException const&) |
| { |
| } |
| |
| CHECK_EQUAL(0, reporter.testFailedCount); |
| } |
| |
| TEST(CheckAssertMacroSetsAssertExpectationToFalseAfterRunning) |
| { |
| Detail::ExpectAssert(true); |
| CHECK_ASSERT(ReportAssert("", "", 0)); |
| CHECK(!Detail::AssertExpected()); |
| Detail::ExpectAssert(false); |
| } |
| |
| #else |
| |
| TEST(SetAssertJumpTargetReturnsFalseWhenSettingJumpTarget) |
| { |
| CHECK(UNITTEST_SET_ASSERT_JUMP_TARGET() == false); |
| } |
| |
| TEST(JumpToAssertJumpTarget_JumpsToSetPoint_ReturnsTrue) |
| { |
| const volatile bool taken = !!UNITTEST_SET_ASSERT_JUMP_TARGET(); |
| |
| volatile bool set = false; |
| if (taken == false) |
| { |
| UNITTEST_JUMP_TO_ASSERT_JUMP_TARGET(); |
| set = true; |
| } |
| |
| CHECK(set == false); |
| } |
| |
| #endif |
| |
| } |