1 #include "UnitTest++/UnitTestPP.h"
2 #include "UnitTest++/CompositeTestReporter.h"
3
4 using namespace UnitTest;
5
6 namespace {
7
TEST(ZeroReportersByDefault)8 TEST(ZeroReportersByDefault)
9 {
10 CHECK_EQUAL(0, CompositeTestReporter().GetReporterCount());
11 }
12
13 struct MockReporter : TestReporter
14 {
MockReporter__anon961a29b40111::MockReporter15 MockReporter()
16 : testStartCalled(false)
17 , testStartDetails(NULL)
18 , failureCalled(false)
19 , failureDetails(NULL)
20 , failureStr(NULL)
21 , testFinishCalled(false)
22 , testFinishDetails(NULL)
23 , testFinishSecondsElapsed(-1.0f)
24 , summaryCalled(false)
25 , summaryTotalTestCount(-1)
26 , summaryFailureCount(-1)
27 , summarySecondsElapsed(-1.0f)
28 {
29 }
30
ReportTestStart__anon961a29b40111::MockReporter31 virtual void ReportTestStart(TestDetails const& test)
32 {
33 testStartCalled = true;
34 testStartDetails = &test;
35 }
36
ReportFailure__anon961a29b40111::MockReporter37 virtual void ReportFailure(TestDetails const& test, char const* failure)
38 {
39 failureCalled = true;
40 failureDetails = &test;
41 failureStr = failure;
42 }
43
ReportTestFinish__anon961a29b40111::MockReporter44 virtual void ReportTestFinish(TestDetails const& test, float secondsElapsed)
45 {
46 testFinishCalled = true;
47 testFinishDetails = &test;
48 testFinishSecondsElapsed = secondsElapsed;
49 }
50
ReportSummary__anon961a29b40111::MockReporter51 virtual void ReportSummary(int totalTestCount,
52 int failedTestCount,
53 int failureCount,
54 float secondsElapsed)
55 {
56 summaryCalled = true;
57 summaryTotalTestCount = totalTestCount;
58 summaryFailedTestCount = failedTestCount;
59 summaryFailureCount = failureCount;
60 summarySecondsElapsed = secondsElapsed;
61 }
62
63 bool testStartCalled;
64 TestDetails const* testStartDetails;
65
66 bool failureCalled;
67 TestDetails const* failureDetails;
68 const char* failureStr;
69
70 bool testFinishCalled;
71 TestDetails const* testFinishDetails;
72 float testFinishSecondsElapsed;
73
74 bool summaryCalled;
75 int summaryTotalTestCount;
76 int summaryFailedTestCount;
77 int summaryFailureCount;
78 float summarySecondsElapsed;
79 };
80
TEST(AddReporter)81 TEST(AddReporter)
82 {
83 MockReporter r;
84 CompositeTestReporter c;
85
86 CHECK(c.AddReporter(&r));
87 CHECK_EQUAL(1, c.GetReporterCount());
88 }
89
TEST(RemoveReporter)90 TEST(RemoveReporter)
91 {
92 MockReporter r;
93 CompositeTestReporter c;
94
95 c.AddReporter(&r);
96 CHECK(c.RemoveReporter(&r));
97 CHECK_EQUAL(0, c.GetReporterCount());
98 }
99
100 struct Fixture
101 {
Fixture__anon961a29b40111::Fixture102 Fixture()
103 {
104 c.AddReporter(&r0);
105 c.AddReporter(&r1);
106 }
107
108 MockReporter r0, r1;
109 CompositeTestReporter c;
110 };
111
TEST_FIXTURE(Fixture,ReportTestStartCallsReportTestStartOnAllAggregates)112 TEST_FIXTURE(Fixture, ReportTestStartCallsReportTestStartOnAllAggregates)
113 {
114 TestDetails t("", "", "", 0);
115 c.ReportTestStart(t);
116
117 CHECK(r0.testStartCalled);
118 CHECK_EQUAL(&t, r0.testStartDetails);
119 CHECK(r1.testStartCalled);
120 CHECK_EQUAL(&t, r1.testStartDetails);
121 }
122
TEST_FIXTURE(Fixture,ReportFailureCallsReportFailureOnAllAggregates)123 TEST_FIXTURE(Fixture, ReportFailureCallsReportFailureOnAllAggregates)
124 {
125 TestDetails t("", "", "", 0);
126 const char* failStr = "fail";
127 c.ReportFailure(t, failStr);
128
129 CHECK(r0.failureCalled);
130 CHECK_EQUAL(&t, r0.failureDetails);
131 CHECK_EQUAL(failStr, r0.failureStr);
132
133 CHECK(r1.failureCalled);
134 CHECK_EQUAL(&t, r1.failureDetails);
135 CHECK_EQUAL(failStr, r1.failureStr);
136 }
137
TEST_FIXTURE(Fixture,ReportTestFinishCallsReportTestFinishOnAllAggregates)138 TEST_FIXTURE(Fixture, ReportTestFinishCallsReportTestFinishOnAllAggregates)
139 {
140 TestDetails t("", "", "", 0);
141 const float s = 1.2345f;
142 c.ReportTestFinish(t, s);
143
144 CHECK(r0.testFinishCalled);
145 CHECK_EQUAL(&t, r0.testFinishDetails);
146 CHECK_CLOSE(s, r0.testFinishSecondsElapsed, 0.00001f);
147
148 CHECK(r1.testFinishCalled);
149 CHECK_EQUAL(&t, r1.testFinishDetails);
150 CHECK_CLOSE(s, r1.testFinishSecondsElapsed, 0.00001f);
151 }
152
TEST_FIXTURE(Fixture,ReportSummaryCallsReportSummaryOnAllAggregates)153 TEST_FIXTURE(Fixture, ReportSummaryCallsReportSummaryOnAllAggregates)
154 {
155 TestDetails t("", "", "", 0);
156 const int testCount = 3;
157 const int failedTestCount = 4;
158 const int failureCount = 5;
159 const float secondsElapsed = 3.14159f;
160
161 c.ReportSummary(testCount, failedTestCount, failureCount, secondsElapsed);
162
163 CHECK(r0.summaryCalled);
164 CHECK_EQUAL(testCount, r0.summaryTotalTestCount);
165 CHECK_EQUAL(failedTestCount, r0.summaryFailedTestCount);
166 CHECK_EQUAL(failureCount, r0.summaryFailureCount);
167 CHECK_CLOSE(secondsElapsed, r0.summarySecondsElapsed, 0.00001f);
168
169 CHECK(r1.summaryCalled);
170 CHECK_EQUAL(testCount, r1.summaryTotalTestCount);
171 CHECK_EQUAL(failedTestCount, r1.summaryFailedTestCount);
172 CHECK_EQUAL(failureCount, r1.summaryFailureCount);
173 CHECK_CLOSE(secondsElapsed, r1.summarySecondsElapsed, 0.00001f);
174 }
175
176 }
177