source: git/libpolys/tests/cxxtest/TestRunner.h @ ba5e9e

spielwiese
Last change on this file since ba5e9e was 4aa8610, checked in by Mohamed Barakat <mohamed.barakat@…>, 13 years ago
created libpolys/tests and set up the beginning of a test-suite using cxxtest
  • Property mode set to 100644
File size: 3.2 KB
Line 
1#ifndef __cxxtest_TestRunner_h__
2#define __cxxtest_TestRunner_h__
3
4//
5// TestRunner is the class that runs all the tests.
6// To use it, create an object that implements the TestListener
7// interface and call TestRunner::runAllTests( myListener );
8//
9
10#include <cxxtest/TestListener.h>
11#include <cxxtest/RealDescriptions.h>
12#include <cxxtest/TestSuite.h>
13#include <cxxtest/TestTracker.h>
14
15namespace CxxTest
16{
17    class TestRunner
18    {
19    public:
20        static void runAllTests( TestListener &listener )
21        {
22            tracker().setListener( &listener );
23            _TS_TRY { TestRunner().runWorld(); }
24            _TS_LAST_CATCH( { tracker().failedTest( __FILE__, __LINE__, "Exception thrown from world" ); } );
25            tracker().setListener( 0 );
26        }
27
28        static void runAllTests( TestListener *listener )
29        {
30            if ( listener ) {
31                listener->warning( __FILE__, __LINE__, "Deprecated; Use runAllTests( TestListener & )" );
32                runAllTests( *listener );
33            }
34        }       
35   
36    private:
37        void runWorld()
38        {
39            RealWorldDescription wd;
40            WorldGuard sg;
41           
42            tracker().enterWorld( wd );
43            if ( wd.setUp() ) {
44                for ( SuiteDescription *sd = wd.firstSuite(); sd; sd = sd->next() )
45                    if ( sd->active() )
46                        runSuite( *sd );
47           
48                wd.tearDown();
49            }
50            tracker().leaveWorld( wd );
51        }
52   
53        void runSuite( SuiteDescription &sd )
54        {
55            StateGuard sg;
56           
57            tracker().enterSuite( sd );
58            if ( sd.setUp() ) {
59                for ( TestDescription *td = sd.firstTest(); td; td = td->next() )
60                    if ( td->active() )
61                        runTest( *td );
62
63                sd.tearDown();
64            }
65            tracker().leaveSuite( sd );
66        }
67
68        void runTest( TestDescription &td )
69        {
70            StateGuard sg;
71           
72            tracker().enterTest( td );
73            if ( td.setUp() ) {
74                td.run();
75                td.tearDown();
76            }
77            tracker().leaveTest( td );
78        }
79       
80        class StateGuard
81        {
82#ifdef _CXXTEST_HAVE_EH
83            bool _abortTestOnFail;
84#endif // _CXXTEST_HAVE_EH
85            unsigned _maxDumpSize;
86           
87        public:
88            StateGuard()
89            {
90#ifdef _CXXTEST_HAVE_EH
91                _abortTestOnFail = abortTestOnFail();
92#endif // _CXXTEST_HAVE_EH
93                _maxDumpSize = maxDumpSize();
94            }
95           
96            ~StateGuard()
97            {
98#ifdef _CXXTEST_HAVE_EH
99                setAbortTestOnFail( _abortTestOnFail );
100#endif // _CXXTEST_HAVE_EH
101                setMaxDumpSize( _maxDumpSize );
102            }
103        };
104
105        class WorldGuard : public StateGuard
106        {
107        public:
108            WorldGuard() : StateGuard()
109            {
110#ifdef _CXXTEST_HAVE_EH
111                setAbortTestOnFail( CXXTEST_DEFAULT_ABORT );
112#endif // _CXXTEST_HAVE_EH
113                setMaxDumpSize( CXXTEST_MAX_DUMP_SIZE );
114            }
115        };
116    };
117
118    //
119    // For --no-static-init
120    //
121    void initialize();
122};
123
124
125#endif // __cxxtest_TestRunner_h__
Note: See TracBrowser for help on using the repository browser.