88 lines
2.1 KiB
C++
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>";
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|