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 28namespace tcu 29{ 30 31TestContext::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 49void TestContext::touchWatchdog (void) 50{ 51 if (m_watchDog) 52 qpWatchDog_touch(m_watchDog); 53} 54 55void TestContext::setTestResult (qpTestResult testResult, const char* description) 56{ 57 m_testResult = testResult; 58 m_testResultDesc = description; 59} 60 61static 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 81ResultCollector::ResultCollector (void) 82 : m_log (DE_NULL) 83 , m_prefix ("") 84 , m_result (QP_TEST_RESULT_LAST) 85 , m_message ("Pass") 86{ 87} 88 89ResultCollector::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 97void 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 109bool ResultCollector::checkResult (bool condition, qpTestResult result, const std::string& msg) 110{ 111 if (!condition) 112 addResult(result, msg); 113 return condition; 114} 115 116void ResultCollector::fail (const std::string& msg) 117{ 118 addResult(QP_TEST_RESULT_FAIL, msg); 119} 120 121bool ResultCollector::check (bool condition, const std::string& msg) 122{ 123 return checkResult(condition, QP_TEST_RESULT_FAIL, msg); 124} 125 126void 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