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