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