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