- #include "UnitTest++/UnitTestPP.h" 
- #include "UnitTest++/CompositeTestReporter.h" 
-   
- using namespace UnitTest; 
-   
- namespace { 
-   
-    TEST(ZeroReportersByDefault) 
-    { 
-       CHECK_EQUAL(0, CompositeTestReporter().GetReporterCount()); 
-    } 
-   
-    struct MockReporter : TestReporter 
-    { 
-       MockReporter() 
-          : testStartCalled(false) 
-          , testStartDetails(NULL) 
-          , failureCalled(false) 
-          , failureDetails(NULL) 
-          , failureStr(NULL) 
-          , testFinishCalled(false) 
-          , testFinishDetails(NULL) 
-          , testFinishSecondsElapsed(-1.0f) 
-          , summaryCalled(false) 
-          , summaryTotalTestCount(-1) 
-          , summaryFailureCount(-1) 
-          , summarySecondsElapsed(-1.0f) 
-       {} 
-   
-       virtual void ReportTestStart(TestDetails const& test) 
-       { 
-          testStartCalled = true; 
-          testStartDetails = &test; 
-       } 
-   
-       virtual void ReportFailure(TestDetails const& test, char const* failure) 
-       { 
-          failureCalled = true; 
-          failureDetails = &test; 
-          failureStr = failure; 
-       } 
-   
-       virtual void ReportTestFinish(TestDetails const& test, float secondsElapsed) 
-       { 
-          testFinishCalled = true; 
-          testFinishDetails = &test; 
-          testFinishSecondsElapsed = secondsElapsed; 
-       } 
-   
-       virtual void ReportSummary(int totalTestCount, 
-                                  int failedTestCount, 
-                                  int failureCount, 
-                                  float secondsElapsed) 
-       { 
-          summaryCalled = true; 
-          summaryTotalTestCount = totalTestCount; 
-          summaryFailedTestCount = failedTestCount; 
-          summaryFailureCount = failureCount; 
-          summarySecondsElapsed = secondsElapsed; 
-       } 
-   
-       bool testStartCalled; 
-       TestDetails const* testStartDetails; 
-   
-       bool failureCalled; 
-       TestDetails const* failureDetails; 
-       const char* failureStr; 
-   
-       bool testFinishCalled; 
-       TestDetails const* testFinishDetails; 
-       float testFinishSecondsElapsed; 
-   
-       bool summaryCalled; 
-       int summaryTotalTestCount; 
-       int summaryFailedTestCount; 
-       int summaryFailureCount; 
-       float summarySecondsElapsed; 
-    }; 
-   
-    TEST(AddReporter) 
-    { 
-       MockReporter r; 
-       CompositeTestReporter c; 
-   
-       CHECK(c.AddReporter(&r)); 
-       CHECK_EQUAL(1, c.GetReporterCount()); 
-    } 
-   
-    TEST(RemoveReporter) 
-    { 
-       MockReporter r; 
-       CompositeTestReporter c; 
-   
-       c.AddReporter(&r); 
-       CHECK(c.RemoveReporter(&r)); 
-       CHECK_EQUAL(0, c.GetReporterCount()); 
-    } 
-   
-    struct Fixture 
-    { 
-       Fixture() 
-       { 
-          c.AddReporter(&r0); 
-          c.AddReporter(&r1); 
-       } 
-   
-       MockReporter r0, r1; 
-       CompositeTestReporter c; 
-    }; 
-   
-    TEST_FIXTURE(Fixture, ReportTestStartCallsReportTestStartOnAllAggregates) 
-    { 
-       TestDetails t("", "", "", 0); 
-       c.ReportTestStart(t); 
-   
-       CHECK(r0.testStartCalled); 
-       CHECK_EQUAL(&t, r0.testStartDetails); 
-       CHECK(r1.testStartCalled); 
-       CHECK_EQUAL(&t, r1.testStartDetails); 
-    } 
-   
-    TEST_FIXTURE(Fixture, ReportFailureCallsReportFailureOnAllAggregates) 
-    { 
-       TestDetails t("", "", "", 0); 
-       const char* failStr = "fail"; 
-       c.ReportFailure(t, failStr); 
-   
-       CHECK(r0.failureCalled); 
-       CHECK_EQUAL(&t, r0.failureDetails); 
-       CHECK_EQUAL(failStr, r0.failureStr); 
-   
-       CHECK(r1.failureCalled); 
-       CHECK_EQUAL(&t, r1.failureDetails); 
-       CHECK_EQUAL(failStr, r1.failureStr); 
-    } 
-   
-    TEST_FIXTURE(Fixture, ReportTestFinishCallsReportTestFinishOnAllAggregates) 
-    { 
-       TestDetails t("", "", "", 0); 
-       const float s = 1.2345f; 
-       c.ReportTestFinish(t, s); 
-   
-       CHECK(r0.testFinishCalled); 
-       CHECK_EQUAL(&t, r0.testFinishDetails); 
-       CHECK_CLOSE(s, r0.testFinishSecondsElapsed, 0.00001f); 
-   
-       CHECK(r1.testFinishCalled); 
-       CHECK_EQUAL(&t, r1.testFinishDetails); 
-       CHECK_CLOSE(s, r1.testFinishSecondsElapsed, 0.00001f); 
-    } 
-   
-    TEST_FIXTURE(Fixture, ReportSummaryCallsReportSummaryOnAllAggregates) 
-    { 
-       TestDetails t("", "", "", 0); 
-       const int testCount = 3; 
-       const int failedTestCount = 4; 
-       const int failureCount = 5; 
-       const float secondsElapsed = 3.14159f; 
-   
-       c.ReportSummary(testCount, failedTestCount, failureCount, secondsElapsed); 
-   
-       CHECK(r0.summaryCalled); 
-       CHECK_EQUAL(testCount, r0.summaryTotalTestCount); 
-       CHECK_EQUAL(failedTestCount, r0.summaryFailedTestCount); 
-       CHECK_EQUAL(failureCount, r0.summaryFailureCount); 
-       CHECK_CLOSE(secondsElapsed, r0.summarySecondsElapsed, 0.00001f); 
-   
-       CHECK(r1.summaryCalled); 
-       CHECK_EQUAL(testCount, r1.summaryTotalTestCount); 
-       CHECK_EQUAL(failedTestCount, r1.summaryFailedTestCount); 
-       CHECK_EQUAL(failureCount, r1.summaryFailureCount); 
-       CHECK_CLOSE(secondsElapsed, r1.summarySecondsElapsed, 0.00001f); 
-    } 
-   
- } 
-