OpenSimMirror/libraries/ode-0.9/tests/CppTestHarness/HTMLTestReporter.cpp

88 lines
2.1 KiB
C++

#include "HTMLTestReporter.h"
#ifdef _MSC_VER
# pragma warning(disable:4996) // shut the secure crt stuff up, ctime is used correctly here.
#endif
#include <iostream>
#include <ctime>
#include <sstream>
namespace CppTestHarness
{
void HTMLTestReporter::ReportFailure(char const* file, int const line, std::string const failure)
{
std::stringstream msg;
msg << file << "(" << line << ") : " << failure;
m_failureMessages.push_back(msg.str());
}
void HTMLTestReporter::ReportSingleResult(const std::string& testName, bool failed)
{
ResultRecord r;
r.testName = testName;
r.failed = failed;
//get reported failures and clear temp list
r.failureMessages = m_failureMessages;
m_failureMessages.clear();
m_results.push_back(r);
}
void HTMLTestReporter::ReportSummary(int const testCount, int const failureCount)
{
std::ostream& os = std::cout;
//TODO: make all strings html safe
os << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">";
os << "<html>\n";
os << "<head>\n";
os << " <title>Test Report</title>\n";
os << "</head>\n";
os << "<body text=\"black\" bgcolor=\"white\">\n";
std::time_t currtime;
std::time(&currtime);
os << "<h1>Test Report: " << std::ctime(&currtime) << "</h1>\n";
os << "<p><em>";
os << testCount << " tests run.<br />\n";
os << failureCount << " failed.<br />\n";
os << "</em></p>";
os << "<table border=1 bgcolor=\"#dddddd\">";
//for each single test
for (ResultList::iterator i = m_results.begin(); i != m_results.end(); ++i)
{
os << "<tr>";
os << "<td><strong>" << i->testName << "</strong></td>";
if (i->failed)
os << "<td bgcolor=\"#ff0000\"><strong>FAILED</strong></td>";
else
os << "<td bgcolor=\"#00ee00\"><strong>PASSED</strong></td>";
os << "</tr><tr><td>";
if (i->failed) os << "<ul>";
for (MessageList::iterator j = i->failureMessages.begin(); j != i->failureMessages.end(); ++j)
{
os << "<li><code>"<< *j << "</code></li>\n";
}
if (i->failed) os << "</ul>";
os << "</td></tr>";
}
os << "</table>";
os << "</body>";
os << "</html>";
}
}