1 /***************************************************************************
2 * Copyright (C) 2004 by Intra2net AG *
5 ***************************************************************************/
12 #include <sys/timeb.h>
14 #include <cppunit/extensions/TestFactoryRegistry.h>
15 #include <cppunit/ui/text/TestRunner.h>
16 #include <cppunit/TestListener.h>
17 #include <cppunit/TestFailure.h>
18 #include <cppunit/TestResult.h>
19 #include <cppunit/CompilerOutputter.h>
21 class VerboseTimingListener : public CppUnit::TestListener
25 std::string resultstr;
31 return tb.time+(static_cast<float>(tb.millitm)/1000);
36 void startTest( CppUnit::Test *test )
39 std::cout << test->getName() << ": ";
40 start_time=get_time();
43 void endTest( CppUnit::Test *test )
45 double timediff=get_time()-start_time;
47 // fix clock unpreciseness for small timespans
48 if (timediff < 0) timediff=0;
50 std::cout << resultstr << " ("
51 << std::fixed << std::setprecision(3)
52 << timediff << " sec)" << std::endl;
55 void addFailure(const CppUnit::TestFailure &failure)
64 int main(int argc, char **argv)
66 CppUnit::TextTestRunner runner;
67 CppUnit::TestFactoryRegistry ®istry = CppUnit::TestFactoryRegistry::getRegistry();
69 // set output format that KDevelop can catch errors
70 CppUnit::CompilerOutputter *op=CppUnit::CompilerOutputter::defaultOutputter(&runner.result(),std::cout);
71 op->setLocationFormat("%p:%l: error: ");
72 runner.setOutputter(op);
74 // show every test with timing
75 VerboseTimingListener listener;
76 runner.eventManager().addListener(&listener);
78 runner.addTest(registry.makeTest());
80 // run all tests in registry (not using the default progress listener)
81 bool wasSucessful = runner.run("",false,true,false);
83 return (wasSucessful ? 0 : 1);