- #include "UnitTest++/Config.h" 
- #ifndef UNITTEST_NO_DEFERRED_REPORTER 
-   
- #include "UnitTest++/UnitTestPP.h" 
- #include "UnitTest++/XmlTestReporter.h" 
-   
- #include <sstream> 
-   
- using namespace UnitTest; 
- using std::ostringstream; 
-   
- namespace 
- { 
-   
- #ifndef UNITTEST_MEMORYOUTSTREAM_IS_STD_OSTRINGSTREAM 
-   
- // Overload to let MemoryOutStream accept std::string 
-    MemoryOutStream& operator<<(MemoryOutStream& s, const std::string& value) 
-    { 
-       s << value.c_str(); 
-       return s; 
-    } 
-   
- #endif 
-   
-    struct XmlTestReporterFixture 
-    { 
-       XmlTestReporterFixture() 
-          : reporter(output) 
-       {} 
-   
-       ostringstream output; 
-       XmlTestReporter reporter; 
-    }; 
-   
-    TEST_FIXTURE(XmlTestReporterFixture, MultipleCharactersAreEscaped) 
-    { 
-       TestDetails const details("TestName", "suite", "filename.h", 4321); 
-   
-       reporter.ReportTestStart(details); 
-       reporter.ReportFailure(details, "\"\"\'\'&&<<>>"); 
-       reporter.ReportTestFinish(details, 0.1f); 
-       reporter.ReportSummary(1, 2, 3, 0.1f); 
-   
-       char const* expected = 
-          "<?xml version=\"1.0\"?>" 
-          "<unittest-results tests=\"1\" failedtests=\"2\" failures=\"3\" time=\"0.1\">" 
-          "<test suite=\"suite\" name=\"TestName\" time=\"0.1\">" 
-          "<failure message=\"filename.h(4321) : " 
-          """''&&<<>>\"/>" 
-          "</test>" 
-          "</unittest-results>"; 
-   
-       CHECK_EQUAL(expected, output.str().c_str()); 
-    } 
-   
-    TEST_FIXTURE(XmlTestReporterFixture, OutputIsCachedUntilReportSummaryIsCalled) 
-    { 
-       TestDetails const details("", "", "", 0); 
-   
-       reporter.ReportTestStart(details); 
-       reporter.ReportFailure(details, "message"); 
-       reporter.ReportTestFinish(details, 1.0F); 
-       CHECK(output.str().empty()); 
-   
-       reporter.ReportSummary(1, 1, 1, 1.0f); 
-       CHECK(!output.str().empty()); 
-    } 
-   
-    TEST_FIXTURE(XmlTestReporterFixture, EmptyReportSummaryFormat) 
-    { 
-       reporter.ReportSummary(0, 0, 0, 0.1f); 
-   
-       const char *expected = 
-          "<?xml version=\"1.0\"?>" 
-          "<unittest-results tests=\"0\" failedtests=\"0\" failures=\"0\" time=\"0.1\">" 
-          "</unittest-results>"; 
-   
-       CHECK_EQUAL(expected, output.str().c_str()); 
-    } 
-   
-    TEST_FIXTURE(XmlTestReporterFixture, SingleSuccessfulTestReportSummaryFormat) 
-    { 
-       TestDetails const details("TestName", "DefaultSuite", "", 0); 
-   
-       reporter.ReportTestStart(details); 
-       reporter.ReportSummary(1, 0, 0, 0.1f); 
-   
-       const char *expected = 
-          "<?xml version=\"1.0\"?>" 
-          "<unittest-results tests=\"1\" failedtests=\"0\" failures=\"0\" time=\"0.1\">" 
-          "<test suite=\"DefaultSuite\" name=\"TestName\" time=\"0\"/>" 
-          "</unittest-results>"; 
-   
-       CHECK_EQUAL(expected, output.str().c_str()); 
-    } 
-   
-    TEST_FIXTURE(XmlTestReporterFixture, SingleFailedTestReportSummaryFormat) 
-    { 
-       TestDetails const details("A Test", "suite", "A File", 4321); 
-   
-       reporter.ReportTestStart(details); 
-       reporter.ReportFailure(details, "A Failure"); 
-       reporter.ReportSummary(1, 1, 1, 0.1f); 
-   
-       const char *expected = 
-          "<?xml version=\"1.0\"?>" 
-          "<unittest-results tests=\"1\" failedtests=\"1\" failures=\"1\" time=\"0.1\">" 
-          "<test suite=\"suite\" name=\"A Test\" time=\"0\">" 
-          "<failure message=\"A File(4321) : A Failure\"/>" 
-          "</test>" 
-          "</unittest-results>"; 
-   
-       CHECK_EQUAL(expected, output.str().c_str()); 
-    } 
-   
-    TEST_FIXTURE(XmlTestReporterFixture, FailureMessageIsXMLEscaped) 
-    { 
-       TestDetails const details("TestName", "suite", "filename.h", 4321); 
-   
-       reporter.ReportTestStart(details); 
-       reporter.ReportFailure(details, "\"\'&<>"); 
-       reporter.ReportTestFinish(details, 0.1f); 
-       reporter.ReportSummary(1, 1, 1, 0.1f); 
-   
-       char const* expected = 
-          "<?xml version=\"1.0\"?>" 
-          "<unittest-results tests=\"1\" failedtests=\"1\" failures=\"1\" time=\"0.1\">" 
-          "<test suite=\"suite\" name=\"TestName\" time=\"0.1\">" 
-          "<failure message=\"filename.h(4321) : "'&<>\"/>" 
-          "</test>" 
-          "</unittest-results>"; 
-   
-       CHECK_EQUAL(expected, output.str().c_str()); 
-    } 
-   
-    TEST_FIXTURE(XmlTestReporterFixture, OneFailureAndOneSuccess) 
-    { 
-       TestDetails const failedDetails("FailedTest", "suite", "fail.h", 1); 
-       reporter.ReportTestStart(failedDetails); 
-       reporter.ReportFailure(failedDetails, "expected 1 but was 2"); 
-       reporter.ReportTestFinish(failedDetails, 0.1f); 
-   
-       TestDetails const succeededDetails("SucceededTest", "suite", "", 0); 
-       reporter.ReportTestStart(succeededDetails); 
-       reporter.ReportTestFinish(succeededDetails, 1.0f); 
-       reporter.ReportSummary(2, 1, 1, 1.1f); 
-   
-       char const* expected = 
-          "<?xml version=\"1.0\"?>" 
-          "<unittest-results tests=\"2\" failedtests=\"1\" failures=\"1\" time=\"1.1\">" 
-          "<test suite=\"suite\" name=\"FailedTest\" time=\"0.1\">" 
-          "<failure message=\"fail.h(1) : expected 1 but was 2\"/>" 
-          "</test>" 
-          "<test suite=\"suite\" name=\"SucceededTest\" time=\"1\"/>" 
-          "</unittest-results>"; 
-   
-       CHECK_EQUAL(expected, output.str().c_str()); 
-    } 
-   
-    TEST_FIXTURE(XmlTestReporterFixture, MultipleFailures) 
-    { 
-       TestDetails const failedDetails1("FailedTest", "suite", "fail.h", 1); 
-       TestDetails const failedDetails2("FailedTest", "suite", "fail.h", 31); 
-   
-       reporter.ReportTestStart(failedDetails1); 
-       reporter.ReportFailure(failedDetails1, "expected 1 but was 2"); 
-       reporter.ReportFailure(failedDetails2, "expected one but was two"); 
-       reporter.ReportTestFinish(failedDetails1, 0.1f); 
-   
-       reporter.ReportSummary(1, 1, 2, 1.1f); 
-   
-       char const* expected = 
-          "<?xml version=\"1.0\"?>" 
-          "<unittest-results tests=\"1\" failedtests=\"1\" failures=\"2\" time=\"1.1\">" 
-          "<test suite=\"suite\" name=\"FailedTest\" time=\"0.1\">" 
-          "<failure message=\"fail.h(1) : expected 1 but was 2\"/>" 
-          "<failure message=\"fail.h(31) : expected one but was two\"/>" 
-          "</test>" 
-          "</unittest-results>"; 
-   
-       CHECK_EQUAL(expected, output.str().c_str()); 
-    } 
-   
- } 
-   
- #endif 
-