1 #include "CoreSuite.h"
2 #include "MockFunctor.h"
3 #include "MockProtector.h"
4 #include "MockTestCase.h"
5 #include "TestResultTest.h"
6
7
8 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( TestResultTest,
9 coreSuiteName() );
10
11
TestResultTest()12 TestResultTest::TestResultTest()
13 {
14 }
15
16
~TestResultTest()17 TestResultTest::~TestResultTest()
18 {
19 }
20
21
22 void
setUp()23 TestResultTest::setUp()
24 {
25 m_result = new CPPUNIT_NS::TestResult();
26 m_listener1 = new MockTestListener( "listener1" );
27 m_listener2 = new MockTestListener( "listener2" );
28 m_dummyTest = new MockTestCase( "dummy-test" );
29 }
30
31
32 void
tearDown()33 TestResultTest::tearDown()
34 {
35 delete m_dummyTest;
36 delete m_listener1;
37 delete m_listener2;
38 delete m_result;
39 }
40
41
42 void
testConstructor()43 TestResultTest::testConstructor()
44 {
45 CPPUNIT_ASSERT( !m_result->shouldStop() );
46 }
47
48
49 void
testStop()50 TestResultTest::testStop()
51 {
52 m_result->stop();
53 CPPUNIT_ASSERT( m_result->shouldStop() );
54 }
55
56
57 void
testAddError()58 TestResultTest::testAddError()
59 {
60 CPPUNIT_NS::Exception *dummyException = new CPPUNIT_NS::Exception(
61 CPPUNIT_NS::Message( "some_error" ) );
62 m_listener1->setExpectFailure( m_dummyTest, dummyException, true );
63 m_result->addListener( m_listener1 );
64
65 m_result->addError( m_dummyTest, dummyException );
66
67 m_listener1->verify();
68 }
69
70
71 void
testAddFailure()72 TestResultTest::testAddFailure()
73 {
74 CPPUNIT_NS::Exception *dummyException = new CPPUNIT_NS::Exception(
75 CPPUNIT_NS::Message("some_error" ) );
76 m_listener1->setExpectFailure( m_dummyTest, dummyException, false );
77 m_result->addListener( m_listener1 );
78
79 m_result->addFailure( m_dummyTest, dummyException );
80
81 m_listener1->verify();
82 }
83
84
85 void
testStartTest()86 TestResultTest::testStartTest()
87 {
88 m_listener1->setExpectStartTest( m_dummyTest );
89 m_result->addListener( m_listener1 );
90
91 m_result->startTest( m_dummyTest );
92
93 m_listener1->verify();
94 }
95
96
97 void
testEndTest()98 TestResultTest::testEndTest()
99 {
100 m_listener1->setExpectEndTest( m_dummyTest );
101 m_result->addListener( m_listener1 );
102
103 m_result->endTest( m_dummyTest );
104
105 m_listener1->verify();
106 }
107
108
109 void
testStartSuite()110 TestResultTest::testStartSuite()
111 {
112 m_listener1->setExpectStartSuite( m_dummyTest );
113 m_result->addListener( m_listener1 );
114
115 m_result->startSuite( m_dummyTest );
116
117 m_listener1->verify();
118 }
119
120
121 void
testEndSuite()122 TestResultTest::testEndSuite()
123 {
124 m_listener1->setExpectEndSuite( m_dummyTest );
125 m_result->addListener( m_listener1 );
126
127 m_result->endSuite( m_dummyTest );
128
129 m_listener1->verify();
130 }
131
132
133 void
testRunTest()134 TestResultTest::testRunTest()
135 {
136 m_listener1->setExpectStartTestRun( m_dummyTest, m_result );
137 m_listener1->setExpectEndTestRun( m_dummyTest, m_result );
138 m_result->addListener( m_listener1 );
139
140 m_result->runTest( m_dummyTest );
141
142 m_listener1->verify();
143 }
144
145
146 void
testTwoListener()147 TestResultTest::testTwoListener()
148 {
149 m_listener1->setExpectStartTest( m_dummyTest );
150 m_listener2->setExpectStartTest( m_dummyTest );
151 CPPUNIT_NS::Exception *dummyException1 = new CPPUNIT_NS::Exception(
152 CPPUNIT_NS::Message( "some_error" ) );
153 m_listener1->setExpectFailure( m_dummyTest, dummyException1, true );
154 m_listener2->setExpectFailure( m_dummyTest, dummyException1, true );
155 m_listener1->setExpectEndTest( m_dummyTest );
156 m_listener2->setExpectEndTest( m_dummyTest );
157 m_result->addListener( m_listener1 );
158 m_result->addListener( m_listener2 );
159
160 m_result->startTest( m_dummyTest );
161 m_result->addError( m_dummyTest, dummyException1 );
162 m_result->endTest( m_dummyTest );
163
164 m_listener1->verify();
165 m_listener2->verify();
166 }
167
168
169 void
testDefaultProtectSucceed()170 TestResultTest::testDefaultProtectSucceed()
171 {
172 MockFunctor functor;
173 functor.setShouldSucceed();
174 m_listener1->setExpectNoFailure();
175
176 m_result->addListener( m_listener1 );
177 CPPUNIT_ASSERT( m_result->protect( functor, m_dummyTest ) );
178 m_listener1->verify();
179 functor.verify();
180 }
181
182
183 void
testDefaultProtectFail()184 TestResultTest::testDefaultProtectFail()
185 {
186 MockFunctor functor;
187 functor.setShouldFail();
188 m_listener1->setExpectNoFailure();
189
190 m_result->addListener( m_listener1 );
191 CPPUNIT_ASSERT( !m_result->protect( functor, m_dummyTest ) );
192 m_listener1->verify();
193 functor.verify();
194 }
195
196
197 void
testDefaultProtectFailIfThrow()198 TestResultTest::testDefaultProtectFailIfThrow()
199 {
200 MockFunctor functor;
201 functor.setThrowFailureException();
202 m_listener1->setExpectFailure();
203
204 m_result->addListener( m_listener1 );
205 CPPUNIT_ASSERT( !m_result->protect( functor, m_dummyTest ) );
206 m_listener1->verify();
207 functor.verify();
208 }
209
210
211 void
testProtectChainPushOneTrap()212 TestResultTest::testProtectChainPushOneTrap()
213 {
214 MockFunctor functor;
215 MockProtector *protector = new MockProtector();
216 functor.setThrowMockProtectorException();
217 protector->setExpectException();
218 m_listener1->setExpectFailure();
219
220 m_result->pushProtector( protector );
221 m_result->addListener( m_listener1 );
222 CPPUNIT_ASSERT( !m_result->protect( functor, m_dummyTest ) );
223 protector->verify();
224 m_listener1->verify();
225 functor.verify();
226 }
227
228
229 void
testProtectChainPushOnePassThrough()230 TestResultTest::testProtectChainPushOnePassThrough()
231 {
232 MockFunctor functor;
233 MockProtector *protector = new MockProtector();
234 functor.setThrowFailureException();
235 protector->setExpectNoException();
236 m_listener1->setExpectFailure();
237
238 m_result->pushProtector( protector );
239 m_result->addListener( m_listener1 );
240 CPPUNIT_ASSERT( !m_result->protect( functor, m_dummyTest ) );
241 protector->verify();
242 m_listener1->verify();
243 functor.verify();
244 }
245
246
247 void
testProtectChainPushTwoTrap()248 TestResultTest::testProtectChainPushTwoTrap()
249 {
250 MockFunctor functor;
251 functor.setThrowMockProtectorException();
252 // protector1 catch the exception retrown by protector2
253 MockProtector *protector1 = new MockProtector();
254 protector1->setExpectException();
255 // protector2 catch the exception and rethrow it
256 MockProtector *protector2 = new MockProtector();
257 protector2->setExpectCatchAndPropagateException();
258 m_listener1->setExpectFailure();
259
260 m_result->pushProtector( protector1 );
261 m_result->pushProtector( protector2 );
262 m_result->addListener( m_listener1 );
263 CPPUNIT_ASSERT( !m_result->protect( functor, m_dummyTest ) );
264 protector1->verify();
265 protector2->verify();
266 m_listener1->verify();
267 functor.verify();
268 }
269