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