1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: test_TextOutput.cpp 4 5 Copyright (C)2009 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: 18955 $ 14 *---------------------------------------------------------------------------*/ 15 16 #include <nn/test/test_TextOutput.h> 17 #include <nn/test/test_Time.h> 18 19 #define NN_PRINT_TEST_LOG(...) (void)::nn::dbg::detail::TPrintf(__VA_ARGS__) 20 21 namespace nn{ namespace test{ TextOutput()22 TextOutput::TextOutput() : 23 m_CurrentSuiteIndex(0), m_SuiteNum(0), m_pSuiteInfos(NULL) 24 { 25 } 26 ~TextOutput()27 TextOutput::~TextOutput() 28 { 29 Finalize(); 30 } 31 Initialize(int testsNum,int suitesNum)32 void TextOutput::Initialize(int testsNum, int suitesNum) 33 { 34 NN_UNUSED_VAR(testsNum); 35 m_SuiteNum = suitesNum; 36 m_CurrentSuiteIndex = 0; 37 m_CurrentTestIndex = 0; 38 m_pSuiteInfos = new SuiteInfo[m_SuiteNum]; 39 } 40 Finalize()41 void TextOutput::Finalize() 42 { 43 delete [] m_pSuiteInfos; 44 } 45 OnInitialize(int testsNum,int suitesNum)46 void TextOutput::OnInitialize(int testsNum, int suitesNum) 47 { 48 NN_PRINT_TEST_LOG("Test initialize.\n"); 49 NN_PRINT_TEST_LOG("%d tests exist\n", testsNum); 50 NN_PRINT_TEST_LOG("%d suites exist\n", suitesNum); 51 52 if(m_pSuiteInfos) 53 { 54 Finalize(); 55 } 56 Initialize(testsNum, suitesNum); 57 } 58 OnFinished(int testsNum,const Time & time)59 void TextOutput::OnFinished(int testsNum, const Time& time) 60 { 61 NN_PRINT_TEST_LOG("------------------------------\n"); 62 NN_PRINT_TEST_LOG("%d tests done.\n", testsNum); 63 NN_PRINT_TEST_LOG("Elapsed time: %lld\n", time.GetElapsedTime()); 64 65 // アサートの一覧を出力 66 int assertNum = 0; 67 for(int i = 0; i < m_SuiteNum; ++i) 68 { 69 if(m_pSuiteInfos[i].failureNum == 0) 70 { 71 continue; 72 } 73 NN_PRINT_TEST_LOG("\n"); 74 NN_PRINT_TEST_LOG("[%s]\n", m_pSuiteInfos[i].suiteName.GetBuffer()); 75 for(int j = 0; j < m_pSuiteInfos[i].testsNum; ++j) 76 { 77 if(m_pSuiteInfos[i].pTestInfos[j].failureCount != 0) 78 { 79 NN_PRINT_TEST_LOG(" [%s]\n", m_pSuiteInfos[i].pTestInfos[j].testName.GetBuffer()); 80 AssertInfos& assertInfos = m_pSuiteInfos[i].pTestInfos[j].assertInfos; 81 while(!assertInfos.IsEmpty()) 82 { 83 assertNum++; 84 PrintAssertInfo(assertInfos.PopFront()); 85 } 86 } 87 } 88 } 89 if(assertNum == 0) 90 { 91 NN_PRINT_TEST_LOG("All tests PASSED\n"); 92 } 93 else 94 { 95 NN_PRINT_TEST_LOG("%d asserts \n", assertNum); 96 NN_PRINT_TEST_LOG("Tests FAILED\n"); 97 } 98 } 99 PrintAssertInfo(const AssertInfo & info)100 void TextOutput::PrintAssertInfo(const AssertInfo& info) 101 { 102 const String& fileName = info.GetFilename(); 103 const String& message = info.GetMessage(); 104 NN_PRINT_TEST_LOG(" - %s, line:%d, %s\n", fileName.GetBuffer(), info.GetLine(), message.GetBuffer()); 105 } 106 OnSuiteStart(int testsNum,const String testName)107 void TextOutput::OnSuiteStart(int testsNum, const String testName) 108 { 109 NN_TASSERT_(m_pSuiteInfos); 110 NN_PRINT_TEST_LOG("\n"); 111 NN_PRINT_TEST_LOG("[%s]\n", testName.GetBuffer()); 112 m_CurrentTestIndex = 0; 113 m_pSuiteInfos[m_CurrentSuiteIndex].suiteName = testName; 114 m_pSuiteInfos[m_CurrentSuiteIndex].testsNum = testsNum; 115 m_pSuiteInfos[m_CurrentSuiteIndex].pTestInfos = new TestInfo[testsNum]; 116 } 117 OnSuiteEnd(int testsNum,const String suiteName,const Time & time)118 void TextOutput::OnSuiteEnd(int testsNum, const String suiteName, 119 const Time& time) 120 { 121 NN_UNUSED_VAR(suiteName); 122 123 NN_TASSERT_(m_pSuiteInfos); 124 NN_PRINT_TEST_LOG("\n"); 125 NN_PRINT_TEST_LOG(" Number of tests : %d\n", testsNum); 126 NN_PRINT_TEST_LOG(" Number of failure tests: %d\n", m_pSuiteInfos[m_CurrentSuiteIndex].failureNum); 127 NN_PRINT_TEST_LOG(" Elapsed time : %lld\n", time.GetElapsedTime()); 128 129 m_pSuiteInfos[m_CurrentSuiteIndex].elapsedTime = time; 130 m_CurrentSuiteIndex++; 131 } 132 OnTestStart(const String testName)133 void TextOutput::OnTestStart(const String testName) 134 { 135 NN_TASSERT_(m_pSuiteInfos); 136 TestInfo info; 137 m_pSuiteInfos[m_CurrentSuiteIndex].pTestInfos[m_CurrentTestIndex].testName = testName; 138 } 139 OnTestEnd(const String testName,bool isSuccess,const Time & time)140 void TextOutput::OnTestEnd(const String testName, bool isSuccess, 141 const Time& time) 142 { 143 NN_UNUSED_VAR(time); 144 NN_TASSERT_(m_pSuiteInfos); 145 if(!isSuccess) 146 { 147 NN_PRINT_TEST_LOG(" %s - [NG]\n", testName.GetBuffer()); 148 } 149 ++m_CurrentTestIndex; 150 } 151 OnAssert(const AssertInfo & info)152 void TextOutput::OnAssert(const AssertInfo& info) 153 { 154 NN_TASSERT_(m_pSuiteInfos); 155 // PrintAssertInfo(info); 156 157 m_pSuiteInfos[m_CurrentSuiteIndex].pTestInfos[m_CurrentTestIndex].assertInfos.PushBack(info); 158 if(m_pSuiteInfos[m_CurrentSuiteIndex].pTestInfos[m_CurrentTestIndex].failureCount == 0) 159 { 160 ++m_pSuiteInfos[m_CurrentSuiteIndex].failureNum; 161 } 162 ++m_pSuiteInfos[m_CurrentSuiteIndex].pTestInfos[m_CurrentTestIndex].failureCount; 163 } 164 165 }} 166