source: git/libpolys/tests/cxxtest/RealDescriptions.cpp @ 2f0314

fieker-DuValspielwiese
Last change on this file since 2f0314 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: 10.4 KB
Line 
1#ifndef __cxxtest__RealDescriptions_cpp__
2#define __cxxtest__RealDescriptions_cpp__
3
4//
5// NOTE: If an error occur during world construction/deletion, CxxTest cannot
6//       know where the error originated.
7//
8
9#include <cxxtest/RealDescriptions.h>
10
11namespace CxxTest
12{
13    RealTestDescription::RealTestDescription()
14    {
15    }
16       
17    RealTestDescription::RealTestDescription( List &argList,
18                                              SuiteDescription &argSuite,
19                                              unsigned argLine,
20                                              const char *argTestName )
21    {
22        initialize( argList, argSuite, argLine, argTestName );
23    }
24
25    void RealTestDescription::initialize( List &argList,
26                                          SuiteDescription &argSuite,
27                                          unsigned argLine,
28                                          const char *argTestName )
29    {
30        _suite = &argSuite;
31        _line = argLine;
32        _testName = argTestName;
33        attach( argList );
34    }
35       
36    bool RealTestDescription::setUp()
37    {
38        if ( !suite() )
39            return false;
40
41        for ( GlobalFixture *gf = GlobalFixture::firstGlobalFixture(); gf != 0; gf = gf->nextGlobalFixture() ) {
42            bool ok;
43            _TS_TRY { ok = gf->setUp(); }
44            _TS_LAST_CATCH( { ok = false; } );
45
46            if ( !ok ) {
47                doFailTest( file(), line(), "Error in GlobalFixture::setUp()" );
48                return false;
49            }
50        }
51
52        _TS_TRY {
53            _TSM_ASSERT_THROWS_NOTHING( file(), line(), "Exception thrown from setUp()", suite()->setUp() );
54        }
55        _TS_CATCH_ABORT( { return false; } );
56
57        return true;
58    }
59
60    bool RealTestDescription::tearDown()
61    {
62        if ( !suite() )
63            return false;
64
65        _TS_TRY {
66            _TSM_ASSERT_THROWS_NOTHING( file(), line(), "Exception thrown from tearDown()", suite()->tearDown() );
67        }
68        _TS_CATCH_ABORT( { return false; } );
69
70        for ( GlobalFixture *gf = GlobalFixture::lastGlobalFixture(); gf != 0; gf = gf->prevGlobalFixture() ) {
71            bool ok;
72            _TS_TRY { ok = gf->tearDown(); }
73            _TS_LAST_CATCH( { ok = false; } );
74
75            if ( !ok ) {
76                doFailTest( file(), line(), "Error in GlobalFixture::tearDown()" );
77                return false;
78            }
79        }
80
81        return true;
82    }
83
84    const char *RealTestDescription::file() const { return _suite->file(); }
85    unsigned RealTestDescription::line() const { return _line; }
86    const char *RealTestDescription::testName() const { return _testName; }
87    const char *RealTestDescription::suiteName() const { return _suite->suiteName(); }
88
89    TestDescription *RealTestDescription::next() { return (RealTestDescription *)Link::next(); }
90    const TestDescription *RealTestDescription::next() const { return (const RealTestDescription *)Link::next(); }
91
92    TestSuite *RealTestDescription::suite() const { return _suite->suite(); }
93
94    void RealTestDescription::run()
95    {
96        _TS_TRY { runTest(); }
97        _TS_CATCH_ABORT( {} )
98            ___TSM_CATCH( file(), line(), "Exception thrown from test" );
99    }
100       
101    RealSuiteDescription::RealSuiteDescription() {}
102    RealSuiteDescription::RealSuiteDescription( const char *argFile,
103                                                unsigned argLine,
104                                                const char *argSuiteName,
105                                                List &argTests )
106    {
107        initialize( argFile, argLine, argSuiteName, argTests );
108    }
109
110    void RealSuiteDescription::initialize( const char *argFile,
111                                           unsigned argLine,
112                                           const char *argSuiteName,
113                                           List &argTests )
114    {
115        _file = argFile;
116        _line = argLine;
117        _suiteName = argSuiteName;
118        _tests = &argTests;
119           
120        attach( _suites );
121    }
122
123    const char *RealSuiteDescription::file() const { return _file; }
124    unsigned RealSuiteDescription::line() const { return _line; }
125    const char *RealSuiteDescription::suiteName() const { return _suiteName; }
126
127    TestDescription *RealSuiteDescription::firstTest() { return (RealTestDescription *)_tests->head(); }
128    const TestDescription *RealSuiteDescription::firstTest() const { return (const RealTestDescription *)_tests->head(); }
129    SuiteDescription *RealSuiteDescription::next() { return (RealSuiteDescription *)Link::next(); }
130    const SuiteDescription *RealSuiteDescription::next() const { return (const RealSuiteDescription *)Link::next(); }
131       
132    unsigned RealSuiteDescription::numTests() const { return _tests->size(); }
133   
134    const TestDescription &RealSuiteDescription::testDescription( unsigned i ) const
135    {
136        return *(RealTestDescription *)_tests->nth( i );
137    }
138
139    void RealSuiteDescription::activateAllTests()
140    {
141        _tests->activateAll();
142    }
143       
144    bool RealSuiteDescription::leaveOnly( const char *testName )
145    {
146        for ( TestDescription *td = firstTest(); td != 0; td = td->next() ) {
147            if ( stringsEqual( td->testName(), testName ) ) {
148                _tests->leaveOnly( *td );
149                return true;
150            }
151        }
152        return false;       
153    }
154       
155    StaticSuiteDescription::StaticSuiteDescription() {}
156    StaticSuiteDescription::StaticSuiteDescription( const char *argFile, unsigned argLine,
157                                                    const char *argSuiteName, TestSuite &argSuite,
158                                                    List &argTests ) :
159        RealSuiteDescription( argFile, argLine, argSuiteName, argTests )
160    {
161        doInitialize( argSuite );
162    }
163
164    void StaticSuiteDescription::initialize( const char *argFile, unsigned argLine,
165                                             const char *argSuiteName, TestSuite &argSuite,
166                                             List &argTests )
167    {
168        RealSuiteDescription::initialize( argFile, argLine, argSuiteName, argTests );
169        doInitialize( argSuite );
170    }
171       
172    void StaticSuiteDescription::doInitialize( TestSuite &argSuite )
173    {
174        _suite = &argSuite;
175    }
176
177    TestSuite *StaticSuiteDescription::suite() const
178    {
179        return _suite;
180    }
181
182    bool StaticSuiteDescription::setUp() { return true; }
183    bool StaticSuiteDescription::tearDown() { return true; }
184
185    CommonDynamicSuiteDescription::CommonDynamicSuiteDescription() {}
186    CommonDynamicSuiteDescription::CommonDynamicSuiteDescription( const char *argFile, unsigned argLine,
187                                                                  const char *argSuiteName, List &argTests,
188                                                                  unsigned argCreateLine, unsigned argDestroyLine ) :
189        RealSuiteDescription( argFile, argLine, argSuiteName, argTests )
190    {
191        doInitialize( argCreateLine, argDestroyLine );
192    }
193
194    void CommonDynamicSuiteDescription::initialize( const char *argFile, unsigned argLine,
195                                                    const char *argSuiteName, List &argTests,
196                                                    unsigned argCreateLine, unsigned argDestroyLine )
197    {
198        RealSuiteDescription::initialize( argFile, argLine, argSuiteName, argTests );
199        doInitialize( argCreateLine, argDestroyLine );
200    }
201
202    void CommonDynamicSuiteDescription::doInitialize( unsigned argCreateLine, unsigned argDestroyLine )
203    {
204        _createLine = argCreateLine;
205        _destroyLine = argDestroyLine;
206    }
207       
208    List &RealWorldDescription::suites()
209    {
210        return RealSuiteDescription::_suites;
211    }
212       
213    unsigned RealWorldDescription::numSuites( void ) const
214    {
215        return suites().size();
216    }
217       
218    unsigned RealWorldDescription::numTotalTests( void ) const
219    {
220        unsigned count = 0;
221        for ( const SuiteDescription *sd = firstSuite(); sd != 0; sd = sd->next() )
222            count += sd->numTests();
223        return count;
224    }
225       
226    SuiteDescription *RealWorldDescription::firstSuite()
227    {
228        return (RealSuiteDescription *)suites().head();
229    }
230
231    const SuiteDescription *RealWorldDescription::firstSuite() const
232    {
233        return (const RealSuiteDescription *)suites().head();
234    }
235
236    const SuiteDescription &RealWorldDescription::suiteDescription( unsigned i ) const
237    {
238        return *(const RealSuiteDescription *)suites().nth( i );
239    }
240
241    void RealWorldDescription::activateAllTests()
242    {
243        suites().activateAll();
244        for ( SuiteDescription *sd = firstSuite(); sd != 0; sd = sd->next() )
245            sd->activateAllTests();
246    }
247
248    bool RealWorldDescription::leaveOnly( const char *suiteName, const char *testName )
249    {
250        for ( SuiteDescription *sd = firstSuite(); sd != 0; sd = sd->next() ) {
251            if ( stringsEqual( sd->suiteName(), suiteName ) ) {
252                if ( testName )
253                    if ( !sd->leaveOnly( testName ) )
254                        return false;
255                suites().leaveOnly( *sd );
256                return true;
257            }
258        }
259        return false;
260    }
261       
262    bool RealWorldDescription::setUp()
263    {
264        for ( GlobalFixture *gf = GlobalFixture::firstGlobalFixture(); gf != 0; gf = gf->nextGlobalFixture() ) {
265            bool ok;
266            _TS_TRY { ok = gf->setUpWorld(); }
267            _TS_LAST_CATCH( { ok = false; } );
268
269            if ( !ok ) {
270                reportError( "Error setting up world" );
271                return false;
272            }
273        }
274
275        return true;
276    }
277
278    bool RealWorldDescription::tearDown()
279    {
280        for ( GlobalFixture *gf = GlobalFixture::lastGlobalFixture(); gf != 0; gf = gf->prevGlobalFixture() ) {
281            bool ok;
282            _TS_TRY { ok = gf->tearDownWorld(); }
283            _TS_LAST_CATCH( { ok = false; } );
284
285            if ( !ok ) {
286                reportError( "Error tearing down world" );
287                return false;
288            }
289        }
290
291        return true;
292    }
293
294    void RealWorldDescription::reportError( const char *message )
295    {
296        doWarn( __FILE__, 5, message );
297    }
298
299    void activateAllTests()
300    {
301        RealWorldDescription().activateAllTests();
302    }
303
304    bool leaveOnly( const char *suiteName, const char *testName )
305    {
306        return RealWorldDescription().leaveOnly( suiteName, testName );
307    }
308}
309
310#endif // __cxxtest__RealDescriptions_cpp__
311
Note: See TracBrowser for help on using the repository browser.