1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
#ifndef __cxxtest__TestTracker_h__
#define __cxxtest__TestTracker_h__
//
// The TestTracker tracks running tests
// The actual work is done in CountingListenerProxy,
// but this way avoids cyclic references TestListener<->CountingListenerProxy
//
#include <cxxtest/TestListener.h>
#include <cxxtest/DummyDescriptions.h>
namespace CxxTest
{
class TestListener;
class TestTracker : public TestListener
{
public:
virtual ~TestTracker();
static TestTracker &tracker();
const TestDescription *fixTest( const TestDescription *d ) const;
const SuiteDescription *fixSuite( const SuiteDescription *d ) const;
const WorldDescription *fixWorld( const WorldDescription *d ) const;
const TestDescription &test() const { return *_test; }
const SuiteDescription &suite() const { return *_suite; }
const WorldDescription &world() const { return *_world; }
bool testFailed() const { return (testFailedAsserts() > 0); }
bool suiteFailed() const { return (suiteFailedTests() > 0); }
bool worldFailed() const { return (failedSuites() > 0); }
unsigned warnings() const { return _warnings; }
unsigned failedTests() const { return _failedTests; }
unsigned testFailedAsserts() const { return _testFailedAsserts; }
unsigned suiteFailedTests() const { return _suiteFailedTests; }
unsigned failedSuites() const { return _failedSuites; }
void enterWorld( const WorldDescription &wd );
void enterSuite( const SuiteDescription &sd );
void enterTest( const TestDescription &td );
void leaveTest( const TestDescription &td );
void leaveSuite( const SuiteDescription &sd );
void leaveWorld( const WorldDescription &wd );
void trace( const char *file, unsigned line, const char *expression );
void warning( const char *file, unsigned line, const char *expression );
void failedTest( const char *file, unsigned line, const char *expression );
void failedAssert( const char *file, unsigned line, const char *expression );
void failedAssertEquals( const char *file, unsigned line,
const char *xStr, const char *yStr,
const char *x, const char *y );
void failedAssertSameData( const char *file, unsigned line,
const char *xStr, const char *yStr,
const char *sizeStr, const void *x,
const void *y, unsigned size );
void failedAssertDelta( const char *file, unsigned line,
const char *xStr, const char *yStr, const char *dStr,
const char *x, const char *y, const char *d );
void failedAssertDiffers( const char *file, unsigned line,
const char *xStr, const char *yStr,
const char *value );
void failedAssertLessThan( const char *file, unsigned line,
const char *xStr, const char *yStr,
const char *x, const char *y );
void failedAssertLessThanEquals( const char *file, unsigned line,
const char *xStr, const char *yStr,
const char *x, const char *y );
void failedAssertPredicate( const char *file, unsigned line,
const char *predicate, const char *xStr, const char *x );
void failedAssertRelation( const char *file, unsigned line,
const char *relation, const char *xStr, const char *yStr,
const char *x, const char *y );
void failedAssertThrows( const char *file, unsigned line,
const char *expression, const char *type,
bool otherThrown );
void failedAssertThrowsNot( const char *file, unsigned line, const char *expression );
private:
TestTracker( const TestTracker & );
TestTracker &operator=( const TestTracker & );
static bool _created;
TestListener _dummyListener;
DummyWorldDescription _dummyWorld;
unsigned _warnings, _failedTests, _testFailedAsserts, _suiteFailedTests, _failedSuites;
TestListener *_l;
const WorldDescription *_world;
const SuiteDescription *_suite;
const TestDescription *_test;
const TestDescription &dummyTest() const;
const SuiteDescription &dummySuite() const;
const WorldDescription &dummyWorld() const;
void setWorld( const WorldDescription *w );
void setSuite( const SuiteDescription *s );
void setTest( const TestDescription *t );
void countWarning();
void countFailure();
friend class TestRunner;
TestTracker();
void initialize();
void setListener( TestListener *l );
};
inline TestTracker &tracker() { return TestTracker::tracker(); }
};
#endif // __cxxtest__TestTracker_h__
|