| /*------------------------------------------------------------------------- |
| * drawElements Quality Program EGL Module |
| * --------------------------------------- |
| * |
| * Copyright 2014 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| *//*! |
| * \file |
| * \brief EGL Implementation Information Tests |
| *//*--------------------------------------------------------------------*/ |
| |
| #include "teglInfoTests.hpp" |
| #include "teglConfigList.hpp" |
| #include "tcuTestLog.hpp" |
| #include "deStringUtil.hpp" |
| #include "egluUtil.hpp" |
| #include "eglwLibrary.hpp" |
| #include "eglwEnums.hpp" |
| |
| #include <vector> |
| #include <string> |
| #include <sstream> |
| |
| namespace deqp |
| { |
| namespace egl |
| { |
| |
| using std::vector; |
| using std::string; |
| using tcu::TestLog; |
| using namespace eglw; |
| |
| static int toInt (std::string str) |
| { |
| std::istringstream strStream(str); |
| |
| int out; |
| strStream >> out; |
| return out; |
| } |
| |
| class InfoCase : public TestCase |
| { |
| public: |
| InfoCase (EglTestContext& eglTestCtx, const char* name, const char* description) |
| : TestCase (eglTestCtx, name, description) |
| , m_display (EGL_NO_DISPLAY) |
| , m_version (0, 0) |
| { |
| } |
| |
| void init (void) |
| { |
| DE_ASSERT(m_display == EGL_NO_DISPLAY); |
| m_display = eglu::getAndInitDisplay(m_eglTestCtx.getNativeDisplay(), &m_version); |
| } |
| |
| void deinit (void) |
| { |
| m_eglTestCtx.getLibrary().terminate(m_display); |
| m_display = EGL_NO_DISPLAY; |
| } |
| |
| protected: |
| EGLDisplay m_display; |
| eglu::Version m_version; |
| }; |
| |
| class QueryStringCase : public InfoCase |
| { |
| public: |
| QueryStringCase (EglTestContext& eglTestCtx, const char* name, const char* description, EGLint query) |
| : InfoCase (eglTestCtx, name, description) |
| , m_query (query) |
| { |
| } |
| |
| void validateString (const std::string& result) |
| { |
| tcu::TestLog& log = m_testCtx.getLog(); |
| std::vector<std::string> tokens = de::splitString(result, ' '); |
| |
| if (m_query == EGL_VERSION) |
| { |
| const int dispMajor = m_version.getMajor(); |
| const int dispMinor = m_version.getMinor(); |
| |
| const std::vector<std::string> versionTokens = de::splitString(tokens[0], '.'); |
| |
| if (versionTokens.size() < 2) |
| { |
| log << TestLog::Message << " Fail, first part of the string must be in the format <major_version.minor_version>" << TestLog::EndMessage; |
| m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Invalid version string"); |
| } |
| else |
| { |
| const int stringMajor = toInt(versionTokens[0]); |
| const int stringMinor = toInt(versionTokens[1]); |
| |
| if (stringMajor != dispMajor || stringMinor != dispMinor) |
| { |
| log << TestLog::Message << " Fail, version numer (" << stringMajor << "." << stringMinor |
| << ") does not match the one reported by eglInitialize (" << dispMajor << "." << dispMinor << ")" << TestLog::EndMessage; |
| m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Version number mismatch"); |
| } |
| } |
| } |
| } |
| |
| IterateResult iterate (void) |
| { |
| const Library& egl = m_eglTestCtx.getLibrary(); |
| const char* result = egl.queryString(m_display, m_query); |
| EGLU_CHECK_MSG(egl, "eglQueryString() failed"); |
| |
| m_testCtx.getLog() << tcu::TestLog::Message << result << tcu::TestLog::EndMessage; |
| m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); |
| |
| validateString(result); |
| |
| return STOP; |
| } |
| |
| private: |
| EGLint m_query; |
| }; |
| |
| class QueryExtensionsCase : public InfoCase |
| { |
| public: |
| QueryExtensionsCase (EglTestContext& eglTestCtx) |
| : InfoCase (eglTestCtx, "extensions", "Supported Extensions") |
| { |
| } |
| |
| IterateResult iterate (void) |
| { |
| const Library& egl = m_eglTestCtx.getLibrary(); |
| vector<string> extensions = eglu::getDisplayExtensions(egl, m_display); |
| |
| for (vector<string>::const_iterator i = extensions.begin(); i != extensions.end(); i++) |
| m_testCtx.getLog() << tcu::TestLog::Message << *i << tcu::TestLog::EndMessage; |
| |
| m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); |
| |
| return STOP; |
| } |
| }; |
| |
| InfoTests::InfoTests (EglTestContext& eglTestCtx) |
| : TestCaseGroup(eglTestCtx, "info", "Platform Information") |
| { |
| } |
| |
| InfoTests::~InfoTests (void) |
| { |
| } |
| |
| void InfoTests::init (void) |
| { |
| addChild(new QueryStringCase(m_eglTestCtx, "version", "EGL Version", EGL_VERSION)); |
| addChild(new QueryStringCase(m_eglTestCtx, "vendor", "EGL Vendor", EGL_VENDOR)); |
| addChild(new QueryStringCase(m_eglTestCtx, "client_apis", "Supported client APIs", EGL_CLIENT_APIS)); |
| addChild(new QueryExtensionsCase(m_eglTestCtx)); |
| addChild(new ConfigList(m_eglTestCtx)); |
| } |
| |
| } // egl |
| } // deqp |