1 /*
2 * Copyright (c) 2003, 2004
3 * Zdenek Nemec
4 *
5 * This material is provided "as is", with absolutely no warranty expressed
6 * or implied. Any use is at your own risk.
7 *
8 * Permission to use or copy this software for any purpose is hereby granted
9 * without fee, provided the above notices are retained on all copies.
10 * Permission to modify the code and to distribute modified code is granted,
11 * provided the above notices are retained, and a notice that the code was
12 * modified is included with the above copyright notice.
13 *
14 */
15
16 #include "cppunit_proxy.h"
17 #include "file_reporter.h"
18 #include "cppunit_timer.h"
19
20 #include "stdio.h"
21
22 #if 0
23 namespace CPPUNIT_NS
24 {
25 #endif
26 int TestCase::m_numErrors = 0;
27 int TestCase::m_numTests = 0;
28
29 TestCase *TestCase::m_root = 0;
30 Reporter *TestCase::m_reporter = 0;
31
registerTestCase(TestCase * in_testCase)32 void TestCase::registerTestCase(TestCase *in_testCase) {
33 in_testCase->m_next = m_root;
34 m_root = in_testCase;
35 }
36
run(Reporter * in_reporter,const char * in_testName,bool invert)37 int TestCase::run(Reporter *in_reporter, const char *in_testName, bool invert) {
38 TestCase::m_reporter = in_reporter;
39
40 m_numErrors = 0;
41 m_numTests = 0;
42
43 TestCase *tmp = m_root;
44 while (tmp != 0) {
45 tmp->myRun(in_testName, invert);
46 tmp = tmp->m_next;
47 }
48 return m_numErrors;
49 }
50 #if 0
51 }
52 #endif
53
usage(const char * name)54 static void usage(const char* name)
55 {
56 printf("Usage : %s [-t=<class>[::<test>]] [-x=<class>[::<test>]] [-f=<file>]%s\n",
57 name, Timer::supported() ? " [-m]": "");
58 printf("\t[-t=<class>[::<test>]] : test class or class::test to execute;\n");
59 printf("\t[-x=<class>[::<test>]] : test class or class::test to exclude from execution;\n");
60 printf("\t[-f=<file>] : output file");
61 if (Timer::supported())
62 printf(";\n\t[-m] : monitor test execution, display time duration for each test\n");
63 else
64 printf("\n");
65 }
66
main(int argc,char ** argv)67 int main(int argc, char** argv) {
68
69 // CppUnit(mini) test launcher
70 // command line option syntax:
71 // test [OPTIONS]
72 // where OPTIONS are
73 // -t=CLASS[::TEST] run the test class CLASS or member test CLASS::TEST
74 // -x=CLASS[::TEST] run all except the test class CLASS or member test CLASS::TEST
75 // -f=FILE save output in file FILE instead of stdout
76 // -m monitor test(s) execution
77 const char *fileName = 0;
78 const char *testName = "";
79 const char *xtestName = "";
80 bool doMonitoring = false;
81
82 for (int i = 1; i < argc; ++i) {
83 if (argv[i][0] == '-') {
84 if (!strncmp(argv[i], "-t=", 3)) {
85 testName = argv[i]+3;
86 continue;
87 }
88 else if (!strncmp(argv[i], "-f=", 3)) {
89 fileName = argv[i]+3;
90 continue;
91 }
92 else if (!strncmp(argv[i], "-x=", 3)) {
93 xtestName = argv[i]+3;
94 continue;
95 }
96 else if (Timer::supported() && !strncmp(argv[i], "-m", 2)) {
97 doMonitoring = true;
98 continue;
99 }
100 }
101
102 // invalid option, we display normal usage.
103 usage(argv[0]);
104 return 1;
105 }
106
107 CPPUNIT_NS::Reporter* reporter;
108 if (fileName != 0)
109 reporter = new FileReporter(fileName, doMonitoring);
110 else
111 reporter = new FileReporter(stdout, doMonitoring);
112
113 int num_errors;
114 if (xtestName[0] != 0) {
115 num_errors = CPPUNIT_NS::TestCase::run(reporter, xtestName, true);
116 } else {
117 num_errors = CPPUNIT_NS::TestCase::run(reporter, testName);
118 }
119
120 reporter->printSummary();
121 delete reporter;
122
123 return num_errors;
124 }
125
126 // See doc/README.intel for explanation about this code
127 #if defined (STLPORT) && defined (__ICL) && (__ICL >= 900) && \
128 (_STLP_MSVC_LIB < 1300) && defined (_STLP_USE_DYNAMIC_LIB)
129 # include <exception>
130
131 # undef std
132 namespace std
133 {
unexpected()134 void _STLP_CALL unexpected() {
135 unexpected_handler hdl;
136 set_unexpected(hdl = set_unexpected((unexpected_handler)0));
137 hdl();
138 }
139 }
140 #endif
141