/* * Copyright (c) 2003, 2004 * Zdenek Nemec * * This material is provided "as is", with absolutely no warranty expressed * or implied. Any use is at your own risk. * * Permission to use or copy this software for any purpose is hereby granted * without fee, provided the above notices are retained on all copies. * Permission to modify the code and to distribute modified code is granted, * provided the above notices are retained, and a notice that the code was * modified is included with the above copyright notice. * */ #include "cppunit_proxy.h" #include "file_reporter.h" #include "cppunit_timer.h" #include "stdio.h" #if 0 namespace CPPUNIT_NS { #endif int TestCase::m_numErrors = 0; int TestCase::m_numTests = 0; TestCase *TestCase::m_root = 0; Reporter *TestCase::m_reporter = 0; void TestCase::registerTestCase(TestCase *in_testCase) { in_testCase->m_next = m_root; m_root = in_testCase; } int TestCase::run(Reporter *in_reporter, const char *in_testName, bool invert) { TestCase::m_reporter = in_reporter; m_numErrors = 0; m_numTests = 0; TestCase *tmp = m_root; while (tmp != 0) { tmp->myRun(in_testName, invert); tmp = tmp->m_next; } return m_numErrors; } #if 0 } #endif static void usage(const char* name) { printf("Usage : %s [-t=<class>[::<test>]] [-x=<class>[::<test>]] [-f=<file>]%s\n", name, Timer::supported() ? " [-m]": ""); printf("\t[-t=<class>[::<test>]] : test class or class::test to execute;\n"); printf("\t[-x=<class>[::<test>]] : test class or class::test to exclude from execution;\n"); printf("\t[-f=<file>] : output file"); if (Timer::supported()) printf(";\n\t[-m] : monitor test execution, display time duration for each test\n"); else printf("\n"); } int main(int argc, char** argv) { // CppUnit(mini) test launcher // command line option syntax: // test [OPTIONS] // where OPTIONS are // -t=CLASS[::TEST] run the test class CLASS or member test CLASS::TEST // -x=CLASS[::TEST] run all except the test class CLASS or member test CLASS::TEST // -f=FILE save output in file FILE instead of stdout // -m monitor test(s) execution const char *fileName = 0; const char *testName = ""; const char *xtestName = ""; bool doMonitoring = false; for (int i = 1; i < argc; ++i) { if (argv[i][0] == '-') { if (!strncmp(argv[i], "-t=", 3)) { testName = argv[i]+3; continue; } else if (!strncmp(argv[i], "-f=", 3)) { fileName = argv[i]+3; continue; } else if (!strncmp(argv[i], "-x=", 3)) { xtestName = argv[i]+3; continue; } else if (Timer::supported() && !strncmp(argv[i], "-m", 2)) { doMonitoring = true; continue; } } // invalid option, we display normal usage. usage(argv[0]); return 1; } CPPUNIT_NS::Reporter* reporter; if (fileName != 0) reporter = new FileReporter(fileName, doMonitoring); else reporter = new FileReporter(stdout, doMonitoring); int num_errors; if (xtestName[0] != 0) { num_errors = CPPUNIT_NS::TestCase::run(reporter, xtestName, true); } else { num_errors = CPPUNIT_NS::TestCase::run(reporter, testName); } reporter->printSummary(); delete reporter; return num_errors; } // See doc/README.intel for explanation about this code #if defined (STLPORT) && defined (__ICL) && (__ICL >= 900) && \ (_STLP_MSVC_LIB < 1300) && defined (_STLP_USE_DYNAMIC_LIB) # include <exception> # undef std namespace std { void _STLP_CALL unexpected() { unexpected_handler hdl; set_unexpected(hdl = set_unexpected((unexpected_handler)0)); hdl(); } } #endif