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