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 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 { 45 setCurrentArchive(m_rootArchive); 46 } 47 48 void TestContext::touchWatchdog (void) 49 { 50 if (m_watchDog) 51 qpWatchDog_touch(m_watchDog); 52 } 53 54 void TestContext::setTestResult (qpTestResult testResult, const char* description) 55 { 56 m_testResult = testResult; 57 m_testResultDesc = description; 58 } 59 60 static int testResultSeverity (qpTestResult testResult) 61 { 62 switch (testResult) 63 { 64 case QP_TEST_RESULT_LAST: return -1; 65 case QP_TEST_RESULT_PASS: return 0; 66 case QP_TEST_RESULT_PENDING: return 10; 67 case QP_TEST_RESULT_NOT_SUPPORTED: return 20; 68 case QP_TEST_RESULT_QUALITY_WARNING: return 30; 69 case QP_TEST_RESULT_COMPATIBILITY_WARNING: return 40; 70 case QP_TEST_RESULT_TIMEOUT: return 50; 71 case QP_TEST_RESULT_FAIL: return 100; 72 case QP_TEST_RESULT_RESOURCE_ERROR: return 110; 73 case QP_TEST_RESULT_INTERNAL_ERROR: return 120; 74 case QP_TEST_RESULT_CRASH: return 150; 75 default: DE_ASSERT(!"Impossible case"); 76 } 77 return 0; 78 } 79 80 ResultCollector::ResultCollector (void) 81 : m_log (DE_NULL) 82 , m_prefix ("") 83 , m_result (QP_TEST_RESULT_LAST) 84 , m_message ("Pass") 85 { 86 } 87 88 ResultCollector::ResultCollector (TestLog& log, const std::string& prefix) 89 : m_log (&log) 90 , m_prefix (prefix) 91 , m_result (QP_TEST_RESULT_LAST) 92 , m_message ("Pass") 93 { 94 } 95 96 void ResultCollector::addResult (qpTestResult result, const std::string& msg) 97 { 98 if (m_log != DE_NULL) 99 (*m_log) << TestLog::Message << m_prefix << msg << TestLog::EndMessage; 100 101 if (testResultSeverity(result) > testResultSeverity(m_result)) 102 { 103 m_result = result; 104 m_message = msg; 105 } 106 } 107 108 bool ResultCollector::checkResult (bool condition, qpTestResult result, const std::string& msg) 109 { 110 if (!condition) 111 addResult(result, msg); 112 return condition; 113 } 114 115 void ResultCollector::fail (const std::string& msg) 116 { 117 addResult(QP_TEST_RESULT_FAIL, msg); 118 } 119 120 bool ResultCollector::check (bool condition, const std::string& msg) 121 { 122 return checkResult(condition, QP_TEST_RESULT_FAIL, msg); 123 } 124 125 void ResultCollector::setTestContextResult (TestContext& testCtx) 126 { 127 if (m_result == QP_TEST_RESULT_LAST) 128 testCtx.setTestResult(QP_TEST_RESULT_PASS, m_message.c_str()); 129 else 130 testCtx.setTestResult(m_result, m_message.c_str()); 131 } 132 133 } // tcu 134