Home | History | Annotate | Download | only in egl
      1 /*-------------------------------------------------------------------------
      2  * drawElements Quality Program EGL Module
      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 API test case.
     22  *//*--------------------------------------------------------------------*/
     23 
     24 #include "teglApiCase.hpp"
     25 #include "egluStrUtil.hpp"
     26 
     27 using tcu::TestLog;
     28 
     29 namespace deqp
     30 {
     31 namespace egl
     32 {
     33 
     34 ApiCase::ApiCase (EglTestContext& eglTestCtx, const char* name, const char* description)
     35 	: TestCase		(eglTestCtx, name, description)
     36 	, CallLogWrapper(eglTestCtx.getTestContext().getLog())
     37 {
     38 }
     39 
     40 ApiCase::~ApiCase (void)
     41 {
     42 }
     43 
     44 ApiCase::IterateResult ApiCase::iterate (void)
     45 {
     46 	// Initialize result to pass.
     47 	m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
     48 
     49 	// Enable call logging.
     50 	enableLogging(true);
     51 
     52 	// Run test.
     53 	test();
     54 
     55 	return STOP;
     56 }
     57 
     58 void ApiCase::expectError (EGLenum expected)
     59 {
     60 	EGLenum err = eglGetError();
     61 	if (err != expected)
     62 	{
     63 		m_testCtx.getLog() << TestLog::Message << "// ERROR: expected " << eglu::getErrorStr(expected) << TestLog::EndMessage;
     64 		if (m_testCtx.getTestResult() == QP_TEST_RESULT_PASS)
     65 			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid error");
     66 	}
     67 }
     68 
     69 void ApiCase::expectBoolean (EGLBoolean expected, EGLBoolean got)
     70 {
     71 	if (expected != got)
     72 	{
     73 		m_testCtx.getLog() << TestLog::Message << "// ERROR: expected " << (expected ? "EGL_TRUE" : "EGL_FALSE") << TestLog::EndMessage;
     74 		if (m_testCtx.getTestResult() == QP_TEST_RESULT_PASS)
     75 			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid value");
     76 	}
     77 }
     78 
     79 void ApiCase::expectNoContext (EGLContext got)
     80 {
     81 	if (got != EGL_NO_CONTEXT)
     82 	{
     83 		m_testCtx.getLog() << TestLog::Message << "// ERROR: expected EGL_NO_CONTEXT" << TestLog::EndMessage;
     84 		if (m_testCtx.getTestResult() == QP_TEST_RESULT_PASS)
     85 			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid value");
     86 		eglDestroyContext(getDisplay(), got);
     87 	}
     88 }
     89 
     90 void ApiCase::expectNoSurface (EGLSurface got)
     91 {
     92 	if (got != EGL_NO_CONTEXT)
     93 	{
     94 		m_testCtx.getLog() << TestLog::Message << "// ERROR: expected EGL_NO_SURFACE" << TestLog::EndMessage;
     95 		if (m_testCtx.getTestResult() == QP_TEST_RESULT_PASS)
     96 			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid value");
     97 		eglDestroySurface(getDisplay(), got);
     98 	}
     99 }
    100 
    101 void ApiCase::expectNoDisplay (EGLDisplay got)
    102 {
    103 	if (got != EGL_NO_CONTEXT)
    104 	{
    105 		m_testCtx.getLog() << TestLog::Message << "// ERROR: expected EGL_NO_DISPLAY" << TestLog::EndMessage;
    106 		if (m_testCtx.getTestResult() == QP_TEST_RESULT_PASS)
    107 			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid value");
    108 	}
    109 }
    110 
    111 void ApiCase::expectNull (const void* got)
    112 {
    113 	if (got != EGL_NO_CONTEXT)
    114 	{
    115 		m_testCtx.getLog() << TestLog::Message << "// ERROR: expected NULL" << TestLog::EndMessage;
    116 		if (m_testCtx.getTestResult() == QP_TEST_RESULT_PASS)
    117 			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid value");
    118 	}
    119 }
    120 
    121 bool ApiCase::getConfig (EGLConfig* config,const eglu::FilterList& filters)
    122 {
    123 	for (std::vector<eglu::ConfigInfo>::const_iterator cfgIter = m_eglTestCtx.getConfigs().begin(); cfgIter != m_eglTestCtx.getConfigs().end(); ++cfgIter)
    124 	{
    125 		if (filters.match(*cfgIter))
    126 		{
    127 			EGLint		numCfgs;
    128 			EGLBoolean	ok;
    129 			EGLint		attribs[] =
    130 			{
    131 				EGL_CONFIG_ID,			cfgIter->configId,
    132 				EGL_TRANSPARENT_TYPE,	EGL_DONT_CARE,
    133 				EGL_COLOR_BUFFER_TYPE,	EGL_DONT_CARE,
    134 				EGL_RENDERABLE_TYPE,	EGL_DONT_CARE,
    135 				EGL_SURFACE_TYPE,		EGL_DONT_CARE,
    136 				EGL_NONE
    137 			};
    138 
    139 			ok = eglChooseConfig(getDisplay(), &attribs[0], config, 1, &numCfgs);
    140 			expectTrue(ok);
    141 
    142 			if (ok && numCfgs >= 1)
    143 				return true;
    144 			else
    145 			{
    146 				m_testCtx.getLog() << TestLog::Message << "// ERROR: expected at least one config with id " << cfgIter->configId << TestLog::EndMessage;
    147 				if (m_testCtx.getTestResult() == QP_TEST_RESULT_PASS)
    148 					m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid value");
    149 				return 0;
    150 			}
    151 		}
    152 	}
    153 
    154 	return DE_NULL;
    155 }
    156 
    157 } // egl
    158 } // deqp
    159