/[escript]/trunk/esys2/tools/CppUnitTest/src/TestRunner.cpp
ViewVC logotype

Contents of /trunk/esys2/tools/CppUnitTest/src/TestRunner.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 82 - (show annotations)
Tue Oct 26 06:53:54 2004 UTC (18 years, 5 months ago) by jgs
File size: 3215 byte(s)
Initial revision

1
2
3 /*
4 * A command line based tool to run tests.
5 * TestRunner expects as its only argument the name of a TestCase class.
6 * TestRunner prints out a trace as the tests are executed followed by a
7 * summary at the end.
8 *
9 * You can add to the tests that the TestRunner knows about by
10 * making additional calls to "addTest (...)" in main.
11 *
12 * Here is the synopsis:
13 *
14 * TestRunner [-wait] ExampleTestCase
15 *
16 */
17
18
19 #include <vector>
20
21 #include "CppUnitTest/TestRunner.h"
22 #include "CppUnitTest/TextTestResult.h"
23 #include "CppUnitTest/Test.h"
24
25 USING_NAMESPACE_CPPUNITTEST
26
27 void TestRunner::run (int ac, char **av)
28 {
29 std::string testCase;
30 int numberOfTests = 0;
31 std::vector<std::string> tCases;
32 std::vector<std::string> argList;
33 bool failuresOccurred=false;
34 //
35 // process the arguments
36 //
37 // suites to run are specified by suite=aaa,bbb,ccc
38 // more than one suite argument can be given
39 // no attempt is made to remove duplicates
40 //
41 std::string suiteKey = "suite=";
42 std::string suiteSep = ",";
43 for (int i = 0; i < ac; ++i) {
44 std::string testArg = av[i];
45 std::string::size_type loc = testArg.find(suiteKey);
46 if(i>0 && loc==0) {
47 testArg.erase(0,suiteKey.size());
48 while(testArg.size()>0) {
49 loc = testArg.find(suiteSep);
50 std::string suiteName;
51 if(loc==std::string::npos) {
52 suiteName = testArg;
53 testArg.erase();
54 }
55 else if(loc>0) {
56 suiteName = std::string(testArg,0,loc);
57 testArg.erase(0,loc+suiteSep.size());
58 }
59 else {
60 testArg.erase(0,suiteSep.size());
61 }
62 if(suiteName.size()>0) {
63 tCases.push_back(suiteName);
64 }
65 }
66 }
67 else {
68 argList.push_back(testArg);
69 }
70 }
71 mappings::iterator it;
72 Test *testToRun;
73 if (tCases.size()==0) {
74 //
75 // no particular cases have been selected so run all cases
76 for (it = m_mappings.begin (); it!=m_mappings.end(); ++it) {
77 std::cout << "Suite: " << (*it).first << std::endl;
78 testToRun = (*it).second;
79 testToRun->setArgs(argList);
80 run (testToRun);
81 if(testToRun->hasFailure()) {
82 failuresOccurred=true;
83 }
84 numberOfTests++;
85 }
86 } else {
87 std::vector<std::string>::const_iterator tci;
88 for (tci=tCases.begin(); tci!=tCases.end(); ++tci) {
89 testToRun=NULL;
90 for (it = m_mappings.begin();
91 it != m_mappings.end() && testToRun==NULL;
92 ++it) {
93 testCase=*tci;
94 if ((*it).first == (*tci)) {
95 std::cout << "Suite: " << (*it).first << std::endl;
96 testToRun = (*it).second;
97 testToRun->setArgs(argList);
98 run (testToRun);
99 if(testToRun->hasFailure()) {
100 failuresOccurred=true;
101 }
102 numberOfTests++;
103 }
104 }
105 if (!testToRun) {
106 std::cout << "Test " << testCase << " not found." << std::endl;
107 failuresOccurred=true;
108 }
109 }
110 }
111 if(failuresOccurred) {
112 exit(1);
113 }
114 }
115
116
117 TestRunner::~TestRunner ()
118 {
119 for (mappings::iterator it = m_mappings.begin ();
120 it != m_mappings.end ();
121 ++it)
122 delete it->second;
123
124 }
125
126
127 void TestRunner::run (Test *test)
128 {
129 TextTestResult result;
130
131 test->run (&result);
132
133 std::cout << result << std::endl;
134 }
135

Properties

Name Value
svn:eol-style native
svn:executable *
svn:keywords Author Date Id Revision

  ViewVC Help
Powered by ViewVC 1.1.26