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