1 #include "UnitTest++/UnitTestPP.h"
2 #include "UnitTest++/CompositeTestReporter.h"
3 
4 using namespace UnitTest;
5 
6 namespace {
7 
8 TEST(ZeroReportersByDefault)
9 {
10 	CHECK_EQUAL(0, CompositeTestReporter().GetReporterCount());
11 }
12 
13 struct MockReporter : TestReporter
14 {
15 	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 
31 	virtual void ReportTestStart(TestDetails const& test)
32 	{
33 		testStartCalled = true;
34 		testStartDetails = &test;
35 	}
36 
37 	virtual void ReportFailure(TestDetails const& test, char const* failure)
38 	{
39 		failureCalled = true;
40 		failureDetails = &test;
41 		failureStr = failure;
42 	}
43 
44 	virtual void ReportTestFinish(TestDetails const& test, float secondsElapsed)
45 	{
46 		testFinishCalled = true;
47 		testFinishDetails = &test;
48 		testFinishSecondsElapsed = secondsElapsed;
49 	}
50 
51 	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 
81 TEST(AddReporter)
82 {
83 	MockReporter r;
84 	CompositeTestReporter c;
85 
86 	CHECK(c.AddReporter(&r));
87 	CHECK_EQUAL(1, c.GetReporterCount());
88 }
89 
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 {
102 	Fixture()
103 	{
104 		c.AddReporter(&r0);
105 		c.AddReporter(&r1);
106 	}
107 
108 	MockReporter r0, r1;
109 	CompositeTestReporter c;
110 };
111 
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 
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 
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 
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