1 /*---------------------------------------------------------------------------*
2 Project: Horizon
3 File: test_Test.cpp
4 Copyright (C)2009 Nintendo Co., Ltd. All rights reserved.
5 These coded instructions, statements, and computer programs contain
6 proprietary information of Nintendo of America Inc. and/or Nintendo
7 Company Ltd., and are protected by Federal copyright law. They may
8 not be disclosed to third parties or copied or duplicated in any form,
9 in whole or in part, without the prior written consent of Nintendo.
10 $Rev: 12449 $
11 *---------------------------------------------------------------------------
12
13
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::os::Initialize();
461 nn::test::InitializeAllocator();
462 }
463
nnMain(void)464 void nnMain( void )
465 {
466 //__breakpoint(0);
467 // Output settings
468 #ifdef NN_TEST_DEBUG
469 TextOutput out; // Text output during debugging
470 #else
471 XmlOutput out; // XML output when not debugging (when automatic testing)
472 #endif
473 /* Please see man pages for details
474
475 */
476 testRun(out);
477
478
479 /* Please see man pages for details
480
481 */
482 testGetFunc();
483
484 /* Please see man pages for details
485
486 */
487 testRunSpecificTestFunc(out);
488
489 NN_TLOG_("---test_Test.cpp nnMain() finished.(into infinite loop)");
490 while(1)
491 {
492 // Continue Sleep.
493 nn::os::Thread::Sleep(nn::fnd::TimeSpan::FromSeconds(1));
494 }
495 }
496