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 Test result collector 22 *//*--------------------------------------------------------------------*/ 23 24 #include "tcuResultCollector.hpp" 25 #include "tcuTestContext.hpp" 26 #include "tcuTestLog.hpp" 27 28 namespace tcu 29 { 30 31 static int testResultSeverity (qpTestResult testResult) 32 { 33 switch (testResult) 34 { 35 case QP_TEST_RESULT_LAST: return -1; 36 case QP_TEST_RESULT_PASS: return 0; 37 case QP_TEST_RESULT_PENDING: return 10; 38 case QP_TEST_RESULT_NOT_SUPPORTED: return 20; 39 case QP_TEST_RESULT_QUALITY_WARNING: return 30; 40 case QP_TEST_RESULT_COMPATIBILITY_WARNING: return 40; 41 case QP_TEST_RESULT_TIMEOUT: return 50; 42 case QP_TEST_RESULT_FAIL: return 100; 43 case QP_TEST_RESULT_RESOURCE_ERROR: return 110; 44 case QP_TEST_RESULT_INTERNAL_ERROR: return 120; 45 case QP_TEST_RESULT_CRASH: return 150; 46 default: DE_FATAL("Impossible case"); 47 } 48 return 0; 49 } 50 51 ResultCollector::ResultCollector (void) 52 : m_log (DE_NULL) 53 , m_prefix ("") 54 , m_result (QP_TEST_RESULT_LAST) 55 , m_message ("Pass") 56 { 57 } 58 59 ResultCollector::ResultCollector (TestLog& log, const std::string& prefix) 60 : m_log (&log) 61 , m_prefix (prefix) 62 , m_result (QP_TEST_RESULT_LAST) 63 , m_message ("Pass") 64 { 65 } 66 67 qpTestResult ResultCollector::getResult (void) const 68 { 69 if (m_result == QP_TEST_RESULT_LAST) 70 return QP_TEST_RESULT_PASS; 71 else 72 return m_result; 73 } 74 75 void ResultCollector::addResult (qpTestResult result, const std::string& msg) 76 { 77 if (m_log != DE_NULL) 78 (*m_log) << TestLog::Message << m_prefix << msg << TestLog::EndMessage; 79 80 if (testResultSeverity(result) > testResultSeverity(m_result)) 81 { 82 m_result = result; 83 m_message = msg; 84 } 85 } 86 87 bool ResultCollector::checkResult (bool condition, qpTestResult result, const std::string& msg) 88 { 89 if (!condition) 90 addResult(result, msg); 91 return condition; 92 } 93 94 void ResultCollector::fail (const std::string& msg) 95 { 96 addResult(QP_TEST_RESULT_FAIL, msg); 97 } 98 99 bool ResultCollector::check (bool condition, const std::string& msg) 100 { 101 return checkResult(condition, QP_TEST_RESULT_FAIL, msg); 102 } 103 104 void ResultCollector::setTestContextResult (TestContext& testCtx) 105 { 106 testCtx.setTestResult(getResult(), getMessage().c_str()); 107 } 108 109 } // tcu 110