#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); } }