summaryrefslogtreecommitdiff
path: root/cxxtest/TestTracker.h
diff options
context:
space:
mode:
Diffstat (limited to 'cxxtest/TestTracker.h')
-rw-r--r--cxxtest/TestTracker.h114
1 files changed, 114 insertions, 0 deletions
diff --git a/cxxtest/TestTracker.h b/cxxtest/TestTracker.h
new file mode 100644
index 0000000..c85abff
--- /dev/null
+++ b/cxxtest/TestTracker.h
@@ -0,0 +1,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__