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, description) 38{ 39} 40 41TestPackage::~TestPackage (void) 42{ 43} 44 45TestNode::IterateResult TestPackage::iterate (void) 46{ 47 DE_ASSERT(DE_FALSE); // should never be here! 48 throw InternalError("TestPackage::iterate() called!", "", __FILE__, __LINE__); 49} 50 51// TestPackageRegistry 52 53TestPackageRegistry::TestPackageRegistry (void) 54{ 55} 56 57TestPackageRegistry::~TestPackageRegistry (void) 58{ 59 for (int i = 0; i < (int)m_packageInfos.size(); i++) 60 delete m_packageInfos[i]; 61} 62 63TestPackageRegistry* TestPackageRegistry::getSingleton (void) 64{ 65 return TestPackageRegistry::getOrDestroy(true); 66} 67 68void TestPackageRegistry::destroy (void) 69{ 70 TestPackageRegistry::getOrDestroy(false); 71} 72 73TestPackageRegistry* TestPackageRegistry::getOrDestroy (bool isCreate) 74{ 75 static TestPackageRegistry* s_ptr = DE_NULL; 76 77 if (isCreate) 78 { 79 if (!s_ptr) 80 s_ptr = new TestPackageRegistry(); 81 82 return s_ptr; 83 } 84 else 85 { 86 if (s_ptr) 87 { 88 delete s_ptr; 89 s_ptr = DE_NULL; 90 } 91 92 return DE_NULL; 93 } 94} 95 96void TestPackageRegistry::registerPackage (const char* name, TestPackageCreateFunc createFunc) 97{ 98 m_packageInfos.push_back(new PackageInfo(name, createFunc)); 99} 100 101const std::vector<TestPackageRegistry::PackageInfo*>& TestPackageRegistry::getPackageInfos (void) const 102{ 103 return m_packageInfos; 104} 105 106TestPackageRegistry::PackageInfo* TestPackageRegistry::getPackageInfoByName (const char* packageName) const 107{ 108 for (int i = 0; i < (int)m_packageInfos.size(); i++) 109 { 110 if (m_packageInfos[i]->name == packageName) 111 return m_packageInfos[i]; 112 } 113 114 return DE_NULL; 115} 116 117TestPackage* TestPackageRegistry::createPackage (const char* name, TestContext& testCtx) const 118{ 119 PackageInfo* info = getPackageInfoByName(name); 120 return info ? info->createFunc(testCtx) : DE_NULL; 121} 122 123// TestPackageDescriptor 124 125TestPackageDescriptor::TestPackageDescriptor (const char* name, TestPackageCreateFunc createFunc) 126{ 127 TestPackageRegistry::getSingleton()->registerPackage(name, createFunc); 128} 129 130TestPackageDescriptor::~TestPackageDescriptor (void) 131{ 132 TestPackageRegistry::destroy(); 133} 134 135// TestPackageRoot 136 137TestPackageRoot::TestPackageRoot (TestContext& testCtx) 138 : TestNode(testCtx, NODETYPE_ROOT, "", "") 139{ 140} 141 142TestPackageRoot::TestPackageRoot (TestContext& testCtx, const vector<TestNode*>& children) 143 : TestNode(testCtx, NODETYPE_ROOT, "", "", children) 144{ 145} 146 147TestPackageRoot::~TestPackageRoot (void) 148{ 149} 150 151TestCase::IterateResult TestPackageRoot::iterate (void) 152{ 153 DE_ASSERT(DE_FALSE); // should never be here! 154 throw InternalError("TestPackageRoot::iterate() called!", "", __FILE__, __LINE__); 155} 156 157 158} // tcu 159