/*------------------------------------------------------------------------- * drawElements Quality Program Tester Core * ---------------------------------------- * * 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 Base class for a test case. *//*--------------------------------------------------------------------*/ #include "tcuTestPackage.hpp" #include "tcuPlatform.hpp" #include "deString.h" using std::vector; namespace tcu { // TestPackage TestPackage::TestPackage (TestContext& testCtx, const char* name, const char* description) : TestNode(testCtx, NODETYPE_PACKAGE, name, description) { } TestPackage::~TestPackage (void) { } TestNode::IterateResult TestPackage::iterate (void) { DE_ASSERT(DE_FALSE); // should never be here! throw InternalError("TestPackage::iterate() called!", "", __FILE__, __LINE__); } // TestPackageRegistry TestPackageRegistry::TestPackageRegistry (void) { } TestPackageRegistry::~TestPackageRegistry (void) { for (int i = 0; i < (int)m_packageInfos.size(); i++) delete m_packageInfos[i]; } TestPackageRegistry* TestPackageRegistry::getSingleton (void) { return TestPackageRegistry::getOrDestroy(true); } void TestPackageRegistry::destroy (void) { TestPackageRegistry::getOrDestroy(false); } TestPackageRegistry* TestPackageRegistry::getOrDestroy (bool isCreate) { static TestPackageRegistry* s_ptr = DE_NULL; if (isCreate) { if (!s_ptr) s_ptr = new TestPackageRegistry(); return s_ptr; } else { if (s_ptr) { delete s_ptr; s_ptr = DE_NULL; } return DE_NULL; } } void TestPackageRegistry::registerPackage (const char* name, TestPackageCreateFunc createFunc) { DE_ASSERT(getPackageInfoByName(name) == DE_NULL); m_packageInfos.push_back(new PackageInfo(name, createFunc)); } const std::vector<TestPackageRegistry::PackageInfo*>& TestPackageRegistry::getPackageInfos (void) const { return m_packageInfos; } TestPackageRegistry::PackageInfo* TestPackageRegistry::getPackageInfoByName (const char* packageName) const { for (int i = 0; i < (int)m_packageInfos.size(); i++) { if (m_packageInfos[i]->name == packageName) return m_packageInfos[i]; } return DE_NULL; } TestPackage* TestPackageRegistry::createPackage (const char* name, TestContext& testCtx) const { PackageInfo* info = getPackageInfoByName(name); return info ? info->createFunc(testCtx) : DE_NULL; } // TestPackageDescriptor TestPackageDescriptor::TestPackageDescriptor (const char* name, TestPackageCreateFunc createFunc) { TestPackageRegistry::getSingleton()->registerPackage(name, createFunc); } TestPackageDescriptor::~TestPackageDescriptor (void) { TestPackageRegistry::destroy(); } // TestPackageRoot TestPackageRoot::TestPackageRoot (TestContext& testCtx) : TestNode(testCtx, NODETYPE_ROOT, "", "") { } TestPackageRoot::TestPackageRoot (TestContext& testCtx, const vector<TestNode*>& children) : TestNode(testCtx, NODETYPE_ROOT, "", "", children) { } TestPackageRoot::TestPackageRoot (TestContext& testCtx, const TestPackageRegistry* packageRegistry) : TestNode(testCtx, NODETYPE_ROOT, "", "") { const vector<TestPackageRegistry::PackageInfo*>& packageInfos = packageRegistry->getPackageInfos(); for (int i = 0; i < (int)packageInfos.size(); i++) addChild(packageInfos[i]->createFunc(testCtx)); } TestPackageRoot::~TestPackageRoot (void) { } TestCase::IterateResult TestPackageRoot::iterate (void) { DE_ASSERT(DE_FALSE); // should never be here! throw InternalError("TestPackageRoot::iterate() called!", "", __FILE__, __LINE__); } } // tcu