/[escript]/branches/ROBW_XPLATFORM/tools/CppUnitTest/src/TestRunner.cpp
ViewVC logotype

Annotation of /branches/ROBW_XPLATFORM/tools/CppUnitTest/src/TestRunner.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 155 - (hide annotations)
Wed Nov 9 02:02:19 2005 UTC (16 years ago) by jgs
Original Path: trunk/tools/CppUnitTest/src/TestRunner.cpp
File size: 3215 byte(s)
move all directories from trunk/esys2 into trunk and remove esys2

1 jgs 82
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