| #include "ReportAssert.h" |
| #include "ReportAssertImpl.h" |
| #include "AssertException.h" |
| #include "CurrentTest.h" |
| #include "TestResults.h" |
| #include "TestDetails.h" |
| |
| #ifdef UNITTEST_NO_EXCEPTIONS |
| #include "ReportAssertImpl.h" |
| #endif |
| |
| namespace UnitTest { |
| |
| namespace |
| { |
| bool& AssertExpectedFlag() |
| { |
| static bool s_assertExpected = false; |
| return s_assertExpected; |
| } |
| } |
| |
| UNITTEST_LINKAGE void ReportAssert(char const* description, char const* filename, int lineNumber) |
| { |
| Detail::ReportAssertEx(CurrentTest::Results(), CurrentTest::Details(), |
| description, filename, lineNumber); |
| } |
| |
| namespace Detail { |
| |
| #ifdef UNITTEST_NO_EXCEPTIONS |
| UNITTEST_JMPBUF* GetAssertJmpBuf() |
| { |
| static UNITTEST_JMPBUF s_jmpBuf; |
| return &s_jmpBuf; |
| } |
| #endif |
| |
| UNITTEST_LINKAGE void ReportAssertEx(TestResults* testResults, |
| const TestDetails* testDetails, |
| char const* description, |
| char const* filename, |
| int lineNumber) |
| { |
| if (AssertExpectedFlag() == false) |
| { |
| TestDetails assertDetails(testDetails->testName, testDetails->suiteName, filename, lineNumber); |
| testResults->OnTestFailure(assertDetails, description); |
| } |
| |
| ExpectAssert(false); |
| |
| #ifndef UNITTEST_NO_EXCEPTIONS |
| throw AssertException(); |
| #else |
| UNITTEST_JUMP_TO_ASSERT_JUMP_TARGET(); |
| #endif |
| } |
| |
| UNITTEST_LINKAGE void ExpectAssert(bool expected) |
| { |
| AssertExpectedFlag() = expected; |
| } |
| |
| UNITTEST_LINKAGE bool AssertExpected() |
| { |
| return AssertExpectedFlag(); |
| } |
| |
| }} |