1 #ifndef __cxxtest__TeeListener_h__
2 #define __cxxtest__TeeListener_h__
4 //
5 // A TeeListener notifies two "reular" TestListeners
6 //
8 #include <cxxtest/TestListener.h>
9 #include <cxxtest/TestListener.h>
11 namespace CxxTest
12 {
13 class TeeListener : public TestListener
14 {
15 public:
16 TeeListener()
17 {
18 setFirst( _dummy );
19 setSecond( _dummy );
20 }
22 virtual ~TeeListener()
23 {
24 }
26 void setFirst( TestListener &first )
27 {
28 _first = &first;
29 }
31 void setSecond( TestListener &second )
32 {
33 _second = &second;
34 }
36 void enterWorld( const WorldDescription &d )
37 {
38 _first->enterWorld( d );
39 _second->enterWorld( d );
40 }
42 void enterSuite( const SuiteDescription &d )
43 {
44 _first->enterSuite( d );
45 _second->enterSuite( d );
46 }
48 void enterTest( const TestDescription &d )
49 {
50 _first->enterTest( d );
51 _second->enterTest( d );
52 }
54 void trace( const char *file, unsigned line, const char *expression )
55 {
56 _first->trace( file, line, expression );
57 _second->trace( file, line, expression );
58 }
60 void warning( const char *file, unsigned line, const char *expression )
61 {
62 _first->warning( file, line, expression );
63 _second->warning( file, line, expression );
64 }
66 void failedTest( const char *file, unsigned line, const char *expression )
67 {
68 _first->failedTest( file, line, expression );
69 _second->failedTest( file, line, expression );
70 }
72 void failedAssert( const char *file, unsigned line, const char *expression )
73 {
74 _first->failedAssert( file, line, expression );
75 _second->failedAssert( file, line, expression );
76 }
78 void failedAssertEquals( const char *file, unsigned line,
79 const char *xStr, const char *yStr,
80 const char *x, const char *y )
81 {
82 _first->failedAssertEquals( file, line, xStr, yStr, x, y );
83 _second->failedAssertEquals( file, line, xStr, yStr, x, y );
84 }
86 void failedAssertSameData( const char *file, unsigned line,
87 const char *xStr, const char *yStr,
88 const char *sizeStr, const void *x,
89 const void *y, unsigned size )
90 {
91 _first->failedAssertSameData( file, line, xStr, yStr, sizeStr, x, y, size );
92 _second->failedAssertSameData( file, line, xStr, yStr, sizeStr, x, y, size );
93 }
95 void failedAssertDelta( const char *file, unsigned line,
96 const char *xStr, const char *yStr, const char *dStr,
97 const char *x, const char *y, const char *d )
98 {
99 _first->failedAssertDelta( file, line, xStr, yStr, dStr, x, y, d );
100 _second->failedAssertDelta( file, line, xStr, yStr, dStr, x, y, d );
101 }
103 void failedAssertDiffers( const char *file, unsigned line,
104 const char *xStr, const char *yStr,
105 const char *value )
106 {
107 _first->failedAssertDiffers( file, line, xStr, yStr, value );
108 _second->failedAssertDiffers( file, line, xStr, yStr, value );
109 }
111 void failedAssertLessThan( const char *file, unsigned line,
112 const char *xStr, const char *yStr,
113 const char *x, const char *y )
114 {
115 _first->failedAssertLessThan( file, line, xStr, yStr, x, y );
116 _second->failedAssertLessThan( file, line, xStr, yStr, x, y );
117 }
119 void failedAssertLessThanEquals( const char *file, unsigned line,
120 const char *xStr, const char *yStr,
121 const char *x, const char *y )
122 {
123 _first->failedAssertLessThanEquals( file, line, xStr, yStr, x, y );
124 _second->failedAssertLessThanEquals( file, line, xStr, yStr, x, y );
125 }
127 void failedAssertPredicate( const char *file, unsigned line,
128 const char *predicate, const char *xStr, const char *x )
129 {
130 _first->failedAssertPredicate( file, line, predicate, xStr, x );
131 _second->failedAssertPredicate( file, line, predicate, xStr, x );
132 }
134 void failedAssertRelation( const char *file, unsigned line,
135 const char *relation, const char *xStr, const char *yStr,
136 const char *x, const char *y )
137 {
138 _first->failedAssertRelation( file, line, relation, xStr, yStr, x, y );
139 _second->failedAssertRelation( file, line, relation, xStr, yStr, x, y );
140 }
142 void failedAssertThrows( const char *file, unsigned line,
143 const char *expression, const char *type,
144 bool otherThrown )
145 {
146 _first->failedAssertThrows( file, line, expression, type, otherThrown );
147 _second->failedAssertThrows( file, line, expression, type, otherThrown );
148 }
150 void failedAssertThrowsNot( const char *file, unsigned line,
151 const char *expression )
152 {
153 _first->failedAssertThrowsNot( file, line, expression );
154 _second->failedAssertThrowsNot( file, line, expression );
155 }
157 void leaveTest( const TestDescription &d )
158 {
159 _first->leaveTest(d);
160 _second->leaveTest(d);
161 }
163 void leaveSuite( const SuiteDescription &d )
164 {
165 _first->leaveSuite(d);
166 _second->leaveSuite(d);
167 }
169 void leaveWorld( const WorldDescription &d )
170 {
171 _first->leaveWorld(d);
172 _second->leaveWorld(d);
173 }
175 private:
176 TestListener *_first, *_second;
177 TestListener _dummy;
178 };
179 };
182 #endif // __cxxtest__TeeListener_h__