mirror of
https://github.com/holub/mame
synced 2025-05-07 23:02:33 +03:00
189 lines
5.7 KiB
C++
189 lines
5.7 KiB
C++
#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
|