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