/*------------------------------------------------------------------------- * OpenGL Conformance Test Suite * ----------------------------- * * Copyright (c) 2017 The Khronos Group Inc. * * 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 glcExtensionsExposeTests.cpp * \brief Test that check if specified substring is not in extension name. */ /*--------------------------------------------------------------------*/ #include "glcExposedExtensionsTests.hpp" #include "gluContextInfo.hpp" #include "gluDefs.hpp" #include "glwEnums.hpp" #include "glwFunctions.hpp" #include "tcuCommandLine.hpp" #include "tcuTestLog.hpp" #include #include using namespace glu; namespace glcts { class ExposedExtensionsTest : public deqp::TestCase { public: /* Public methods */ ExposedExtensionsTest(deqp::Context& context, std::string notAllowedSubstring, const std::vector* allowedExceptions = NULL); virtual ~ExposedExtensionsTest(void); void deinit(void); void init(void); tcu::TestNode::IterateResult iterate(void); private: /* Private members */ std::string m_notAllowedSubstring; std::vector m_allowedExceptions; }; /** Constructor. * * @param context Rendering context * @param name Test name * @param description Test description * @param notAllowedSubstring Substring that should not be found in extension name. * @param allowedExceptions List of exceptions that are allowed even despite * containing notAllowedFraze. */ ExposedExtensionsTest::ExposedExtensionsTest(deqp::Context& context, std::string notAllowedSubstring, const std::vector* allowedExceptions) : deqp::TestCase(context, "validate_extensions", "Test verifies if extensions with " "specified phrase are not exposed.") , m_notAllowedSubstring(notAllowedSubstring) { if (allowedExceptions) { m_allowedExceptions = *allowedExceptions; } } ExposedExtensionsTest::~ExposedExtensionsTest(void) { } /** Tears down any GL objects set up to run the test. */ void ExposedExtensionsTest::deinit(void) { } /** Stub init method */ void ExposedExtensionsTest::init(void) { } /** Executes test iteration. * * @return Returns STOP when test has finished executing, CONTINUE if more iterations are needed. */ tcu::TestNode::IterateResult ExposedExtensionsTest::iterate(void) { typedef std::vector string_vector; const string_vector& extensions = m_context.getContextInfo().getExtensions(); string_vector::const_iterator currExtension = extensions.begin(); bool allExceptionsAreValid = true; while (currExtension != extensions.end()) { // If the current extension does not contain not allowed substring then continue if (currExtension->find(m_notAllowedSubstring) == std::string::npos) { ++currExtension; continue; } // Check if current extension is one of allowed exceptions bool currExtensionIsNotAnException = true; string_vector::const_iterator exception = m_allowedExceptions.begin(); while (exception != m_allowedExceptions.end()) { if ((*exception).compare(*currExtension) == 0) { currExtensionIsNotAnException = false; break; } ++exception; } // Current exception is not on allowed exceptions list, test will fail // but other exceptions will be checked to log all not allowed extensions if (currExtensionIsNotAnException) { m_testCtx.getLog() << tcu::TestLog::Message << "Implementations should not expose " << *currExtension << tcu::TestLog::EndMessage; allExceptionsAreValid = false; } ++currExtension; } if (allExceptionsAreValid) { m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); return STOP; } m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail"); return STOP; } ExposedExtensionsTests::ExposedExtensionsTests(deqp::Context& context) : TestCaseGroup(context, "exposed_extensions", "Verifies exposed extensions") { } void ExposedExtensionsTests::init(void) { if (isContextTypeES(m_context.getRenderContext().getType())) { addChild(new ExposedExtensionsTest(m_context, "ARB")); } else { std::vector allowedExtensions(1, "GL_OES_EGL_image"); addChild(new glcts::ExposedExtensionsTest(getContext(), "OES", &allowedExtensions)); } } } /* glcts namespace */