1*2f083884Ss.makeev_local #include "UnitTest++/Config.h"
2*2f083884Ss.makeev_local #ifndef UNITTEST_NO_DEFERRED_REPORTER
3*2f083884Ss.makeev_local
4*2f083884Ss.makeev_local #include "UnitTest++/UnitTestPP.h"
5*2f083884Ss.makeev_local #include "UnitTest++/XmlTestReporter.h"
6*2f083884Ss.makeev_local
7*2f083884Ss.makeev_local #include <sstream>
8*2f083884Ss.makeev_local
9*2f083884Ss.makeev_local using namespace UnitTest;
10*2f083884Ss.makeev_local using std::ostringstream;
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
16*2f083884Ss.makeev_local
17*2f083884Ss.makeev_local // Overload to let MemoryOutStream accept std::string
operator <<(MemoryOutStream & s,const std::string & value)18*2f083884Ss.makeev_local MemoryOutStream& operator<<(MemoryOutStream& s, const std::string& value)
19*2f083884Ss.makeev_local {
20*2f083884Ss.makeev_local s << value.c_str();
21*2f083884Ss.makeev_local return s;
22*2f083884Ss.makeev_local }
23*2f083884Ss.makeev_local
24*2f083884Ss.makeev_local #endif
25*2f083884Ss.makeev_local
26*2f083884Ss.makeev_local struct XmlTestReporterFixture
27*2f083884Ss.makeev_local {
XmlTestReporterFixture__anon23abe5d20111::XmlTestReporterFixture28*2f083884Ss.makeev_local XmlTestReporterFixture()
29*2f083884Ss.makeev_local : reporter(output)
30*2f083884Ss.makeev_local {
31*2f083884Ss.makeev_local }
32*2f083884Ss.makeev_local
33*2f083884Ss.makeev_local ostringstream output;
34*2f083884Ss.makeev_local XmlTestReporter reporter;
35*2f083884Ss.makeev_local };
36*2f083884Ss.makeev_local
TEST_FIXTURE(XmlTestReporterFixture,MultipleCharactersAreEscaped)37*2f083884Ss.makeev_local TEST_FIXTURE(XmlTestReporterFixture, MultipleCharactersAreEscaped)
38*2f083884Ss.makeev_local {
39*2f083884Ss.makeev_local TestDetails const details("TestName", "suite", "filename.h", 4321);
40*2f083884Ss.makeev_local
41*2f083884Ss.makeev_local reporter.ReportTestStart(details);
42*2f083884Ss.makeev_local reporter.ReportFailure(details, "\"\"\'\'&&<<>>");
43*2f083884Ss.makeev_local reporter.ReportTestFinish(details, 0.1f);
44*2f083884Ss.makeev_local reporter.ReportSummary(1, 2, 3, 0.1f);
45*2f083884Ss.makeev_local
46*2f083884Ss.makeev_local char const* expected =
47*2f083884Ss.makeev_local "<?xml version=\"1.0\"?>"
48*2f083884Ss.makeev_local "<unittest-results tests=\"1\" failedtests=\"2\" failures=\"3\" time=\"0.1\">"
49*2f083884Ss.makeev_local "<test suite=\"suite\" name=\"TestName\" time=\"0.1\">"
50*2f083884Ss.makeev_local "<failure message=\"filename.h(4321) : "
51*2f083884Ss.makeev_local """''&&<<>>\"/>"
52*2f083884Ss.makeev_local "</test>"
53*2f083884Ss.makeev_local "</unittest-results>";
54*2f083884Ss.makeev_local
55*2f083884Ss.makeev_local CHECK_EQUAL(expected, output.str().c_str());
56*2f083884Ss.makeev_local }
57*2f083884Ss.makeev_local
TEST_FIXTURE(XmlTestReporterFixture,OutputIsCachedUntilReportSummaryIsCalled)58*2f083884Ss.makeev_local TEST_FIXTURE(XmlTestReporterFixture, OutputIsCachedUntilReportSummaryIsCalled)
59*2f083884Ss.makeev_local {
60*2f083884Ss.makeev_local TestDetails const details("", "", "", 0);
61*2f083884Ss.makeev_local
62*2f083884Ss.makeev_local reporter.ReportTestStart(details);
63*2f083884Ss.makeev_local reporter.ReportFailure(details, "message");
64*2f083884Ss.makeev_local reporter.ReportTestFinish(details, 1.0F);
65*2f083884Ss.makeev_local CHECK(output.str().empty());
66*2f083884Ss.makeev_local
67*2f083884Ss.makeev_local reporter.ReportSummary(1, 1, 1, 1.0f);
68*2f083884Ss.makeev_local CHECK(!output.str().empty());
69*2f083884Ss.makeev_local }
70*2f083884Ss.makeev_local
TEST_FIXTURE(XmlTestReporterFixture,EmptyReportSummaryFormat)71*2f083884Ss.makeev_local TEST_FIXTURE(XmlTestReporterFixture, EmptyReportSummaryFormat)
72*2f083884Ss.makeev_local {
73*2f083884Ss.makeev_local reporter.ReportSummary(0, 0, 0, 0.1f);
74*2f083884Ss.makeev_local
75*2f083884Ss.makeev_local const char *expected =
76*2f083884Ss.makeev_local "<?xml version=\"1.0\"?>"
77*2f083884Ss.makeev_local "<unittest-results tests=\"0\" failedtests=\"0\" failures=\"0\" time=\"0.1\">"
78*2f083884Ss.makeev_local "</unittest-results>";
79*2f083884Ss.makeev_local
80*2f083884Ss.makeev_local CHECK_EQUAL(expected, output.str().c_str());
81*2f083884Ss.makeev_local }
82*2f083884Ss.makeev_local
TEST_FIXTURE(XmlTestReporterFixture,SingleSuccessfulTestReportSummaryFormat)83*2f083884Ss.makeev_local TEST_FIXTURE(XmlTestReporterFixture, SingleSuccessfulTestReportSummaryFormat)
84*2f083884Ss.makeev_local {
85*2f083884Ss.makeev_local TestDetails const details("TestName", "DefaultSuite", "", 0);
86*2f083884Ss.makeev_local
87*2f083884Ss.makeev_local reporter.ReportTestStart(details);
88*2f083884Ss.makeev_local reporter.ReportSummary(1, 0, 0, 0.1f);
89*2f083884Ss.makeev_local
90*2f083884Ss.makeev_local const char *expected =
91*2f083884Ss.makeev_local "<?xml version=\"1.0\"?>"
92*2f083884Ss.makeev_local "<unittest-results tests=\"1\" failedtests=\"0\" failures=\"0\" time=\"0.1\">"
93*2f083884Ss.makeev_local "<test suite=\"DefaultSuite\" name=\"TestName\" time=\"0\"/>"
94*2f083884Ss.makeev_local "</unittest-results>";
95*2f083884Ss.makeev_local
96*2f083884Ss.makeev_local CHECK_EQUAL(expected, output.str().c_str());
97*2f083884Ss.makeev_local }
98*2f083884Ss.makeev_local
TEST_FIXTURE(XmlTestReporterFixture,SingleFailedTestReportSummaryFormat)99*2f083884Ss.makeev_local TEST_FIXTURE(XmlTestReporterFixture, SingleFailedTestReportSummaryFormat)
100*2f083884Ss.makeev_local {
101*2f083884Ss.makeev_local TestDetails const details("A Test", "suite", "A File", 4321);
102*2f083884Ss.makeev_local
103*2f083884Ss.makeev_local reporter.ReportTestStart(details);
104*2f083884Ss.makeev_local reporter.ReportFailure(details, "A Failure");
105*2f083884Ss.makeev_local reporter.ReportSummary(1, 1, 1, 0.1f);
106*2f083884Ss.makeev_local
107*2f083884Ss.makeev_local const char *expected =
108*2f083884Ss.makeev_local "<?xml version=\"1.0\"?>"
109*2f083884Ss.makeev_local "<unittest-results tests=\"1\" failedtests=\"1\" failures=\"1\" time=\"0.1\">"
110*2f083884Ss.makeev_local "<test suite=\"suite\" name=\"A Test\" time=\"0\">"
111*2f083884Ss.makeev_local "<failure message=\"A File(4321) : A Failure\"/>"
112*2f083884Ss.makeev_local "</test>"
113*2f083884Ss.makeev_local "</unittest-results>";
114*2f083884Ss.makeev_local
115*2f083884Ss.makeev_local CHECK_EQUAL(expected, output.str().c_str());
116*2f083884Ss.makeev_local }
117*2f083884Ss.makeev_local
TEST_FIXTURE(XmlTestReporterFixture,FailureMessageIsXMLEscaped)118*2f083884Ss.makeev_local TEST_FIXTURE(XmlTestReporterFixture, FailureMessageIsXMLEscaped)
119*2f083884Ss.makeev_local {
120*2f083884Ss.makeev_local TestDetails const details("TestName", "suite", "filename.h", 4321);
121*2f083884Ss.makeev_local
122*2f083884Ss.makeev_local reporter.ReportTestStart(details);
123*2f083884Ss.makeev_local reporter.ReportFailure(details, "\"\'&<>");
124*2f083884Ss.makeev_local reporter.ReportTestFinish(details, 0.1f);
125*2f083884Ss.makeev_local reporter.ReportSummary(1, 1, 1, 0.1f);
126*2f083884Ss.makeev_local
127*2f083884Ss.makeev_local char const* expected =
128*2f083884Ss.makeev_local "<?xml version=\"1.0\"?>"
129*2f083884Ss.makeev_local "<unittest-results tests=\"1\" failedtests=\"1\" failures=\"1\" time=\"0.1\">"
130*2f083884Ss.makeev_local "<test suite=\"suite\" name=\"TestName\" time=\"0.1\">"
131*2f083884Ss.makeev_local "<failure message=\"filename.h(4321) : "'&<>\"/>"
132*2f083884Ss.makeev_local "</test>"
133*2f083884Ss.makeev_local "</unittest-results>";
134*2f083884Ss.makeev_local
135*2f083884Ss.makeev_local CHECK_EQUAL(expected, output.str().c_str());
136*2f083884Ss.makeev_local }
137*2f083884Ss.makeev_local
TEST_FIXTURE(XmlTestReporterFixture,OneFailureAndOneSuccess)138*2f083884Ss.makeev_local TEST_FIXTURE(XmlTestReporterFixture, OneFailureAndOneSuccess)
139*2f083884Ss.makeev_local {
140*2f083884Ss.makeev_local TestDetails const failedDetails("FailedTest", "suite", "fail.h", 1);
141*2f083884Ss.makeev_local reporter.ReportTestStart(failedDetails);
142*2f083884Ss.makeev_local reporter.ReportFailure(failedDetails, "expected 1 but was 2");
143*2f083884Ss.makeev_local reporter.ReportTestFinish(failedDetails, 0.1f);
144*2f083884Ss.makeev_local
145*2f083884Ss.makeev_local TestDetails const succeededDetails("SucceededTest", "suite", "", 0);
146*2f083884Ss.makeev_local reporter.ReportTestStart(succeededDetails);
147*2f083884Ss.makeev_local reporter.ReportTestFinish(succeededDetails, 1.0f);
148*2f083884Ss.makeev_local reporter.ReportSummary(2, 1, 1, 1.1f);
149*2f083884Ss.makeev_local
150*2f083884Ss.makeev_local char const* expected =
151*2f083884Ss.makeev_local "<?xml version=\"1.0\"?>"
152*2f083884Ss.makeev_local "<unittest-results tests=\"2\" failedtests=\"1\" failures=\"1\" time=\"1.1\">"
153*2f083884Ss.makeev_local "<test suite=\"suite\" name=\"FailedTest\" time=\"0.1\">"
154*2f083884Ss.makeev_local "<failure message=\"fail.h(1) : expected 1 but was 2\"/>"
155*2f083884Ss.makeev_local "</test>"
156*2f083884Ss.makeev_local "<test suite=\"suite\" name=\"SucceededTest\" time=\"1\"/>"
157*2f083884Ss.makeev_local "</unittest-results>";
158*2f083884Ss.makeev_local
159*2f083884Ss.makeev_local CHECK_EQUAL(expected, output.str().c_str());
160*2f083884Ss.makeev_local }
161*2f083884Ss.makeev_local
TEST_FIXTURE(XmlTestReporterFixture,MultipleFailures)162*2f083884Ss.makeev_local TEST_FIXTURE(XmlTestReporterFixture, MultipleFailures)
163*2f083884Ss.makeev_local {
164*2f083884Ss.makeev_local TestDetails const failedDetails1("FailedTest", "suite", "fail.h", 1);
165*2f083884Ss.makeev_local TestDetails const failedDetails2("FailedTest", "suite", "fail.h", 31);
166*2f083884Ss.makeev_local
167*2f083884Ss.makeev_local reporter.ReportTestStart(failedDetails1);
168*2f083884Ss.makeev_local reporter.ReportFailure(failedDetails1, "expected 1 but was 2");
169*2f083884Ss.makeev_local reporter.ReportFailure(failedDetails2, "expected one but was two");
170*2f083884Ss.makeev_local reporter.ReportTestFinish(failedDetails1, 0.1f);
171*2f083884Ss.makeev_local
172*2f083884Ss.makeev_local reporter.ReportSummary(1, 1, 2, 1.1f);
173*2f083884Ss.makeev_local
174*2f083884Ss.makeev_local char const* expected =
175*2f083884Ss.makeev_local "<?xml version=\"1.0\"?>"
176*2f083884Ss.makeev_local "<unittest-results tests=\"1\" failedtests=\"1\" failures=\"2\" time=\"1.1\">"
177*2f083884Ss.makeev_local "<test suite=\"suite\" name=\"FailedTest\" time=\"0.1\">"
178*2f083884Ss.makeev_local "<failure message=\"fail.h(1) : expected 1 but was 2\"/>"
179*2f083884Ss.makeev_local "<failure message=\"fail.h(31) : expected one but was two\"/>"
180*2f083884Ss.makeev_local "</test>"
181*2f083884Ss.makeev_local "</unittest-results>";
182*2f083884Ss.makeev_local
183*2f083884Ss.makeev_local CHECK_EQUAL(expected, output.str().c_str());
184*2f083884Ss.makeev_local }
185*2f083884Ss.makeev_local
186*2f083884Ss.makeev_local }
187*2f083884Ss.makeev_local
188*2f083884Ss.makeev_local #endif
189