#include "UnitTest++/Config.h" #include "UnitTest++/UnitTestPP.h" #include "UnitTest++/ReportAssert.h" #include "UnitTest++/ReportAssertImpl.h" #include "UnitTest++/AssertException.h" #include "RecordingReporter.h" #include 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 }