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