1 #ifndef __cxxtest__TestTracker_cpp__ 2 #define __cxxtest__TestTracker_cpp__ 3 4 #include <cxxtest/TestTracker.h> 5 6 namespace CxxTest 7 { 8 bool TestTracker::_created = false; 9 TestTracker()10 TestTracker::TestTracker() 11 { 12 if ( !_created ) { 13 initialize(); 14 _created = true; 15 } 16 } 17 ~TestTracker()18 TestTracker::~TestTracker() 19 { 20 } 21 tracker()22 TestTracker & TestTracker::tracker() 23 { 24 STATIC_INST_VAR TestTracker theTracker; 25 return theTracker; 26 } 27 initialize()28 void TestTracker::initialize() 29 { 30 _warnings = 0; 31 _failedTests = 0; 32 _testFailedAsserts = 0; 33 _suiteFailedTests = 0; 34 _failedSuites = 0; 35 setListener( 0 ); 36 _world = 0; 37 _suite = 0; 38 _test = 0; 39 } 40 fixTest(const TestDescription * d) const41 const TestDescription *TestTracker::fixTest( const TestDescription *d ) const 42 { 43 return d ? d : &dummyTest(); 44 } 45 fixSuite(const SuiteDescription * d) const46 const SuiteDescription *TestTracker::fixSuite( const SuiteDescription *d ) const 47 { 48 return d ? d : &dummySuite(); 49 } 50 fixWorld(const WorldDescription * d) const51 const WorldDescription *TestTracker::fixWorld( const WorldDescription *d ) const 52 { 53 return d ? d : &dummyWorld(); 54 } 55 dummyTest() const56 const TestDescription &TestTracker::dummyTest() const 57 { 58 return dummySuite().testDescription(0); 59 } 60 dummySuite() const61 const SuiteDescription &TestTracker::dummySuite() const 62 { 63 return dummyWorld().suiteDescription(0); 64 } 65 dummyWorld() const66 const WorldDescription &TestTracker::dummyWorld() const 67 { 68 return _dummyWorld; 69 } 70 setListener(TestListener * l)71 void TestTracker::setListener( TestListener *l ) 72 { 73 _l = l ? l : &_dummyListener; 74 } 75 enterWorld(const WorldDescription & wd)76 void TestTracker::enterWorld( const WorldDescription &wd ) 77 { 78 setWorld( &wd ); 79 _warnings = _failedTests = _testFailedAsserts = _suiteFailedTests = _failedSuites = 0; 80 _l->enterWorld( wd ); 81 } 82 enterSuite(const SuiteDescription & sd)83 void TestTracker::enterSuite( const SuiteDescription &sd ) 84 { 85 setSuite( &sd ); 86 _testFailedAsserts = _suiteFailedTests = 0; 87 _l->enterSuite(sd); 88 } 89 enterTest(const TestDescription & td)90 void TestTracker::enterTest( const TestDescription &td ) 91 { 92 setTest( &td ); 93 _testFailedAsserts = false; 94 _l->enterTest(td); 95 } 96 leaveTest(const TestDescription & td)97 void TestTracker::leaveTest( const TestDescription &td ) 98 { 99 _l->leaveTest( td ); 100 setTest( 0 ); 101 } 102 leaveSuite(const SuiteDescription & sd)103 void TestTracker::leaveSuite( const SuiteDescription &sd ) 104 { 105 _l->leaveSuite( sd ); 106 setSuite( 0 ); 107 } 108 leaveWorld(const WorldDescription & wd)109 void TestTracker::leaveWorld( const WorldDescription &wd ) 110 { 111 _l->leaveWorld( wd ); 112 setWorld( 0 ); 113 } 114 trace(const char * file,unsigned line,const char * expression)115 void TestTracker::trace( const char *file, unsigned line, const char *expression ) 116 { 117 _l->trace( file, line, expression ); 118 } 119 warning(const char * file,unsigned line,const char * expression)120 void TestTracker::warning( const char *file, unsigned line, const char *expression ) 121 { 122 countWarning(); 123 _l->warning( file, line, expression ); 124 } 125 failedTest(const char * file,unsigned line,const char * expression)126 void TestTracker::failedTest( const char *file, unsigned line, const char *expression ) 127 { 128 countFailure(); 129 _l->failedTest( file, line, expression ); 130 } 131 failedAssert(const char * file,unsigned line,const char * expression)132 void TestTracker::failedAssert( const char *file, unsigned line, const char *expression ) 133 { 134 countFailure(); 135 _l->failedAssert( file, line, expression ); 136 } 137 failedAssertEquals(const char * file,unsigned line,const char * xStr,const char * yStr,const char * x,const char * y)138 void TestTracker::failedAssertEquals( const char *file, unsigned line, 139 const char *xStr, const char *yStr, 140 const char *x, const char *y ) 141 { 142 countFailure(); 143 _l->failedAssertEquals( file, line, xStr, yStr, x, y ); 144 } 145 failedAssertSameData(const char * file,unsigned line,const char * xStr,const char * yStr,const char * sizeStr,const void * x,const void * y,unsigned size)146 void TestTracker::failedAssertSameData( const char *file, unsigned line, 147 const char *xStr, const char *yStr, 148 const char *sizeStr, const void *x, 149 const void *y, unsigned size ) 150 { 151 countFailure(); 152 _l->failedAssertSameData( file, line, xStr, yStr, sizeStr, x, y, size ); 153 } 154 failedAssertDelta(const char * file,unsigned line,const char * xStr,const char * yStr,const char * dStr,const char * x,const char * y,const char * d)155 void TestTracker::failedAssertDelta( const char *file, unsigned line, 156 const char *xStr, const char *yStr, const char *dStr, 157 const char *x, const char *y, const char *d ) 158 { 159 countFailure(); 160 _l->failedAssertDelta( file, line, xStr, yStr, dStr, x, y, d ); 161 } 162 failedAssertDiffers(const char * file,unsigned line,const char * xStr,const char * yStr,const char * value)163 void TestTracker::failedAssertDiffers( const char *file, unsigned line, 164 const char *xStr, const char *yStr, 165 const char *value ) 166 { 167 countFailure(); 168 _l->failedAssertDiffers( file, line, xStr, yStr, value ); 169 } 170 failedAssertLessThan(const char * file,unsigned line,const char * xStr,const char * yStr,const char * x,const char * y)171 void TestTracker::failedAssertLessThan( const char *file, unsigned line, 172 const char *xStr, const char *yStr, 173 const char *x, const char *y ) 174 { 175 countFailure(); 176 _l->failedAssertLessThan( file, line, xStr, yStr, x, y ); 177 } 178 failedAssertLessThanEquals(const char * file,unsigned line,const char * xStr,const char * yStr,const char * x,const char * y)179 void TestTracker::failedAssertLessThanEquals( const char *file, unsigned line, 180 const char *xStr, const char *yStr, 181 const char *x, const char *y ) 182 { 183 countFailure(); 184 _l->failedAssertLessThanEquals( file, line, xStr, yStr, x, y ); 185 } 186 failedAssertPredicate(const char * file,unsigned line,const char * predicate,const char * xStr,const char * x)187 void TestTracker::failedAssertPredicate( const char *file, unsigned line, 188 const char *predicate, const char *xStr, const char *x ) 189 { 190 countFailure(); 191 _l->failedAssertPredicate( file, line, predicate, xStr, x ); 192 } 193 failedAssertRelation(const char * file,unsigned line,const char * relation,const char * xStr,const char * yStr,const char * x,const char * y)194 void TestTracker::failedAssertRelation( const char *file, unsigned line, 195 const char *relation, const char *xStr, const char *yStr, 196 const char *x, const char *y ) 197 { 198 countFailure(); 199 _l->failedAssertRelation( file, line, relation, xStr, yStr, x, y ); 200 } 201 failedAssertThrows(const char * file,unsigned line,const char * expression,const char * type,bool otherThrown)202 void TestTracker::failedAssertThrows( const char *file, unsigned line, 203 const char *expression, const char *type, 204 bool otherThrown ) 205 { 206 countFailure(); 207 _l->failedAssertThrows( file, line, expression, type, otherThrown ); 208 } 209 failedAssertThrowsNot(const char * file,unsigned line,const char * expression)210 void TestTracker::failedAssertThrowsNot( const char *file, unsigned line, const char *expression ) 211 { 212 countFailure(); 213 _l->failedAssertThrowsNot( file, line, expression ); 214 } 215 setWorld(const WorldDescription * w)216 void TestTracker::setWorld( const WorldDescription *w ) 217 { 218 _world = fixWorld( w ); 219 setSuite( 0 ); 220 } 221 setSuite(const SuiteDescription * s)222 void TestTracker::setSuite( const SuiteDescription *s ) 223 { 224 _suite = fixSuite( s ); 225 setTest( 0 ); 226 } 227 setTest(const TestDescription * t)228 void TestTracker::setTest( const TestDescription *t ) 229 { 230 _test = fixTest( t ); 231 } 232 countWarning()233 void TestTracker::countWarning() 234 { 235 ++ _warnings; 236 } 237 countFailure()238 void TestTracker::countFailure() 239 { 240 if ( ++ _testFailedAsserts == 1 ) { 241 ++ _failedTests; 242 if ( ++ _suiteFailedTests == 1 ) 243 ++ _failedSuites; 244 } 245 } 246 }; 247 248 #endif // __cxxtest__TestTracker_cpp__ 249