1/*------------------------------------------------------------------------- 2 * drawElements Quality Program Tester Core 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 Base class for a test case. 22 *//*--------------------------------------------------------------------*/ 23 24#include "tcuTestPackage.hpp" 25#include "tcuPlatform.hpp" 26 27#include "deString.h" 28 29using std::vector; 30 31namespace tcu 32{ 33 34// TestPackage 35 36TestPackage::TestPackage (TestContext& testCtx, const char* name, const char* description) 37 : TestNode(testCtx, NODETYPE_PACKAGE, name) 38 , m_caseListFilter(nullptr) 39{ 40 DE_UNREF(description); 41} 42 43TestPackage::~TestPackage (void) 44{ 45} 46 47void TestPackage::setCaseListFilter (const CaseListFilter* caseListFilter) 48{ 49 m_caseListFilter = caseListFilter; 50} 51 52TestNode::IterateResult TestPackage::iterate (void) 53{ 54 DE_ASSERT(DE_FALSE); // should never be here! 55 throw InternalError("TestPackage::iterate() called!", "", __FILE__, __LINE__); 56} 57 58// TestPackageRegistry 59 60TestPackageRegistry::TestPackageRegistry (void) 61{ 62} 63 64TestPackageRegistry::~TestPackageRegistry (void) 65{ 66 for (int i = 0; i < (int)m_packageInfos.size(); i++) 67 delete m_packageInfos[i]; 68} 69 70TestPackageRegistry* TestPackageRegistry::getSingleton (void) 71{ 72 return TestPackageRegistry::getOrDestroy(true); 73} 74 75void TestPackageRegistry::destroy (void) 76{ 77 TestPackageRegistry::getOrDestroy(false); 78} 79 80TestPackageRegistry* TestPackageRegistry::getOrDestroy (bool isCreate) 81{ 82 static TestPackageRegistry* s_ptr = DE_NULL; 83 84 if (isCreate) 85 { 86 if (!s_ptr) 87 s_ptr = new TestPackageRegistry(); 88 89 return s_ptr; 90 } 91 else 92 { 93 if (s_ptr) 94 { 95 delete s_ptr; 96 s_ptr = DE_NULL; 97 } 98 99 return DE_NULL; 100 } 101} 102 103void TestPackageRegistry::registerPackage (const char* name, TestPackageCreateFunc createFunc) 104{ 105 DE_ASSERT(getPackageInfoByName(name) == DE_NULL); 106 m_packageInfos.push_back(new PackageInfo(name, createFunc)); 107} 108 109const std::vector<TestPackageRegistry::PackageInfo*>& TestPackageRegistry::getPackageInfos (void) const 110{ 111 return m_packageInfos; 112} 113 114TestPackageRegistry::PackageInfo* TestPackageRegistry::getPackageInfoByName (const char* packageName) const 115{ 116 for (int i = 0; i < (int)m_packageInfos.size(); i++) 117 { 118 if (m_packageInfos[i]->name == packageName) 119 return m_packageInfos[i]; 120 } 121 122 return DE_NULL; 123} 124 125TestPackage* TestPackageRegistry::createPackage (const char* name, TestContext& testCtx) const 126{ 127 PackageInfo* info = getPackageInfoByName(name); 128 return info ? info->createFunc(testCtx) : DE_NULL; 129} 130 131// TestPackageDescriptor 132 133TestPackageDescriptor::TestPackageDescriptor (const char* name, TestPackageCreateFunc createFunc) 134{ 135 TestPackageRegistry::getSingleton()->registerPackage(name, createFunc); 136} 137 138TestPackageDescriptor::~TestPackageDescriptor (void) 139{ 140 TestPackageRegistry::destroy(); 141} 142 143// TestPackageRoot 144 145TestPackageRoot::TestPackageRoot (TestContext& testCtx) 146 : TestNode(testCtx, NODETYPE_ROOT, "") 147{ 148} 149 150TestPackageRoot::TestPackageRoot (TestContext& testCtx, const vector<TestNode*>& children) 151 : TestNode(testCtx, NODETYPE_ROOT, "", children) 152{ 153} 154 155TestPackageRoot::TestPackageRoot (TestContext& testCtx, const TestPackageRegistry* packageRegistry) 156 : TestNode(testCtx, NODETYPE_ROOT, "") 157{ 158 const vector<TestPackageRegistry::PackageInfo*>& packageInfos = packageRegistry->getPackageInfos(); 159 160 for (int i = 0; i < (int)packageInfos.size(); i++) 161 addChild(packageInfos[i]->createFunc(testCtx)); 162} 163 164TestPackageRoot::~TestPackageRoot (void) 165{ 166} 167 168TestCase::IterateResult TestPackageRoot::iterate (void) 169{ 170 DE_ASSERT(DE_FALSE); // should never be here! 171 throw InternalError("TestPackageRoot::iterate() called!", "", __FILE__, __LINE__); 172} 173 174 175} // tcu 176