mirror of
https://github.com/jezhiggins/arabica
synced 2025-01-07 05:24:22 +01:00
146 lines
2.7 KiB
C++
146 lines
2.7 KiB
C++
|
|
|
|
/*
|
|
* A command line based tool to run tests.
|
|
* TestRunner expects as its only argument the name of a TestCase class.
|
|
* TestRunner prints out a trace as the tests are executed followed by a
|
|
* summary at the end.
|
|
*
|
|
* You can add to the tests that the TestRunner knows about by
|
|
* making additional calls to "addTest (...)" in main.
|
|
*
|
|
* Here is the synopsis:
|
|
*
|
|
* TestRunner [-wait] ExampleTestCase
|
|
*
|
|
*/
|
|
|
|
#include <iostream>
|
|
#include <vector>
|
|
|
|
#include "TextTestResult.h"
|
|
#include "../framework/Test.h"
|
|
//#include "ExampleTestCase.h"
|
|
|
|
|
|
using namespace std;
|
|
|
|
typedef pair<string, Test *> mapping;
|
|
typedef vector<pair<string, Test *> > mappings;
|
|
|
|
class TestRunner
|
|
{
|
|
protected:
|
|
bool m_wait;
|
|
vector<pair<string,Test *> > m_mappings;
|
|
|
|
public:
|
|
TestRunner () : m_wait (false) {}
|
|
~TestRunner ();
|
|
|
|
void run (int ac, char **av);
|
|
void addTest (string name, Test *test)
|
|
{ m_mappings.push_back (mapping (name, test)); }
|
|
|
|
protected:
|
|
void run (Test *test);
|
|
void printBanner ();
|
|
|
|
};
|
|
|
|
|
|
|
|
void TestRunner::printBanner ()
|
|
{
|
|
cout << "Usage: driver [ -wait ] testName, where name is the name of a test case class" << endl;
|
|
}
|
|
|
|
|
|
void TestRunner::run (int ac, char **av)
|
|
{
|
|
string testCase;
|
|
int numberOfTests = 0;
|
|
|
|
for (int i = 1; i < ac; i++) {
|
|
|
|
if (string (av [i]) == "-wait") {
|
|
m_wait = true;
|
|
continue;
|
|
}
|
|
|
|
testCase = av [i];
|
|
|
|
if (testCase == "") {
|
|
printBanner ();
|
|
return;
|
|
}
|
|
|
|
Test *testToRun = NULL;
|
|
|
|
for (mappings::iterator it = m_mappings.begin ();
|
|
it != m_mappings.end ();
|
|
++it) {
|
|
if ((*it).first == testCase) {
|
|
testToRun = (*it).second;
|
|
run (testToRun);
|
|
|
|
}
|
|
}
|
|
|
|
numberOfTests++;
|
|
|
|
if (!testToRun) {
|
|
cout << "Test " << testCase << " not found." << endl;
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
if (numberOfTests == 0) {
|
|
printBanner ();
|
|
return;
|
|
}
|
|
|
|
if (m_wait) {
|
|
cout << "<RETURN> to continue" << endl;
|
|
cin.get ();
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
TestRunner::~TestRunner ()
|
|
{
|
|
for (mappings::iterator it = m_mappings.begin ();
|
|
it != m_mappings.end ();
|
|
++it)
|
|
delete it->second;
|
|
|
|
}
|
|
|
|
|
|
void TestRunner::run (Test *test)
|
|
{
|
|
TextTestResult result;
|
|
|
|
test->run (&result);
|
|
|
|
cout << result << endl;
|
|
}
|
|
|
|
/*
|
|
int main (int ac, char **av)
|
|
{
|
|
TestRunner runner;
|
|
|
|
runner.addTest ("ExampleTestCase", ExampleTestCase::suite ());
|
|
runner.run (ac, av);
|
|
|
|
return 0;
|
|
}
|
|
|
|
*/
|