1 /*---------------------------------------------------------------------------*
2 Project: Horizon
3 File: test_Test.cpp
4
5 Copyright (C)2009-2012 Nintendo Co., Ltd. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Rev: 47284 $
14 *---------------------------------------------------------------------------*/
15
16 #include <nn.h>
17 //#include <nn/Result.h>
18 //#include <nn/os.h>
19 //#include <nn/Handle.h>
20 //#include <nn/os/os_Thread.h>
21 #include <nn/os/os_Initialize.h>
22 #include <nn/test/test_Test.h>
23 using namespace nn::dbg;
24 using namespace nn::os;
25
26 using nn::Handle;
27 using nn::test::String;
28 using nn::test::TextOutput;
29 using nn::test::XmlOutput;
30 using nn::test::AssertInfo;
31
32
33 // Test suite definitions
34 //
35 // Class that inherits Suite is the test suite
36 // Create test method in this class and register it in the constructor
37 class Test : public nn::test::Suite
38 {
39 public:
Test()40 Test()
41 {
42 // Test suite name
43 SUITE_NAME("Test");
44
45 // Test case registration
46 TEST_ADD(Test::Test1)
47 TEST_ADD(Test::Test2)
48 TEST_ADD(Test::Test3)
49 TEST_ADD(Test::Test4)
50 }
~Test()51 virtual ~Test() {}
52
53 private:
54 // The following is the test method
Test1()55 void Test1()
56 {
57 }
Test2()58 void Test2()
59 {
60 NN_TEST_ASSERT(1 == 0);
61 NN_TEST_ASSERT(2 & 0);
62 }
Test3()63 void Test3()
64 {
65 NN_TEST_ASSERT(1 > 2);
66 }
67
Test4()68 void Test4()
69 {
70 NN_TEST_ASSERT_EQUAL(1, 2);
71 }
72 };
73
74
75 class SuccessTest : public nn::test::Suite
76 {
77 public:
SuccessTest()78 SuccessTest()
79 {
80 // Test suite name
81 SUITE_NAME("SuccessTest");
82
83 // Test case registration
84 TEST_ADD(SuccessTest::Test1)
85 TEST_ADD(SuccessTest::Test2)
86 TEST_ADD(SuccessTest::Test3)
87 TEST_ADD(SuccessTest::Test4)
88 }
~SuccessTest()89 virtual ~SuccessTest() {}
90
91 private:
92 // The following is the test method
Test1()93 void Test1()
94 {
95 }
Test2()96 void Test2()
97 {
98 NN_TEST_ASSERT(1 == 1);
99 NN_TEST_ASSERT(2 & 2);
100 }
Test3()101 void Test3()
102 {
103 NN_TEST_ASSERT(1 > 0);
104 }
105
Test4()106 void Test4()
107 {
108 NN_TEST_ASSERT_EQUAL(1, 1);
109 }
110 };
111
112
113
114 class SubTest1 : public nn::test::Suite
115 {
116 public:
SubTest1()117 SubTest1()
118 {
119 SUITE_NAME("SubTest1");
120 TEST_ADD(SubTest1::Test1)
121 TEST_ADD(SubTest1::Test2)
122 TEST_ADD(SubTest1::Test3)
123 }
124 private:
Test1()125 void Test1()
126 {
127 NN_TLOG_("SubTest1::Test1 in");
128 NN_TEST_BEGIN_EXPECT_FAILURE_ANY
129 {
130 NN_TASSERT_(0);
131 }
132 NN_TEST_END_EXPECT_FAILURE
133
134 NN_TLOG_("SubTest1::Test1 out");
135
136 }
Test2()137 void Test2()
138 {
139 NN_TLOG_("SubTest1::Test2 in");
140 NN_TEST_ASSERTMSG(10 == 9, "Assert!, %d\n", 1 + 2);
141 NN_TEST_ASSERT(1 == 2);
142 NN_TLOG_("SubTest1::Test2 out");
143 }
Test3()144 void Test3()
145 {
146 NN_TLOG_("SubTest1::Test3 in");
147 NN_TEST_ASSERT(10 == 9);
148 NN_TLOG_("SubTest1::Test3 out");
149 }
150 };
151
152
153
154 class SubTest2 : public nn::test::Suite
155 {
156 public:
SubTest2()157 SubTest2()
158 {
159 SUITE_NAME("SubTest2");
160 TEST_ADD_WITH_INFO(SubTest2::Test1, "SubTest2::Test1", "2_1 info")
161 TEST_ADD_WITH_INFO(SubTest2::Test2, "SubTest2::Test2", "2_2 info")
162 }
163 private:
Test1()164 void Test1()
165 {
166 NN_TLOG_("Do SubTest2::Test1.Success");
167 }
Test2()168 void Test2()
169 {
170 NN_TLOG_("Do SubTest2::Test2.Failure");
171 NN_TEST_ASSERT(1 == 2);
172 }
173 };
174
175
176
177 class SubTest3 : public nn::test::Suite
178 {
179 public:
SubTest3()180 SubTest3()
181 {
182 SUITE_NAME("SubTest3");
183 TEST_ADD_WITH_NAME(SubTest3::Test1, "Test3_1GO")
184 }
185 private:
Test1()186 void Test1()
187 {
188 NN_TLOG_("Do SubTest3::Test1.Failure");
189 NN_TEST_ASSERT(1 == 2);
190 }
191 };
192
193
194
195 class InitializeFinalizeSuiteTest : public nn::test::Suite
196 {
197 public:
InitializeFinalizeSuiteTest()198 InitializeFinalizeSuiteTest()
199 {
200 SUITE_NAME("InitializeFinalizeSuiteTest");
201 TEST_ADD(InitializeFinalizeSuiteTest::Test)
202
203 isInitialized = false;
204 isFinalized = false;
205 isTested = false;
206 }
207
208 bool isInitialized;
209 bool isFinalized;
210 bool isTested;
211
212 protected:
InitializeSuite()213 virtual bool InitializeSuite() { isInitialized = true; } // Called once before starting the test belonging to the suite
FinalizeSuite()214 virtual void FinalizeSuite() {isFinalized = true;} // Called when ending the test belonging to the suite
215
216
217 private:
Test()218 void Test()
219 {
220 NN_TLOG_("Do InitializeFinalizeSuiteTest::Test");
221 isTested = true;
222 }
223 };
224
225 #define TOTAL_TEST_NUM 11
226
227
228 /* Please see man pages for details
229
230 */
testRun(nn::test::Output & out)231 void testRun(nn::test::Output& out)
232 {
233 // Execute Run. All tests succeed in this case.
234 {
235 SuccessTest test;
236 NN_TASSERT_(true == test.Run(out, false));
237 }
238
239 // Execute Run. A failure occurs. If the second argument is true, do not exit test case even if caught by an assert
240 {
241 Test test; // Create test suite
242
243 // If there is a test suite to execute as a child of a test case
244 // Child can be registered with the AddSubSuite method
245 SubTest1 subTest1;
246 test.AddSubSuite(&subTest1);
247
248 // Execute test
249 NN_TASSERT_(false == test.Run(out, true));
250 }
251
252 // Execute Run. A failure occurs. If the second argument is false, exit test case when caught by an assert
253 {
254 Test test; // Create test suite
255
256 // If there is a test suite to execute as a child of a test case
257 // Child can be registered with the AddSubSuite method
258 SubTest1 subTest1;
259 test.AddSubSuite(&subTest1);
260
261 // Execute test
262 NN_TASSERT_(false == test.Run(out, false));
263 }
264
265 // Execute Run. Test to confirm that Initialize() and FinalizeSuite() of the sub Suite execute
266 {
267 SuccessTest test; // Create test suite
268 InitializeFinalizeSuiteTest initializeFinalizeSuiteTest;
269 test.AddSubSuite(&initializeFinalizeSuiteTest);
270
271 NN_TASSERT_(initializeFinalizeSuiteTest.isInitialized == false);
272 NN_TASSERT_(initializeFinalizeSuiteTest.isFinalized == false);
273 NN_TASSERT_(initializeFinalizeSuiteTest.isTested == false);
274 NN_TASSERT_(true == test.Run(out, true));
275 NN_TASSERT_(initializeFinalizeSuiteTest.isInitialized == true);
276 NN_TASSERT_(initializeFinalizeSuiteTest.isFinalized == true);
277 NN_TASSERT_(initializeFinalizeSuiteTest.isTested == true);
278 }
279 }
280
281
282 /* Please see man pages for details
283
284 */
testGetFunc()285 void testGetFunc()
286 {
287 Test test;
288 SubTest1 subTest1;
289 test.AddSubSuite(&subTest1);
290 SubTest2 subTest2;
291 test.AddSubSuite(&subTest2);
292 SubTest3 subTest3;
293 test.AddSubSuite(&subTest3);
294
295 /*---------------------------------------------------------------------------*
296 GetTestName()
297 *---------------------------------------------------------------------------*/
298 NN_TASSERT_(test.GetTestName() == "Test");
299 NN_TASSERT_(subTest1.GetTestName() == "SubTest1");
300 NN_TASSERT_(subTest2.GetTestName() == "SubTest2");
301 NN_TASSERT_(subTest3.GetTestName() == "SubTest3");
302
303 /*---------------------------------------------------------------------------*
304 GetTestNum()
305 *---------------------------------------------------------------------------*/
306 NN_TASSERT_(test.GetTestNum() == 4);
307 NN_TASSERT_(subTest1.GetTestNum() == 3);
308 NN_TASSERT_(subTest2.GetTestNum() == 2);
309 NN_TASSERT_(subTest3.GetTestNum() == 1);
310
311 /*---------------------------------------------------------------------------*
312 GetTotalTestNum()
313 *---------------------------------------------------------------------------*/
314 NN_TASSERT_(test.GetTotalTestNum() == 10);
315 NN_TASSERT_(subTest1.GetTotalTestNum() == 3);
316 NN_TASSERT_(subTest2.GetTotalTestNum() == 2);
317 NN_TASSERT_(subTest3.GetTotalTestNum() == 1);
318
319 /*---------------------------------------------------------------------------*
320 GetTestFuncInfos()
321 *---------------------------------------------------------------------------*/
322 String suiteName;
323 String funcName;
324
325 NN_TASSERT_(false == test.GetTestFuncInfos(0, suiteName, funcName));
326
327 NN_TASSERT_(true == test.GetTestFuncInfos(1, suiteName, funcName));
328 NN_TASSERT_(suiteName == "Test");
329 NN_TASSERT_(funcName == "Test::Test1");
330
331 NN_TASSERT_(true == test.GetTestFuncInfos(4, suiteName, funcName));
332 NN_TASSERT_(suiteName == "Test");
333 NN_TASSERT_(funcName == "Test::Test4");
334
335 NN_TASSERT_(true == test.GetTestFuncInfos(5, suiteName, funcName));
336 NN_TASSERT_(suiteName == "SubTest1");
337 NN_TASSERT_(funcName == "SubTest1::Test1");
338
339 NN_TASSERT_(true == test.GetTestFuncInfos(7, suiteName, funcName));
340 NN_TASSERT_(suiteName == "SubTest1");
341 NN_TASSERT_(funcName == "SubTest1::Test3");
342
343 NN_TASSERT_(true == test.GetTestFuncInfos(8, suiteName, funcName));
344 NN_TASSERT_(suiteName == "SubTest2");
345 NN_TASSERT_(funcName == "SubTest2::Test1");
346
347 NN_TASSERT_(true == test.GetTestFuncInfos(9, suiteName, funcName));
348 NN_TASSERT_(suiteName == "SubTest2");
349 NN_TASSERT_(funcName == "SubTest2::Test2");
350
351 NN_TASSERT_(true == test.GetTestFuncInfos(10, suiteName, funcName));
352 NN_TASSERT_(suiteName == "SubTest3");
353 NN_TASSERT_(funcName == "Test3_1GO");
354
355 NN_TASSERT_(false == test.GetTestFuncInfos(11, suiteName, funcName));
356
357 //Confirms that test extra information can be obtained
358 String funcInfo;
359 NN_TASSERT_(true == test.GetTestFuncInfos(7, suiteName, funcName, funcInfo));
360 NN_TASSERT_(funcInfo == "");
361
362
363 NN_TASSERT_(true == test.GetTestFuncInfos(8, suiteName, funcName, funcInfo));
364 NN_TASSERT_(funcInfo == "2_1 info");
365
366 NN_TASSERT_(true == test.GetTestFuncInfos(9, suiteName, funcName, funcInfo));
367 NN_TASSERT_(funcInfo == "2_2 info");
368
369 }
370
371
372 /* Please see man pages for details
373
374 */
testRunSpecificTestFunc(nn::test::Output & output)375 void testRunSpecificTestFunc(nn::test::Output& output)
376 {
377 Test test;
378 SubTest1 subTest1;
379 test.AddSubSuite(&subTest1);
380 SubTest2 subTest2;
381 test.AddSubSuite(&subTest2);
382 SubTest3 subTest3;
383 test.AddSubSuite(&subTest3);
384 InitializeFinalizeSuiteTest initializeFinalizeSuiteTest;
385 test.AddSubSuite(&initializeFinalizeSuiteTest);
386
387 test.Initialize();
388 /*Test "specifying test name and executing"*/
389 NN_TASSERT_(true == test.RunSpecificTestFunc("Test::Test1", output));
390 NN_TASSERT_(false == test.RunSpecificTestFunc("Test::Test2", output));
391 NN_TASSERT_(false == test.RunSpecificTestFunc("Test::Test3", output));
392 NN_TASSERT_(false == test.RunSpecificTestFunc("Test::Test4", output));
393 //// When executing by specifying test name, the sub Suite test cannot be executed //
394 NN_TASSERT_(false == test.RunSpecificTestFunc("SubTest1::Test1", output));
395 NN_TASSERT_(test.GetTotalTestNum() == TOTAL_TEST_NUM);
396
397 /*Test "specifying test ID and executing"*/
398 NN_TASSERT_(true == test.RunSpecificTestFunc(1, output));
399 NN_TASSERT_(false == test.RunSpecificTestFunc(2, output));
400 NN_TASSERT_(false == test.RunSpecificTestFunc(3, output));
401 NN_TASSERT_(false == test.RunSpecificTestFunc(4, output));
402 //// When "executing by specifying test ID," the sub Suite test can also be executed //
403 NN_TASSERT_(true == test.RunSpecificTestFunc(5, output));
404 NN_TASSERT_(test.GetTotalTestNum() == TOTAL_TEST_NUM);
405
406 /*Test "specifying test Suite and test name and executing"*/
407 NN_TASSERT_(true == test.RunSpecificTestFunc("SubTest1", "SubTest1::Test1", output));
408 NN_TASSERT_(false == test.RunSpecificTestFunc("SubTest1", "SubTest1::Test2", output));
409 NN_TASSERT_(false == test.RunSpecificTestFunc("SubTest1", "SubTest1::Test3", output));
410 NN_TASSERT_(true == test.RunSpecificTestFunc("SubTest2", "SubTest2::Test1", output));
411 NN_TASSERT_(true == test.RunSpecificTestFunc(8, output));
412 NN_TASSERT_(false == test.RunSpecificTestFunc("SubTest2", "SubTest2::Test2", output));
413
414 NN_TASSERT_(false == test.RunSpecificTestFunc("SubTest3", "SubTest3::Test1", output));
415 NN_TASSERT_(false == test.RunSpecificTestFunc("SubTest3", "Test3_1GO", output));
416 NN_TASSERT_(test.GetTotalTestNum() == TOTAL_TEST_NUM);
417
418 //// With "specifying test Suite and test name and executing," execution fails if the Suite and test name do not match //
419 NN_TASSERT_(false == test.RunSpecificTestFunc("SubTest3", "SubTest1::Test1", output));
420 NN_TASSERT_(false == test.RunSpecificTestFunc("SubTest3", "SubTest2::Test1", output));
421 NN_TASSERT_(test.GetTotalTestNum() == TOTAL_TEST_NUM);
422
423
424 /*Test when the contAfterFail argument of RunSpecificTestFunc() is set to false*/
425 NN_TASSERT_(true == test.RunSpecificTestFunc(1, output, false));
426 NN_TASSERT_(false == test.RunSpecificTestFunc(2, output, false));
427 NN_TASSERT_(false == test.RunSpecificTestFunc(3, output, false));
428 NN_TASSERT_(false == test.RunSpecificTestFunc(4, output, false));
429 NN_TASSERT_(true == test.RunSpecificTestFunc(5, output, false));
430 NN_TASSERT_(true == test.RunSpecificTestFunc("SubTest1", "SubTest1::Test1", output, false));
431 NN_TASSERT_(false == test.RunSpecificTestFunc("SubTest1", "SubTest1::Test2", output, false));
432 NN_TASSERT_(false == test.RunSpecificTestFunc("SubTest1", "SubTest1::Test3", output, false));
433 NN_TASSERT_(true == test.RunSpecificTestFunc("SubTest2", "SubTest2::Test1", output, false));
434 NN_TASSERT_(true == test.RunSpecificTestFunc(8, output));
435 NN_TASSERT_(false == test.RunSpecificTestFunc("SubTest2", "SubTest2::Test2", output, false));
436 NN_TASSERT_(test.GetTotalTestNum() == TOTAL_TEST_NUM);
437
438 /*Test to confirm that Initialize() and FinalizeSuite() of the sub Suite execute for RunSpecificTestFunc()*/
439 NN_TASSERT_(initializeFinalizeSuiteTest.isInitialized == false);
440 NN_TASSERT_(initializeFinalizeSuiteTest.isFinalized == false);
441 NN_TASSERT_(initializeFinalizeSuiteTest.isTested == false);
442 NN_TASSERT_(true == test.RunSpecificTestFunc("InitializeFinalizeSuiteTest", "InitializeFinalizeSuiteTest::Test", output));
443 NN_TASSERT_(initializeFinalizeSuiteTest.isInitialized == true);
444 NN_TASSERT_(initializeFinalizeSuiteTest.isFinalized == true);
445 NN_TASSERT_(initializeFinalizeSuiteTest.isTested == true);
446
447 test.Finalize();
448 }
449
450
451 // For nninitStartup and nnMain:
452 // Include in the test library when all test code is replaced
453 // Plan to switch so that CUnit is not used with the build system
454 //
455 // When replacing, define them for each test process.
456
457 // test::Startup must be called at startup
nninitStartUp()458 void nninitStartUp()
459 {
460 nn::test::InitializeAllocator();
461 }
462
nnMain(void)463 void nnMain( void )
464 {
465 //__breakpoint(0);
466 // Output settings
467 #ifdef NN_TEST_DEBUG
468 TextOutput out; // Text output during debugging
469 #else
470 XmlOutput out; // XML output when not debugging (when automatic testing)
471 #endif
472 /* Please see man pages for details
473
474 */
475 testRun(out);
476
477
478 /* Please see man pages for details
479
480 */
481 testGetFunc();
482
483 /* Please see man pages for details
484
485 */
486 testRunSpecificTestFunc(out);
487
488 NN_TLOG_("---test_Test.cpp nnMain() finished.(into infinite loop)");
489 while(1)
490 {
491 // Continue Sleep.
492 nn::os::Thread::Sleep(nn::fnd::TimeSpan::FromSeconds(1));
493 }
494 }
495