1#ifndef CPPUNIT_TESTRESULT_H 2#define CPPUNIT_TESTRESULT_H 3 4#include <cppunit/Portability.h> 5 6#if CPPUNIT_NEED_DLL_DECL 7#pragma warning( push ) 8#pragma warning( disable: 4251 ) // X needs to have dll-interface to be used by clients of class Z 9#endif 10 11#include <cppunit/SynchronizedObject.h> 12#include <deque> 13 14namespace CppUnit { 15 16class Exception; 17class Test; 18class TestFailure; 19class TestListener; 20 21#if CPPUNIT_NEED_DLL_DECL 22 template class CPPUNIT_API deque<TestListener *>; 23#endif 24 25/*! \brief Manages TestListener. 26 * \ingroup TrackingTestExecution 27 * 28 * A single instance of this class is used when running the test. It is usually 29 * created by the test runner (TestRunner). 30 * 31 * This class shouldn't have to be inherited from. Use a TestListener 32 * or one of its subclasses to be informed of the ongoing tests. 33 * Use a Outputter to receive a test summary once it has finished 34 * 35 * TestResult supplies a template method 'setSynchronizationObject()' 36 * so that subclasses can provide mutual exclusion in the face of multiple 37 * threads. This can be useful when tests execute in one thread and 38 * they fill a subclass of TestResult which effects change in another 39 * thread. To have mutual exclusion, override setSynchronizationObject() 40 * and make sure that you create an instance of ExclusiveZone at the 41 * beginning of each method. 42 * 43 * \see Test, TestListener, TestResultCollector, Outputter. 44 */ 45class CPPUNIT_API TestResult : protected SynchronizedObject 46{ 47public: 48 TestResult( SynchronizationObject *syncObject = 0 ); 49 virtual ~TestResult(); 50 51 virtual void addListener( TestListener *listener ); 52 virtual void removeListener( TestListener *listener ); 53 54 virtual void reset(); 55 virtual void stop(); 56 57 virtual bool shouldStop() const; 58 59 virtual void startTest( Test *test ); 60 virtual void addError( Test *test, Exception *e ); 61 virtual void addFailure( Test *test, Exception *e ); 62 virtual void endTest( Test *test ); 63 64protected: 65 void addFailure( const TestFailure &failure ); 66 67protected: 68 typedef std::deque<TestListener *> TestListeners; 69 TestListeners m_listeners; 70 bool m_stop; 71 72private: 73 TestResult( const TestResult &other ); 74 TestResult &operator =( const TestResult &other ); 75}; 76 77 78} // namespace CppUnit 79 80 81#if CPPUNIT_NEED_DLL_DECL 82#pragma warning( pop ) 83#endif 84 85#endif // CPPUNIT_TESTRESULT_H 86 87 88