1 #include <cppunit/config/SourcePrefix.h>
2 #include "FailureException.h"
3 #include "HelperMacrosTest.h"
4 #include "HelperSuite.h"
5 #include "MockTestCase.h"
6 #include "SubclassedTestCase.h"
7 #include <cppunit/TestResult.h>
8 #include <memory>
9 
10 /* Note:
11  - no unit test for CPPUNIT_TEST_SUITE_REGISTRATION...
12  */
13 
14 class FailTestFixture : public CPPUNIT_NS::TestFixture
15 {
16   CPPUNIT_TEST_SUITE( FailTestFixture );
17   CPPUNIT_TEST_FAIL( testFail );
18   CPPUNIT_TEST_SUITE_END();
19 public:
testFail()20   void testFail()
21   {
22     CPPUNIT_ASSERT_MESSAGE( "Failure", false );
23   }
24 };
25 
26 
27 class FailToFailTestFixture : public CPPUNIT_NS::TestFixture
28 {
29   CPPUNIT_TEST_SUITE( FailToFailTestFixture );
30   CPPUNIT_TEST_FAIL( testFailToFail );
31   CPPUNIT_TEST_SUITE_END();
32 public:
testFailToFail()33   void testFailToFail()
34   {
35   }
36 };
37 
38 
39 class ExceptionTestFixture : public CPPUNIT_NS::TestFixture
40 {
41   CPPUNIT_TEST_SUITE( ExceptionTestFixture );
42   CPPUNIT_TEST_EXCEPTION( testException, FailureException );
43   CPPUNIT_TEST_SUITE_END();
44 public:
testException()45   void testException()
46   {
47     throw FailureException();
48   }
49 };
50 
51 
52 class ExceptionNotCaughtTestFixture : public CPPUNIT_NS::TestFixture
53 {
54   CPPUNIT_TEST_SUITE( ExceptionNotCaughtTestFixture );
55   CPPUNIT_TEST_EXCEPTION( testExceptionNotCaught, FailureException );
56   CPPUNIT_TEST_SUITE_END();
57 public:
testExceptionNotCaught()58   void testExceptionNotCaught()
59   {
60   }
61 };
62 
63 
64 class CustomsTestTestFixture : public CPPUNIT_NS::TestFixture
65 {
66   CPPUNIT_TEST_SUITE( CustomsTestTestFixture );
67   CPPUNIT_TEST_SUITE_ADD_CUSTOM_TESTS( addCustomTests );
68   CPPUNIT_TEST_SUITE_END();
69 public:
addCustomTests(TestSuiteBuilderContextType & context)70   static void addCustomTests( TestSuiteBuilderContextType &context )
71   {
72     MockTestCase *test1 = new MockTestCase( context.getTestNameFor( "myCustomTest1" ) );
73     test1->makeRunTestThrow();
74     MockTestCase *test2 = new MockTestCase( context.getTestNameFor( "myCustomTest2" ) );
75     context.addTest( test1 );
76     context.addTest( test2 );
77   }
78 };
79 
80 class ParameterizedTestFixture : public CPPUNIT_NS::TestFixture
81 {
82     CPPUNIT_TEST_SUITE(ParameterizedTestFixture);
83     CPPUNIT_TEST_PARAMETERIZED(testMethod, {1, 2, 3, 4});
84     CPPUNIT_TEST_SUITE_END();
85 
86 public:
87 
testMethod(int)88     void testMethod(int /*val*/)
89     {
90     }
91 };
92 
93 
94 #undef TEST_ADD_N_MOCK
95 #define TEST_ADD_N_MOCK( totalCount )                                              \
96   {                                                                 \
97     for ( int count = (totalCount); count > 0; --count )            \
98       CPPUNIT_TEST_SUITE_ADD_TEST(                                  \
99          new MockTestCase( context.getTestNameFor( "dummyName" ) ) ); \
100   }
101 
102 
103 
104 class AddTestTestFixture : public CPPUNIT_NS::TestFixture
105 {
106   CPPUNIT_TEST_SUITE( AddTestTestFixture );
107   TEST_ADD_N_MOCK( 7 );
108   CPPUNIT_TEST_SUITE_END();
109 public:
110 };
111 
112 
113 
114 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( HelperMacrosTest,
115                                        helperSuiteName() );
116 
117 
HelperMacrosTest()118 HelperMacrosTest::HelperMacrosTest()
119 {
120 }
121 
122 
~HelperMacrosTest()123 HelperMacrosTest::~HelperMacrosTest()
124 {
125 }
126 
127 
128 void
setUp()129 HelperMacrosTest::setUp()
130 {
131   m_testListener = new MockTestListener( "mock-testlistener" );
132   m_result = new CPPUNIT_NS::TestResult();
133   m_result->addListener( m_testListener );
134 }
135 
136 
137 void
tearDown()138 HelperMacrosTest::tearDown()
139 {
140   delete m_result;
141   delete m_testListener;
142 }
143 
144 
145 void
testNoSubclassing()146 HelperMacrosTest::testNoSubclassing()
147 {
148   std::unique_ptr<CPPUNIT_NS::TestSuite> suite( BaseTestCase::suite() );
149   CPPUNIT_ASSERT_EQUAL( 1, suite->countTestCases() );
150   m_testListener->setExpectedStartTestCall( 1 );
151   m_testListener->setExpectNoFailure();
152 
153   suite->run( m_result );
154   m_testListener->verify();
155 }
156 
157 
158 void
testSubclassing()159 HelperMacrosTest::testSubclassing()
160 {
161   std::unique_ptr<CPPUNIT_NS::TestSuite> suite( SubclassedTestCase::suite() );
162   CPPUNIT_ASSERT_EQUAL( 2, suite->countTestCases() );
163   m_testListener->setExpectedStartTestCall( 2 );
164   m_testListener->setExpectedAddFailureCall( 1 );
165 
166   suite->run( m_result );
167   m_testListener->verify();
168 }
169 
170 
171 void
testFail()172 HelperMacrosTest::testFail()
173 {
174   std::unique_ptr<CPPUNIT_NS::TestSuite> suite( FailTestFixture::suite() );
175   m_testListener->setExpectedStartTestCall( 1 );
176   m_testListener->setExpectNoFailure();
177 
178   suite->run( m_result );
179   m_testListener->verify();
180 }
181 
182 
183 void
testFailToFail()184 HelperMacrosTest::testFailToFail()
185 {
186   std::unique_ptr<CPPUNIT_NS::TestSuite> suite( FailToFailTestFixture::suite() );
187   m_testListener->setExpectedStartTestCall( 1 );
188   m_testListener->setExpectedAddFailureCall( 1 );
189 
190   suite->run( m_result );
191   m_testListener->verify();
192 }
193 
194 
195 void
testException()196 HelperMacrosTest::testException()
197 {
198   std::unique_ptr<CPPUNIT_NS::TestSuite> suite( ExceptionTestFixture::suite() );
199   m_testListener->setExpectedStartTestCall( 1 );
200   m_testListener->setExpectNoFailure();
201 
202   suite->run( m_result );
203   m_testListener->verify();
204 }
205 
206 
207 void
testExceptionNotCaught()208 HelperMacrosTest::testExceptionNotCaught()
209 {
210   std::unique_ptr<CPPUNIT_NS::TestSuite> suite( ExceptionNotCaughtTestFixture::suite() );
211   m_testListener->setExpectedStartTestCall( 1 );
212   m_testListener->setExpectedAddFailureCall( 1 );
213 
214   suite->run( m_result );
215   m_testListener->verify();
216 }
217 
218 
219 void
testCustomTests()220 HelperMacrosTest::testCustomTests()
221 {
222   std::unique_ptr<CPPUNIT_NS::TestSuite> suite( CustomsTestTestFixture::suite() );
223   m_testListener->setExpectedStartTestCall( 2 );
224   m_testListener->setExpectedAddFailureCall( 1 );
225 
226   suite->run( m_result );
227   m_testListener->verify();
228 }
229 
230 
231 void
testAddTest()232 HelperMacrosTest::testAddTest()
233 {
234   std::unique_ptr<CPPUNIT_NS::TestSuite> suite( AddTestTestFixture::suite() );
235   m_testListener->setExpectedStartTestCall( 7 );
236   m_testListener->setExpectedAddFailureCall( 0 );
237 
238   suite->run( m_result );
239   m_testListener->verify();
240 }
241 
242 void
testParameterizedTests()243 HelperMacrosTest::testParameterizedTests()
244 {
245   std::unique_ptr<CPPUNIT_NS::TestSuite> suite( ParameterizedTestFixture::suite() );
246   m_testListener->setExpectedStartTestCall(4);
247   m_testListener->setExpectedAddFailureCall( 0 );
248   suite->run(m_result);
249   m_testListener->verify();
250 }
251