1e5c31af7Sopenharmony_ci/*-------------------------------------------------------------------------
2e5c31af7Sopenharmony_ci * drawElements Quality Program Tester Core
3e5c31af7Sopenharmony_ci * ----------------------------------------
4e5c31af7Sopenharmony_ci *
5e5c31af7Sopenharmony_ci * Copyright 2014 The Android Open Source Project
6e5c31af7Sopenharmony_ci *
7e5c31af7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
8e5c31af7Sopenharmony_ci * you may not use this file except in compliance with the License.
9e5c31af7Sopenharmony_ci * You may obtain a copy of the License at
10e5c31af7Sopenharmony_ci *
11e5c31af7Sopenharmony_ci *      http://www.apache.org/licenses/LICENSE-2.0
12e5c31af7Sopenharmony_ci *
13e5c31af7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
14e5c31af7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
15e5c31af7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16e5c31af7Sopenharmony_ci * See the License for the specific language governing permissions and
17e5c31af7Sopenharmony_ci * limitations under the License.
18e5c31af7Sopenharmony_ci *
19e5c31af7Sopenharmony_ci *//*!
20e5c31af7Sopenharmony_ci * \file
21e5c31af7Sopenharmony_ci * \brief Base class for a test case.
22e5c31af7Sopenharmony_ci *//*--------------------------------------------------------------------*/
23e5c31af7Sopenharmony_ci
24e5c31af7Sopenharmony_ci#include "tcuTestPackage.hpp"
25e5c31af7Sopenharmony_ci#include "tcuPlatform.hpp"
26e5c31af7Sopenharmony_ci
27e5c31af7Sopenharmony_ci#include "deString.h"
28e5c31af7Sopenharmony_ci
29e5c31af7Sopenharmony_ciusing std::vector;
30e5c31af7Sopenharmony_ci
31e5c31af7Sopenharmony_cinamespace tcu
32e5c31af7Sopenharmony_ci{
33e5c31af7Sopenharmony_ci
34e5c31af7Sopenharmony_ci// TestPackage
35e5c31af7Sopenharmony_ci
36e5c31af7Sopenharmony_ciTestPackage::TestPackage (TestContext& testCtx, const char* name, const char* description)
37e5c31af7Sopenharmony_ci	: TestNode(testCtx, NODETYPE_PACKAGE, name)
38e5c31af7Sopenharmony_ci	, m_caseListFilter(nullptr)
39e5c31af7Sopenharmony_ci{
40e5c31af7Sopenharmony_ci	DE_UNREF(description);
41e5c31af7Sopenharmony_ci}
42e5c31af7Sopenharmony_ci
43e5c31af7Sopenharmony_ciTestPackage::~TestPackage (void)
44e5c31af7Sopenharmony_ci{
45e5c31af7Sopenharmony_ci}
46e5c31af7Sopenharmony_ci
47e5c31af7Sopenharmony_civoid TestPackage::setCaseListFilter (const CaseListFilter* caseListFilter)
48e5c31af7Sopenharmony_ci{
49e5c31af7Sopenharmony_ci	m_caseListFilter = caseListFilter;
50e5c31af7Sopenharmony_ci}
51e5c31af7Sopenharmony_ci
52e5c31af7Sopenharmony_ciTestNode::IterateResult TestPackage::iterate (void)
53e5c31af7Sopenharmony_ci{
54e5c31af7Sopenharmony_ci	DE_ASSERT(DE_FALSE); // should never be here!
55e5c31af7Sopenharmony_ci	throw InternalError("TestPackage::iterate() called!", "", __FILE__, __LINE__);
56e5c31af7Sopenharmony_ci}
57e5c31af7Sopenharmony_ci
58e5c31af7Sopenharmony_ci// TestPackageRegistry
59e5c31af7Sopenharmony_ci
60e5c31af7Sopenharmony_ciTestPackageRegistry::TestPackageRegistry (void)
61e5c31af7Sopenharmony_ci{
62e5c31af7Sopenharmony_ci}
63e5c31af7Sopenharmony_ci
64e5c31af7Sopenharmony_ciTestPackageRegistry::~TestPackageRegistry (void)
65e5c31af7Sopenharmony_ci{
66e5c31af7Sopenharmony_ci	for (int i = 0; i < (int)m_packageInfos.size(); i++)
67e5c31af7Sopenharmony_ci		delete m_packageInfos[i];
68e5c31af7Sopenharmony_ci}
69e5c31af7Sopenharmony_ci
70e5c31af7Sopenharmony_ciTestPackageRegistry* TestPackageRegistry::getSingleton (void)
71e5c31af7Sopenharmony_ci{
72e5c31af7Sopenharmony_ci	return TestPackageRegistry::getOrDestroy(true);
73e5c31af7Sopenharmony_ci}
74e5c31af7Sopenharmony_ci
75e5c31af7Sopenharmony_civoid TestPackageRegistry::destroy (void)
76e5c31af7Sopenharmony_ci{
77e5c31af7Sopenharmony_ci	TestPackageRegistry::getOrDestroy(false);
78e5c31af7Sopenharmony_ci}
79e5c31af7Sopenharmony_ci
80e5c31af7Sopenharmony_ciTestPackageRegistry* TestPackageRegistry::getOrDestroy (bool isCreate)
81e5c31af7Sopenharmony_ci{
82e5c31af7Sopenharmony_ci	static TestPackageRegistry* s_ptr = DE_NULL;
83e5c31af7Sopenharmony_ci
84e5c31af7Sopenharmony_ci	if (isCreate)
85e5c31af7Sopenharmony_ci	{
86e5c31af7Sopenharmony_ci		if (!s_ptr)
87e5c31af7Sopenharmony_ci			s_ptr = new TestPackageRegistry();
88e5c31af7Sopenharmony_ci
89e5c31af7Sopenharmony_ci		return s_ptr;
90e5c31af7Sopenharmony_ci	}
91e5c31af7Sopenharmony_ci	else
92e5c31af7Sopenharmony_ci	{
93e5c31af7Sopenharmony_ci		if (s_ptr)
94e5c31af7Sopenharmony_ci		{
95e5c31af7Sopenharmony_ci			delete s_ptr;
96e5c31af7Sopenharmony_ci			s_ptr = DE_NULL;
97e5c31af7Sopenharmony_ci		}
98e5c31af7Sopenharmony_ci
99e5c31af7Sopenharmony_ci		return DE_NULL;
100e5c31af7Sopenharmony_ci	}
101e5c31af7Sopenharmony_ci}
102e5c31af7Sopenharmony_ci
103e5c31af7Sopenharmony_civoid TestPackageRegistry::registerPackage (const char* name, TestPackageCreateFunc createFunc)
104e5c31af7Sopenharmony_ci{
105e5c31af7Sopenharmony_ci	DE_ASSERT(getPackageInfoByName(name) == DE_NULL);
106e5c31af7Sopenharmony_ci	m_packageInfos.push_back(new PackageInfo(name, createFunc));
107e5c31af7Sopenharmony_ci}
108e5c31af7Sopenharmony_ci
109e5c31af7Sopenharmony_ciconst std::vector<TestPackageRegistry::PackageInfo*>& TestPackageRegistry::getPackageInfos (void) const
110e5c31af7Sopenharmony_ci{
111e5c31af7Sopenharmony_ci	return m_packageInfos;
112e5c31af7Sopenharmony_ci}
113e5c31af7Sopenharmony_ci
114e5c31af7Sopenharmony_ciTestPackageRegistry::PackageInfo* TestPackageRegistry::getPackageInfoByName (const char* packageName) const
115e5c31af7Sopenharmony_ci{
116e5c31af7Sopenharmony_ci	for (int i = 0; i < (int)m_packageInfos.size(); i++)
117e5c31af7Sopenharmony_ci	{
118e5c31af7Sopenharmony_ci		if (m_packageInfos[i]->name == packageName)
119e5c31af7Sopenharmony_ci			return m_packageInfos[i];
120e5c31af7Sopenharmony_ci	}
121e5c31af7Sopenharmony_ci
122e5c31af7Sopenharmony_ci	return DE_NULL;
123e5c31af7Sopenharmony_ci}
124e5c31af7Sopenharmony_ci
125e5c31af7Sopenharmony_ciTestPackage* TestPackageRegistry::createPackage (const char* name, TestContext& testCtx) const
126e5c31af7Sopenharmony_ci{
127e5c31af7Sopenharmony_ci	PackageInfo* info = getPackageInfoByName(name);
128e5c31af7Sopenharmony_ci	return info ? info->createFunc(testCtx) : DE_NULL;
129e5c31af7Sopenharmony_ci}
130e5c31af7Sopenharmony_ci
131e5c31af7Sopenharmony_ci// TestPackageDescriptor
132e5c31af7Sopenharmony_ci
133e5c31af7Sopenharmony_ciTestPackageDescriptor::TestPackageDescriptor (const char* name, TestPackageCreateFunc createFunc)
134e5c31af7Sopenharmony_ci{
135e5c31af7Sopenharmony_ci	TestPackageRegistry::getSingleton()->registerPackage(name, createFunc);
136e5c31af7Sopenharmony_ci}
137e5c31af7Sopenharmony_ci
138e5c31af7Sopenharmony_ciTestPackageDescriptor::~TestPackageDescriptor (void)
139e5c31af7Sopenharmony_ci{
140e5c31af7Sopenharmony_ci	TestPackageRegistry::destroy();
141e5c31af7Sopenharmony_ci}
142e5c31af7Sopenharmony_ci
143e5c31af7Sopenharmony_ci// TestPackageRoot
144e5c31af7Sopenharmony_ci
145e5c31af7Sopenharmony_ciTestPackageRoot::TestPackageRoot (TestContext& testCtx)
146e5c31af7Sopenharmony_ci	: TestNode(testCtx, NODETYPE_ROOT, "")
147e5c31af7Sopenharmony_ci{
148e5c31af7Sopenharmony_ci}
149e5c31af7Sopenharmony_ci
150e5c31af7Sopenharmony_ciTestPackageRoot::TestPackageRoot (TestContext& testCtx, const vector<TestNode*>& children)
151e5c31af7Sopenharmony_ci	: TestNode(testCtx, NODETYPE_ROOT, "", children)
152e5c31af7Sopenharmony_ci{
153e5c31af7Sopenharmony_ci}
154e5c31af7Sopenharmony_ci
155e5c31af7Sopenharmony_ciTestPackageRoot::TestPackageRoot (TestContext& testCtx, const TestPackageRegistry* packageRegistry)
156e5c31af7Sopenharmony_ci	: TestNode(testCtx, NODETYPE_ROOT, "")
157e5c31af7Sopenharmony_ci{
158e5c31af7Sopenharmony_ci	const vector<TestPackageRegistry::PackageInfo*>&	packageInfos	= packageRegistry->getPackageInfos();
159e5c31af7Sopenharmony_ci
160e5c31af7Sopenharmony_ci	for (int i = 0; i < (int)packageInfos.size(); i++)
161e5c31af7Sopenharmony_ci		addChild(packageInfos[i]->createFunc(testCtx));
162e5c31af7Sopenharmony_ci}
163e5c31af7Sopenharmony_ci
164e5c31af7Sopenharmony_ciTestPackageRoot::~TestPackageRoot (void)
165e5c31af7Sopenharmony_ci{
166e5c31af7Sopenharmony_ci}
167e5c31af7Sopenharmony_ci
168e5c31af7Sopenharmony_ciTestCase::IterateResult TestPackageRoot::iterate (void)
169e5c31af7Sopenharmony_ci{
170e5c31af7Sopenharmony_ci	DE_ASSERT(DE_FALSE); // should never be here!
171e5c31af7Sopenharmony_ci	throw InternalError("TestPackageRoot::iterate() called!", "", __FILE__, __LINE__);
172e5c31af7Sopenharmony_ci}
173e5c31af7Sopenharmony_ci
174e5c31af7Sopenharmony_ci
175e5c31af7Sopenharmony_ci} // tcu
176