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