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_ASSERT(!"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 void ResultCollector::addResult (qpTestResult result, const std::string& msg) 68 { 69 if (m_log != DE_NULL) 70 (*m_log) << TestLog::Message << m_prefix << msg << TestLog::EndMessage; 71 72 if (testResultSeverity(result) > testResultSeverity(m_result)) 73 { 74 m_result = result; 75 m_message = msg; 76 } 77 } 78 79 bool ResultCollector::checkResult (bool condition, qpTestResult result, const std::string& msg) 80 { 81 if (!condition) 82 addResult(result, msg); 83 return condition; 84 } 85 86 void ResultCollector::fail (const std::string& msg) 87 { 88 addResult(QP_TEST_RESULT_FAIL, msg); 89 } 90 91 bool ResultCollector::check (bool condition, const std::string& msg) 92 { 93 return checkResult(condition, QP_TEST_RESULT_FAIL, msg); 94 } 95 96 void ResultCollector::setTestContextResult (TestContext& testCtx) 97 { 98 if (m_result == QP_TEST_RESULT_LAST) 99 testCtx.setTestResult(QP_TEST_RESULT_PASS, m_message.c_str()); 100 else 101 testCtx.setTestResult(m_result, m_message.c_str()); 102 } 103 104 } // tcu 105