1 #include <cppunit/TestListener.h>
2 #include <cppunit/BriefTestProgressListener.h>
3 #include <cppunit/CompilerOutputter.h>
4 #include <cppunit/extensions/TestFactoryRegistry.h>
5 #include <cppunit/TestResult.h>
6 #include <cppunit/TestResultCollector.h>
7 #include <cppunit/TestRunner.h>
8
9 class CoverageScannerListener : public CppUnit::TestListener
10 {
11 public:
12 void startTest( CppUnit::Test *test )
13 {
14 m_testFailed=false;
15 #ifdef __COVERAGESCANNER__
16 int pos;
17 // Adjusting the name of the test to display the tests
18 // in a tree view in CoverageBrowser
19 std::string testname = "CppUnit/" + test->getName();
20 while ( (pos=testname.find("::",0)) != std::string::npos )
21 testname.replace(pos,2,"/");
22
23 // Reset the code coverage data to get only the code coverage
24 // of the actual unit test.
25 __coveragescanner_clear();
26 __coveragescanner_testname(testname.c_str()) ;
27 #endif
28 }
29
30 void addFailure( const CppUnit::TestFailure &failure ) { m_testFailed=true; }
31
32 void endTest( CppUnit::Test *test )
33 {
34 #ifdef __COVERAGESCANNER__
35 // Recording the execution state in the coverage report
36 if (m_testFailed)
37 __coveragescanner_teststate("FAILED");
38 else
39 __coveragescanner_teststate("PASSED");
40
41 // Saving the code coverage report of the unit test
42 __coveragescanner_save();
43 __coveragescanner_testname("");
44 #endif
45 }
46
47 private:
48 bool m_testFailed;
49 // Prevents the use of the copy constructor and operator.
50 CoverageScannerListener( const CoverageScannerListener © );
51 void operator =( const CoverageScannerListener © );
52 };
53
54 int main( int argc, char* argv[] )
55 {
56 #ifdef __COVERAGESCANNER__
57 __coveragescanner_install(argv[0]);
58 #endif
59 // Create the event manager and test controller
60 CPPUNIT_NS::TestResult controller;
61
62 // Add a listener that colllects test result
63 CPPUNIT_NS::TestResultCollector result;
64 controller.addListener( &result );
65
66 // Add a listener that print dots as test run.
67 CPPUNIT_NS::BriefTestProgressListener progress;
68 controller.addListener( &progress );
69
70 // Add a listener that saves the code coverage information
71 CoverageScannerListener coveragescannerlistener;
72 controller.addListener( &coveragescannerlistener );
73
74 // Add the top suite to the test runner
75 CPPUNIT_NS::TestRunner runner;
76 runner.addTest( CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest() );
77 runner.run( controller );
78
79 return result.wasSuccessful() ? 0 : 1;
80 }