1 #include "UnitTest++/Config.h"
2 #include "UnitTest++/UnitTestPP.h"
3
4 #include "UnitTest++/ReportAssert.h"
5 #include "UnitTest++/ReportAssertImpl.h"
6 #include "UnitTest++/AssertException.h"
7
8 #include "RecordingReporter.h"
9 #include <csetjmp>
10
11 using namespace UnitTest;
12
13 namespace {
14
TEST(CanSetAssertExpected)15 TEST(CanSetAssertExpected)
16 {
17 Detail::ExpectAssert(true);
18 CHECK(Detail::AssertExpected());
19
20 Detail::ExpectAssert(false);
21 CHECK(!Detail::AssertExpected());
22 }
23
24 #ifndef UNITTEST_NO_EXCEPTIONS
25
TEST(ReportAssertThrowsAssertException)26 TEST(ReportAssertThrowsAssertException)
27 {
28 bool caught = false;
29
30 try
31 {
32 TestResults testResults;
33 TestDetails testDetails("", "", "", 0);
34 Detail::ReportAssertEx(&testResults, &testDetails, "", "", 0);
35 }
36 catch(AssertException const&)
37 {
38 caught = true;
39 }
40
41 CHECK(true == caught);
42 }
43
TEST(ReportAssertClearsExpectAssertFlag)44 TEST(ReportAssertClearsExpectAssertFlag)
45 {
46 RecordingReporter reporter;
47 TestResults testResults(&reporter);
48 TestDetails testDetails("", "", "", 0);
49
50 try
51 {
52 Detail::ExpectAssert(true);
53 Detail::ReportAssertEx(&testResults, &testDetails, "", "", 0);
54 }
55 catch(AssertException const&)
56 {
57 }
58
59 CHECK(Detail::AssertExpected() == false);
60 CHECK_EQUAL(0, reporter.testFailedCount);
61 }
62
TEST(ReportAssertWritesFailureToResultsAndDetailsWhenAssertIsNotExpected)63 TEST(ReportAssertWritesFailureToResultsAndDetailsWhenAssertIsNotExpected)
64 {
65 const int lineNumber = 12345;
66 const char* description = "description";
67 const char* filename = "filename";
68
69 RecordingReporter reporter;
70 TestResults testResults(&reporter);
71 TestDetails testDetails("", "", "", 0);
72
73 try
74 {
75 Detail::ReportAssertEx(&testResults, &testDetails, description, filename, lineNumber);
76 }
77 catch(AssertException const&)
78 {
79 }
80
81 CHECK_EQUAL(description, reporter.lastFailedMessage);
82 CHECK_EQUAL(filename, reporter.lastFailedFile);
83 CHECK_EQUAL(lineNumber, reporter.lastFailedLine);
84 }
85
TEST(ReportAssertReportsNoErrorsWhenAssertIsExpected)86 TEST(ReportAssertReportsNoErrorsWhenAssertIsExpected)
87 {
88 Detail::ExpectAssert(true);
89
90 RecordingReporter reporter;
91 TestResults testResults(&reporter);
92 TestDetails testDetails("", "", "", 0);
93
94 try
95 {
96 Detail::ReportAssertEx(&testResults, &testDetails, "", "", 0);
97 }
98 catch(AssertException const&)
99 {
100 }
101
102 CHECK_EQUAL(0, reporter.testFailedCount);
103 }
104
TEST(CheckAssertMacroSetsAssertExpectationToFalseAfterRunning)105 TEST(CheckAssertMacroSetsAssertExpectationToFalseAfterRunning)
106 {
107 Detail::ExpectAssert(true);
108 CHECK_ASSERT(ReportAssert("", "", 0));
109 CHECK(!Detail::AssertExpected());
110 Detail::ExpectAssert(false);
111 }
112
113 #else
114
TEST(SetAssertJumpTargetReturnsFalseWhenSettingJumpTarget)115 TEST(SetAssertJumpTargetReturnsFalseWhenSettingJumpTarget)
116 {
117 CHECK(UNITTEST_SET_ASSERT_JUMP_TARGET() == false);
118 }
119
TEST(JumpToAssertJumpTarget_JumpsToSetPoint_ReturnsTrue)120 TEST(JumpToAssertJumpTarget_JumpsToSetPoint_ReturnsTrue)
121 {
122 const volatile bool taken = !!UNITTEST_SET_ASSERT_JUMP_TARGET();
123
124 volatile bool set = false;
125 if (taken == false)
126 {
127 UNITTEST_JUMP_TO_ASSERT_JUMP_TARGET();
128 set = true;
129 }
130
131 CHECK(set == false);
132 }
133
134 #endif
135
136 }
137