1 #include "UnitTest++/Config.h"
2
3 #ifndef UNITTEST_NO_DEFERRED_REPORTER
4
5 #include "UnitTest++/UnitTestPP.h"
6 #include "UnitTest++/DeferredTestReporter.h"
7 #include <cstring>
8
9 namespace UnitTest
10 {
11
12 namespace
13 {
14
15 #ifndef UNITTEST_MEMORYOUTSTREAM_IS_STD_OSTRINGSTREAM
operator <<(MemoryOutStream & lhs,const std::string & rhs)16 MemoryOutStream& operator <<(MemoryOutStream& lhs, const std::string& rhs)
17 {
18 lhs << rhs.c_str();
19 return lhs;
20 }
21 #endif
22
23 struct MockDeferredTestReporter : public DeferredTestReporter
24 {
ReportSummaryUnitTest::__anon4e6c3fa20111::MockDeferredTestReporter25 virtual void ReportSummary(int, int, int, float)
26 {
27 }
28 };
29
30 struct DeferredTestReporterFixture
31 {
DeferredTestReporterFixtureUnitTest::__anon4e6c3fa20111::DeferredTestReporterFixture32 DeferredTestReporterFixture()
33 : testName("UniqueTestName")
34 , testSuite("UniqueTestSuite")
35 , fileName("filename.h")
36 , lineNumber(12)
37 , details(testName.c_str(), testSuite.c_str(), fileName.c_str(), lineNumber)
38 {
39 }
40
41 MockDeferredTestReporter reporter;
42 std::string const testName;
43 std::string const testSuite;
44 std::string const fileName;
45 int const lineNumber;
46 TestDetails const details;
47 };
48
TEST_FIXTURE(DeferredTestReporterFixture,ReportTestStartCreatesANewDeferredTest)49 TEST_FIXTURE(DeferredTestReporterFixture, ReportTestStartCreatesANewDeferredTest)
50 {
51 reporter.ReportTestStart(details);
52 CHECK_EQUAL(1, (int)reporter.GetResults().size());
53 }
54
TEST_FIXTURE(DeferredTestReporterFixture,ReportTestStartCapturesTestNameAndSuite)55 TEST_FIXTURE(DeferredTestReporterFixture, ReportTestStartCapturesTestNameAndSuite)
56 {
57 reporter.ReportTestStart(details);
58
59 DeferredTestResult const& result = reporter.GetResults().at(0);
60 CHECK_EQUAL(testName.c_str(), result.testName.c_str());
61 CHECK_EQUAL(testSuite.c_str(), result.suiteName.c_str());
62 }
63
TEST_FIXTURE(DeferredTestReporterFixture,ReportTestEndCapturesTestTime)64 TEST_FIXTURE(DeferredTestReporterFixture, ReportTestEndCapturesTestTime)
65 {
66 float const elapsed = 123.45f;
67 reporter.ReportTestStart(details);
68 reporter.ReportTestFinish(details, elapsed);
69
70 DeferredTestResult const& result = reporter.GetResults().at(0);
71 CHECK_CLOSE(elapsed, result.timeElapsed, 0.0001f);
72 }
73
TEST_FIXTURE(DeferredTestReporterFixture,ReportFailureSavesFailureDetails)74 TEST_FIXTURE(DeferredTestReporterFixture, ReportFailureSavesFailureDetails)
75 {
76 char const* failure = "failure";
77
78 reporter.ReportTestStart(details);
79 reporter.ReportFailure(details, failure);
80
81 DeferredTestResult const& result = reporter.GetResults().at(0);
82 CHECK(result.failed == true);
83 CHECK_EQUAL(fileName.c_str(), result.failureFile.c_str());
84 }
85
TEST_FIXTURE(DeferredTestReporterFixture,ReportFailureSavesFailureDetailsForMultipleFailures)86 TEST_FIXTURE(DeferredTestReporterFixture, ReportFailureSavesFailureDetailsForMultipleFailures)
87 {
88 char const* failure1 = "failure 1";
89 char const* failure2 = "failure 2";
90
91 reporter.ReportTestStart(details);
92 reporter.ReportFailure(details, failure1);
93 reporter.ReportFailure(details, failure2);
94
95 DeferredTestResult const& result = reporter.GetResults().at(0);
96 CHECK_EQUAL(2, (int)result.failures.size());
97 CHECK_EQUAL(failure1, result.failures[0].failureStr);
98 CHECK_EQUAL(failure2, result.failures[1].failureStr);
99 }
100
TEST_FIXTURE(DeferredTestReporterFixture,DeferredTestReporterTakesCopyOfFailureMessage)101 TEST_FIXTURE(DeferredTestReporterFixture, DeferredTestReporterTakesCopyOfFailureMessage)
102 {
103 reporter.ReportTestStart(details);
104
105 char failureMessage[128];
106 char const* goodStr = "Real failure message";
107 char const* badStr = "Bogus failure message";
108
109 using namespace std;
110
111 strcpy(failureMessage, goodStr);
112 reporter.ReportFailure(details, failureMessage);
113 strcpy(failureMessage, badStr);
114
115 DeferredTestResult const& result = reporter.GetResults().at(0);
116 DeferredTestFailure const& failure = result.failures.at(0);
117 CHECK_EQUAL(goodStr, failure.failureStr);
118 }
119
120 }}
121
122 #endif
123