#ifndef __cxxtest__TeeListener_h__ #define __cxxtest__TeeListener_h__ // // A TeeListener notifies two "reular" TestListeners // #include #include namespace CxxTest { class TeeListener : public TestListener { public: TeeListener() { setFirst( _dummy ); setSecond( _dummy ); } virtual ~TeeListener() {} void setFirst( TestListener& first ) { _first = &first; } void setSecond( TestListener& second ) { _second = &second; } void enterWorld( const WorldDescription& d ) { _first->enterWorld( d ); _second->enterWorld( d ); } void enterSuite( const SuiteDescription& d ) { _first->enterSuite( d ); _second->enterSuite( d ); } void enterTest( const TestDescription& d ) { _first->enterTest( d ); _second->enterTest( d ); } void trace( const char* file, unsigned line, const char* expression ) { _first->trace( file, line, expression ); _second->trace( file, line, expression ); } void warning( const char* file, unsigned line, const char* expression ) { _first->warning( file, line, expression ); _second->warning( file, line, expression ); } void failedTest( const char* file, unsigned line, const char* expression ) { _first->failedTest( file, line, expression ); _second->failedTest( file, line, expression ); } void failedAssert( const char* file, unsigned line, const char* expression ) { _first->failedAssert( file, line, expression ); _second->failedAssert( file, line, expression ); } void failedAssertEquals( const char* file, unsigned line, const char* xStr, const char* yStr, const char* x, const char* y ) { _first->failedAssertEquals( file, line, xStr, yStr, x, y ); _second->failedAssertEquals( file, line, xStr, yStr, x, 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 ) { _first->failedAssertSameData( file, line, xStr, yStr, sizeStr, x, y, size ); _second->failedAssertSameData( file, line, xStr, yStr, sizeStr, x, y, 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 ) { _first->failedAssertDelta( file, line, xStr, yStr, dStr, x, y, d ); _second->failedAssertDelta( file, line, xStr, yStr, dStr, x, y, d ); } void failedAssertDiffers( const char* file, unsigned line, const char* xStr, const char* yStr, const char* value ) { _first->failedAssertDiffers( file, line, xStr, yStr, value ); _second->failedAssertDiffers( file, line, xStr, yStr, value ); } void failedAssertLessThan( const char* file, unsigned line, const char* xStr, const char* yStr, const char* x, const char* y ) { _first->failedAssertLessThan( file, line, xStr, yStr, x, y ); _second->failedAssertLessThan( file, line, xStr, yStr, x, y ); } void failedAssertLessThanEquals( const char* file, unsigned line, const char* xStr, const char* yStr, const char* x, const char* y ) { _first->failedAssertLessThanEquals( file, line, xStr, yStr, x, y ); _second->failedAssertLessThanEquals( file, line, xStr, yStr, x, y ); } void failedAssertPredicate( const char* file, unsigned line, const char* predicate, const char* xStr, const char* x ) { _first->failedAssertPredicate( file, line, predicate, xStr, x ); _second->failedAssertPredicate( file, line, predicate, xStr, x ); } void failedAssertRelation( const char* file, unsigned line, const char* relation, const char* xStr, const char* yStr, const char* x, const char* y ) { _first->failedAssertRelation( file, line, relation, xStr, yStr, x, y ); _second->failedAssertRelation( file, line, relation, xStr, yStr, x, y ); } void failedAssertThrows( const char* file, unsigned line, const char* expression, const char* type, bool otherThrown ) { _first->failedAssertThrows( file, line, expression, type, otherThrown ); _second->failedAssertThrows( file, line, expression, type, otherThrown ); } void failedAssertThrowsNot( const char* file, unsigned line, const char* expression ) { _first->failedAssertThrowsNot( file, line, expression ); _second->failedAssertThrowsNot( file, line, expression ); } void leaveTest( const TestDescription& d ) { _first->leaveTest( d ); _second->leaveTest( d ); } void leaveSuite( const SuiteDescription& d ) { _first->leaveSuite( d ); _second->leaveSuite( d ); } void leaveWorld( const WorldDescription& d ) { _first->leaveWorld( d ); _second->leaveWorld( d ); } private: TestListener* _first, *_second; TestListener _dummy; }; }; #endif // __cxxtest__TeeListener_h__