1e5c31af7Sopenharmony_ci/*------------------------------------------------------------------------- 2e5c31af7Sopenharmony_ci * drawElements Quality Program Tester Core 3e5c31af7Sopenharmony_ci * ---------------------------------------- 4e5c31af7Sopenharmony_ci * 5e5c31af7Sopenharmony_ci * Copyright 2014 The Android Open Source Project 6e5c31af7Sopenharmony_ci * 7e5c31af7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 8e5c31af7Sopenharmony_ci * you may not use this file except in compliance with the License. 9e5c31af7Sopenharmony_ci * You may obtain a copy of the License at 10e5c31af7Sopenharmony_ci * 11e5c31af7Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 12e5c31af7Sopenharmony_ci * 13e5c31af7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 14e5c31af7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 15e5c31af7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16e5c31af7Sopenharmony_ci * See the License for the specific language governing permissions and 17e5c31af7Sopenharmony_ci * limitations under the License. 18e5c31af7Sopenharmony_ci * 19e5c31af7Sopenharmony_ci *//*! 20e5c31af7Sopenharmony_ci * \file 21e5c31af7Sopenharmony_ci * \brief Base class for a test case. 22e5c31af7Sopenharmony_ci *//*--------------------------------------------------------------------*/ 23e5c31af7Sopenharmony_ci 24e5c31af7Sopenharmony_ci#include "tcuTestPackage.hpp" 25e5c31af7Sopenharmony_ci#include "tcuPlatform.hpp" 26e5c31af7Sopenharmony_ci 27e5c31af7Sopenharmony_ci#include "deString.h" 28e5c31af7Sopenharmony_ci 29e5c31af7Sopenharmony_ciusing std::vector; 30e5c31af7Sopenharmony_ci 31e5c31af7Sopenharmony_cinamespace tcu 32e5c31af7Sopenharmony_ci{ 33e5c31af7Sopenharmony_ci 34e5c31af7Sopenharmony_ci// TestPackage 35e5c31af7Sopenharmony_ci 36e5c31af7Sopenharmony_ciTestPackage::TestPackage (TestContext& testCtx, const char* name, const char* description) 37e5c31af7Sopenharmony_ci : TestNode(testCtx, NODETYPE_PACKAGE, name) 38e5c31af7Sopenharmony_ci , m_caseListFilter(nullptr) 39e5c31af7Sopenharmony_ci{ 40e5c31af7Sopenharmony_ci DE_UNREF(description); 41e5c31af7Sopenharmony_ci} 42e5c31af7Sopenharmony_ci 43e5c31af7Sopenharmony_ciTestPackage::~TestPackage (void) 44e5c31af7Sopenharmony_ci{ 45e5c31af7Sopenharmony_ci} 46e5c31af7Sopenharmony_ci 47e5c31af7Sopenharmony_civoid TestPackage::setCaseListFilter (const CaseListFilter* caseListFilter) 48e5c31af7Sopenharmony_ci{ 49e5c31af7Sopenharmony_ci m_caseListFilter = caseListFilter; 50e5c31af7Sopenharmony_ci} 51e5c31af7Sopenharmony_ci 52e5c31af7Sopenharmony_ciTestNode::IterateResult TestPackage::iterate (void) 53e5c31af7Sopenharmony_ci{ 54e5c31af7Sopenharmony_ci DE_ASSERT(DE_FALSE); // should never be here! 55e5c31af7Sopenharmony_ci throw InternalError("TestPackage::iterate() called!", "", __FILE__, __LINE__); 56e5c31af7Sopenharmony_ci} 57e5c31af7Sopenharmony_ci 58e5c31af7Sopenharmony_ci// TestPackageRegistry 59e5c31af7Sopenharmony_ci 60e5c31af7Sopenharmony_ciTestPackageRegistry::TestPackageRegistry (void) 61e5c31af7Sopenharmony_ci{ 62e5c31af7Sopenharmony_ci} 63e5c31af7Sopenharmony_ci 64e5c31af7Sopenharmony_ciTestPackageRegistry::~TestPackageRegistry (void) 65e5c31af7Sopenharmony_ci{ 66e5c31af7Sopenharmony_ci for (int i = 0; i < (int)m_packageInfos.size(); i++) 67e5c31af7Sopenharmony_ci delete m_packageInfos[i]; 68e5c31af7Sopenharmony_ci} 69e5c31af7Sopenharmony_ci 70e5c31af7Sopenharmony_ciTestPackageRegistry* TestPackageRegistry::getSingleton (void) 71e5c31af7Sopenharmony_ci{ 72e5c31af7Sopenharmony_ci return TestPackageRegistry::getOrDestroy(true); 73e5c31af7Sopenharmony_ci} 74e5c31af7Sopenharmony_ci 75e5c31af7Sopenharmony_civoid TestPackageRegistry::destroy (void) 76e5c31af7Sopenharmony_ci{ 77e5c31af7Sopenharmony_ci TestPackageRegistry::getOrDestroy(false); 78e5c31af7Sopenharmony_ci} 79e5c31af7Sopenharmony_ci 80e5c31af7Sopenharmony_ciTestPackageRegistry* TestPackageRegistry::getOrDestroy (bool isCreate) 81e5c31af7Sopenharmony_ci{ 82e5c31af7Sopenharmony_ci static TestPackageRegistry* s_ptr = DE_NULL; 83e5c31af7Sopenharmony_ci 84e5c31af7Sopenharmony_ci if (isCreate) 85e5c31af7Sopenharmony_ci { 86e5c31af7Sopenharmony_ci if (!s_ptr) 87e5c31af7Sopenharmony_ci s_ptr = new TestPackageRegistry(); 88e5c31af7Sopenharmony_ci 89e5c31af7Sopenharmony_ci return s_ptr; 90e5c31af7Sopenharmony_ci } 91e5c31af7Sopenharmony_ci else 92e5c31af7Sopenharmony_ci { 93e5c31af7Sopenharmony_ci if (s_ptr) 94e5c31af7Sopenharmony_ci { 95e5c31af7Sopenharmony_ci delete s_ptr; 96e5c31af7Sopenharmony_ci s_ptr = DE_NULL; 97e5c31af7Sopenharmony_ci } 98e5c31af7Sopenharmony_ci 99e5c31af7Sopenharmony_ci return DE_NULL; 100e5c31af7Sopenharmony_ci } 101e5c31af7Sopenharmony_ci} 102e5c31af7Sopenharmony_ci 103e5c31af7Sopenharmony_civoid TestPackageRegistry::registerPackage (const char* name, TestPackageCreateFunc createFunc) 104e5c31af7Sopenharmony_ci{ 105e5c31af7Sopenharmony_ci DE_ASSERT(getPackageInfoByName(name) == DE_NULL); 106e5c31af7Sopenharmony_ci m_packageInfos.push_back(new PackageInfo(name, createFunc)); 107e5c31af7Sopenharmony_ci} 108e5c31af7Sopenharmony_ci 109e5c31af7Sopenharmony_ciconst std::vector<TestPackageRegistry::PackageInfo*>& TestPackageRegistry::getPackageInfos (void) const 110e5c31af7Sopenharmony_ci{ 111e5c31af7Sopenharmony_ci return m_packageInfos; 112e5c31af7Sopenharmony_ci} 113e5c31af7Sopenharmony_ci 114e5c31af7Sopenharmony_ciTestPackageRegistry::PackageInfo* TestPackageRegistry::getPackageInfoByName (const char* packageName) const 115e5c31af7Sopenharmony_ci{ 116e5c31af7Sopenharmony_ci for (int i = 0; i < (int)m_packageInfos.size(); i++) 117e5c31af7Sopenharmony_ci { 118e5c31af7Sopenharmony_ci if (m_packageInfos[i]->name == packageName) 119e5c31af7Sopenharmony_ci return m_packageInfos[i]; 120e5c31af7Sopenharmony_ci } 121e5c31af7Sopenharmony_ci 122e5c31af7Sopenharmony_ci return DE_NULL; 123e5c31af7Sopenharmony_ci} 124e5c31af7Sopenharmony_ci 125e5c31af7Sopenharmony_ciTestPackage* TestPackageRegistry::createPackage (const char* name, TestContext& testCtx) const 126e5c31af7Sopenharmony_ci{ 127e5c31af7Sopenharmony_ci PackageInfo* info = getPackageInfoByName(name); 128e5c31af7Sopenharmony_ci return info ? info->createFunc(testCtx) : DE_NULL; 129e5c31af7Sopenharmony_ci} 130e5c31af7Sopenharmony_ci 131e5c31af7Sopenharmony_ci// TestPackageDescriptor 132e5c31af7Sopenharmony_ci 133e5c31af7Sopenharmony_ciTestPackageDescriptor::TestPackageDescriptor (const char* name, TestPackageCreateFunc createFunc) 134e5c31af7Sopenharmony_ci{ 135e5c31af7Sopenharmony_ci TestPackageRegistry::getSingleton()->registerPackage(name, createFunc); 136e5c31af7Sopenharmony_ci} 137e5c31af7Sopenharmony_ci 138e5c31af7Sopenharmony_ciTestPackageDescriptor::~TestPackageDescriptor (void) 139e5c31af7Sopenharmony_ci{ 140e5c31af7Sopenharmony_ci TestPackageRegistry::destroy(); 141e5c31af7Sopenharmony_ci} 142e5c31af7Sopenharmony_ci 143e5c31af7Sopenharmony_ci// TestPackageRoot 144e5c31af7Sopenharmony_ci 145e5c31af7Sopenharmony_ciTestPackageRoot::TestPackageRoot (TestContext& testCtx) 146e5c31af7Sopenharmony_ci : TestNode(testCtx, NODETYPE_ROOT, "") 147e5c31af7Sopenharmony_ci{ 148e5c31af7Sopenharmony_ci} 149e5c31af7Sopenharmony_ci 150e5c31af7Sopenharmony_ciTestPackageRoot::TestPackageRoot (TestContext& testCtx, const vector<TestNode*>& children) 151e5c31af7Sopenharmony_ci : TestNode(testCtx, NODETYPE_ROOT, "", children) 152e5c31af7Sopenharmony_ci{ 153e5c31af7Sopenharmony_ci} 154e5c31af7Sopenharmony_ci 155e5c31af7Sopenharmony_ciTestPackageRoot::TestPackageRoot (TestContext& testCtx, const TestPackageRegistry* packageRegistry) 156e5c31af7Sopenharmony_ci : TestNode(testCtx, NODETYPE_ROOT, "") 157e5c31af7Sopenharmony_ci{ 158e5c31af7Sopenharmony_ci const vector<TestPackageRegistry::PackageInfo*>& packageInfos = packageRegistry->getPackageInfos(); 159e5c31af7Sopenharmony_ci 160e5c31af7Sopenharmony_ci for (int i = 0; i < (int)packageInfos.size(); i++) 161e5c31af7Sopenharmony_ci addChild(packageInfos[i]->createFunc(testCtx)); 162e5c31af7Sopenharmony_ci} 163e5c31af7Sopenharmony_ci 164e5c31af7Sopenharmony_ciTestPackageRoot::~TestPackageRoot (void) 165e5c31af7Sopenharmony_ci{ 166e5c31af7Sopenharmony_ci} 167e5c31af7Sopenharmony_ci 168e5c31af7Sopenharmony_ciTestCase::IterateResult TestPackageRoot::iterate (void) 169e5c31af7Sopenharmony_ci{ 170e5c31af7Sopenharmony_ci DE_ASSERT(DE_FALSE); // should never be here! 171e5c31af7Sopenharmony_ci throw InternalError("TestPackageRoot::iterate() called!", "", __FILE__, __LINE__); 172e5c31af7Sopenharmony_ci} 173e5c31af7Sopenharmony_ci 174e5c31af7Sopenharmony_ci 175e5c31af7Sopenharmony_ci} // tcu 176