| /*------------------------------------------------------------------------- | |
| * 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 |