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