mirror of
https://github.com/unittest-cpp/unittest-cpp
synced 2026-09-27 00:28:49 +03:00
Added all files from UnitTest++ v1.4
This commit is contained in:
commit
24216b2556
74 changed files with 6316 additions and 0 deletions
127
src/XmlTestReporter.cpp
Normal file
127
src/XmlTestReporter.cpp
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
#include "XmlTestReporter.h"
|
||||
#include "Config.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
using std::string;
|
||||
using std::ostringstream;
|
||||
using std::ostream;
|
||||
|
||||
namespace {
|
||||
|
||||
void ReplaceChar(string& str, char c, string const& replacement)
|
||||
{
|
||||
for (size_t pos = str.find(c); pos != string::npos; pos = str.find(c, pos + 1))
|
||||
str.replace(pos, 1, replacement);
|
||||
}
|
||||
|
||||
string XmlEscape(string const& value)
|
||||
{
|
||||
string escaped = value;
|
||||
|
||||
ReplaceChar(escaped, '&', "&");
|
||||
ReplaceChar(escaped, '<', "<");
|
||||
ReplaceChar(escaped, '>', ">");
|
||||
ReplaceChar(escaped, '\'', "'");
|
||||
ReplaceChar(escaped, '\"', """);
|
||||
|
||||
return escaped;
|
||||
}
|
||||
|
||||
string BuildFailureMessage(string const& file, int line, string const& message)
|
||||
{
|
||||
ostringstream failureMessage;
|
||||
failureMessage << file << "(" << line << ") : " << message;
|
||||
return failureMessage.str();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace UnitTest {
|
||||
|
||||
XmlTestReporter::XmlTestReporter(ostream& ostream)
|
||||
: m_ostream(ostream)
|
||||
{
|
||||
}
|
||||
|
||||
void XmlTestReporter::ReportSummary(int totalTestCount, int failedTestCount,
|
||||
int failureCount, float secondsElapsed)
|
||||
{
|
||||
AddXmlElement(m_ostream, NULL);
|
||||
|
||||
BeginResults(m_ostream, totalTestCount, failedTestCount, failureCount, secondsElapsed);
|
||||
|
||||
DeferredTestResultList const& results = GetResults();
|
||||
for (DeferredTestResultList::const_iterator i = results.begin(); i != results.end(); ++i)
|
||||
{
|
||||
BeginTest(m_ostream, *i);
|
||||
|
||||
if (i->failed)
|
||||
AddFailure(m_ostream, *i);
|
||||
|
||||
EndTest(m_ostream, *i);
|
||||
}
|
||||
|
||||
EndResults(m_ostream);
|
||||
}
|
||||
|
||||
void XmlTestReporter::AddXmlElement(ostream& os, char const* encoding)
|
||||
{
|
||||
os << "<?xml version=\"1.0\"";
|
||||
|
||||
if (encoding != NULL)
|
||||
os << " encoding=\"" << encoding << "\"";
|
||||
|
||||
os << "?>";
|
||||
}
|
||||
|
||||
void XmlTestReporter::BeginResults(std::ostream& os, int totalTestCount, int failedTestCount,
|
||||
int failureCount, float secondsElapsed)
|
||||
{
|
||||
os << "<unittest-results"
|
||||
<< " tests=\"" << totalTestCount << "\""
|
||||
<< " failedtests=\"" << failedTestCount << "\""
|
||||
<< " failures=\"" << failureCount << "\""
|
||||
<< " time=\"" << secondsElapsed << "\""
|
||||
<< ">";
|
||||
}
|
||||
|
||||
void XmlTestReporter::EndResults(std::ostream& os)
|
||||
{
|
||||
os << "</unittest-results>";
|
||||
}
|
||||
|
||||
void XmlTestReporter::BeginTest(std::ostream& os, DeferredTestResult const& result)
|
||||
{
|
||||
os << "<test"
|
||||
<< " suite=\"" << result.suiteName << "\""
|
||||
<< " name=\"" << result.testName << "\""
|
||||
<< " time=\"" << result.timeElapsed << "\"";
|
||||
}
|
||||
|
||||
void XmlTestReporter::EndTest(std::ostream& os, DeferredTestResult const& result)
|
||||
{
|
||||
if (result.failed)
|
||||
os << "</test>";
|
||||
else
|
||||
os << "/>";
|
||||
}
|
||||
|
||||
void XmlTestReporter::AddFailure(std::ostream& os, DeferredTestResult const& result)
|
||||
{
|
||||
os << ">"; // close <test> element
|
||||
|
||||
for (DeferredTestResult::FailureVec::const_iterator it = result.failures.begin();
|
||||
it != result.failures.end();
|
||||
++it)
|
||||
{
|
||||
string const escapedMessage = XmlEscape(it->second);
|
||||
string const message = BuildFailureMessage(result.failureFile, it->first, escapedMessage);
|
||||
|
||||
os << "<failure" << " message=\"" << message << "\"" << "/>";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue