1 /*-------------------------------------------------------------------------
2 * drawElements Quality Program Tester Core
3 * ----------------------------------------
4 *
5 * Copyright 2014 The Android Open Source Project
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 *//*!
20 * \file
21 * \brief Context shared between test cases.
22 *//*--------------------------------------------------------------------*/
23
24 #include "tcuTestContext.hpp"
25
26 #include "tcuTestLog.hpp"
27
28 namespace tcu
29 {
30
TestContext(Platform & platform,Archive & rootArchive,TestLog & log,const CommandLine & cmdLine,qpWatchDog * watchDog)31 TestContext::TestContext (
32 Platform& platform,
33 Archive& rootArchive,
34 TestLog& log,
35 const CommandLine& cmdLine,
36 qpWatchDog* watchDog)
37 : m_platform (platform)
38 , m_rootArchive (rootArchive)
39 , m_log (log)
40 , m_cmdLine (cmdLine)
41 , m_watchDog (watchDog)
42 , m_curArchive (DE_NULL)
43 , m_testResult (QP_TEST_RESULT_LAST)
44 , m_terminateAfter (false)
45 {
46 setCurrentArchive(m_rootArchive);
47 }
48
touchWatchdog(void)49 void TestContext::touchWatchdog (void)
50 {
51 if (m_watchDog)
52 qpWatchDog_touch(m_watchDog);
53 }
54
setTestResult(qpTestResult testResult,const char * description)55 void TestContext::setTestResult (qpTestResult testResult, const char* description)
56 {
57 m_testResult = testResult;
58 m_testResultDesc = description;
59 }
60
testResultSeverity(qpTestResult testResult)61 static int testResultSeverity (qpTestResult testResult)
62 {
63 switch (testResult)
64 {
65 case QP_TEST_RESULT_LAST: return -1;
66 case QP_TEST_RESULT_PASS: return 0;
67 case QP_TEST_RESULT_PENDING: return 10;
68 case QP_TEST_RESULT_NOT_SUPPORTED: return 20;
69 case QP_TEST_RESULT_QUALITY_WARNING: return 30;
70 case QP_TEST_RESULT_COMPATIBILITY_WARNING: return 40;
71 case QP_TEST_RESULT_TIMEOUT: return 50;
72 case QP_TEST_RESULT_FAIL: return 100;
73 case QP_TEST_RESULT_RESOURCE_ERROR: return 110;
74 case QP_TEST_RESULT_INTERNAL_ERROR: return 120;
75 case QP_TEST_RESULT_CRASH: return 150;
76 default: DE_ASSERT(!"Impossible case");
77 }
78 return 0;
79 }
80
ResultCollector(void)81 ResultCollector::ResultCollector (void)
82 : m_log (DE_NULL)
83 , m_prefix ("")
84 , m_result (QP_TEST_RESULT_LAST)
85 , m_message ("Pass")
86 {
87 }
88
ResultCollector(TestLog & log,const std::string & prefix)89 ResultCollector::ResultCollector (TestLog& log, const std::string& prefix)
90 : m_log (&log)
91 , m_prefix (prefix)
92 , m_result (QP_TEST_RESULT_LAST)
93 , m_message ("Pass")
94 {
95 }
96
addResult(qpTestResult result,const std::string & msg)97 void ResultCollector::addResult (qpTestResult result, const std::string& msg)
98 {
99 if (m_log != DE_NULL)
100 (*m_log) << TestLog::Message << m_prefix << msg << TestLog::EndMessage;
101
102 if (testResultSeverity(result) > testResultSeverity(m_result))
103 {
104 m_result = result;
105 m_message = msg;
106 }
107 }
108
checkResult(bool condition,qpTestResult result,const std::string & msg)109 bool ResultCollector::checkResult (bool condition, qpTestResult result, const std::string& msg)
110 {
111 if (!condition)
112 addResult(result, msg);
113 return condition;
114 }
115
fail(const std::string & msg)116 void ResultCollector::fail (const std::string& msg)
117 {
118 addResult(QP_TEST_RESULT_FAIL, msg);
119 }
120
check(bool condition,const std::string & msg)121 bool ResultCollector::check (bool condition, const std::string& msg)
122 {
123 return checkResult(condition, QP_TEST_RESULT_FAIL, msg);
124 }
125
setTestContextResult(TestContext & testCtx)126 void ResultCollector::setTestContextResult (TestContext& testCtx)
127 {
128 if (m_result == QP_TEST_RESULT_LAST)
129 testCtx.setTestResult(QP_TEST_RESULT_PASS, m_message.c_str());
130 else
131 testCtx.setTestResult(m_result, m_message.c_str());
132 }
133
134 } // tcu
135