Home | History | Annotate | Download | only in common
      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