tcuTestCase.cpp revision 3c827367444ee418f129b2c238299f49d3264554
165a89c29ac6da09f5726f48f68eae9587b0e562aulan@chromium.org/*-------------------------------------------------------------------------
23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org * drawElements Quality Program Tester Core
33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org * ----------------------------------------
443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen *
5196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org * Copyright 2014 The Android Open Source Project
643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen *
7196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org * Licensed under the Apache License, Version 2.0 (the "License");
84b0feeef5d01dbc2948080b4f69daa37e1083461machenbach@chromium.org * you may not use this file except in compliance with the License.
98640107360766c74218cf16d51b714b1f2138839machenbach@chromium.org * You may obtain a copy of the License at
10196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org *
11196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org *      http://www.apache.org/licenses/LICENSE-2.0
127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org *
1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * Unless required by applicable law or agreed to in writing, software
1471affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org * distributed under the License is distributed on an "AS IS" BASIS,
1571affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen * See the License for the specific language governing permissions and
17c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org * limitations under the License.
189e3e0b618a14a05efd7d66f20bac4423dd3a1a2ffschneider@chromium.org *
19ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org *//*!
20ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org * \file
21ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org * \brief Base class for a test case.
22ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org *//*--------------------------------------------------------------------*/
23ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org
24ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org#include "tcuTestCase.hpp"
25ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org#include "tcuPlatform.hpp"
26ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org
27ed1a63112185152bc10fbd02418393804a5fcf04machenbach@chromium.org#include "deString.h"
2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
2943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansennamespace tcu
3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen{
3143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
32c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.orgusing namespace std;
3343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// TestNode.
3543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
3643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hanseninline bool isValidCaseNameChar (char c)
3743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen{
38c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org	return de::inRange(c, 'a', 'z') ||
3943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen		   de::inRange(c, 'A', 'Z') ||
4043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen		   de::inRange(c, '0', '9') ||
4143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen		   c == '_' || c == '-';
4243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
4343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
4443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hanseninline bool isValidCaseName (const char* name)
4543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen{
4643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen	for (const char* p = name; *p != '\0'; p++)
4743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen	{
4843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen		if (!isValidCaseNameChar(*p))
4943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen			return false;
5043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen	}
514a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org	return true;
524a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org}
534a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org
5443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenTestNode::TestNode (TestContext& testCtx, TestNodeType nodeType, const char* name, const char* description)
5543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen	: m_testCtx		(testCtx)
5643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen	, m_nodeType	(nodeType)
5743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen	, m_name		(name)
5858a725587734a6889c689668fd01f0157ed749a6machenbach@chromium.org	, m_description	(description)
5943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen{
6043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen	DE_ASSERT(isValidCaseName(name));
6143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
6243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
6343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenTestNode::TestNode (TestContext& testCtx, TestNodeType nodeType, const char* name, const char* description, const vector<TestNode*>& children)
646d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org	: m_testCtx		(testCtx)
656d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org	, m_nodeType	(nodeType)
666d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org	, m_name		(name)
67a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org	, m_description	(description)
68a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org{
69a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org	DE_ASSERT(isValidCaseName(name));
7043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen	for (int i = 0; i < (int)children.size(); i++)
7143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen		addChild(children[i]);
7243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
73c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com
74c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comTestNode::~TestNode (void)
75c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com{
76af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org	TestNode::deinit();
77af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org}
78af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org
79af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgvoid TestNode::getChildren (vector<TestNode*>& res) const
80af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org{
81af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org	res.clear();
82af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org	for (int i = 0; i < (int)m_children.size(); i++)
835c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org		res.push_back(m_children[i]);
84af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org}
85af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org
86af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgvoid TestNode::addChild (TestNode* node)
87af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org{
8843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen	// Child names must be unique!
8943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen	// \todo [petri] O(n^2) algorithm, but shouldn't really matter..
9043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#if defined(DE_DEBUG)
9143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen	for (int i = 0; i < (int)m_children.size(); i++)
9243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen	{
9343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen		if (deStringEqual(node->getName(), m_children[i]->getName()))
9443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen			throw tcu::InternalError(std::string("Test case with non-unique name '") + node->getName() + "' added to group '" + getName() + "'.");
953291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org	}
9643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif
9743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
98e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org	m_children.push_back(node);
99e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
100e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
101ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comvoid TestNode::init (void)
102ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com{
103ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com}
10443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
10543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid TestNode::deinit (void)
10643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen{
1074efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org	for (int i = 0; i < (int)m_children.size(); i++)
1084efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org		delete m_children[i];
1094efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org	m_children.clear();
11043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
11143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
11243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// TestCaseGroup
1135a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org
1145a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgTestCaseGroup::TestCaseGroup (TestContext& testCtx, const char* name, const char* description)
1155a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org	: TestNode(testCtx, NODETYPE_GROUP, name, description)
11643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen{
11743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen}
11843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen
11943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenTestCaseGroup::TestCaseGroup (TestContext& testCtx, const char* name, const char* description, const vector<TestNode*>& children)
12043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen	: TestNode(testCtx, NODETYPE_GROUP, name, description, children)
12143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen{
12241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org}
12341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org
12441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgTestCaseGroup::~TestCaseGroup (void)
12541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org{
126b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org}
1272abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org
12843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenTestCase::IterateResult TestCaseGroup::iterate (void)
12943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen{
13043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen	DE_ASSERT(DE_FALSE); // should never be here!
131394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com	throw InternalError("TestCaseGroup::iterate() called!", "", __FILE__, __LINE__);
132394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com}
133394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
134394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// TestCase
135394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
136394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTestCase::TestCase (TestContext& testCtx, const char* name, const char* description)
1374ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org	: TestNode(testCtx, NODETYPE_SELF_VALIDATE, name, description)
1384ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org{
1394ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org}
1404ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org
1414ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.orgTestCase::TestCase (TestContext& testCtx, TestNodeType nodeType, const char* name, const char* description)
1424ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org	: TestNode(testCtx, nodeType, name, description)
1437c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org{
1447c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org	DE_ASSERT(isTestNodeTypeExecutable(nodeType));
1457c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org}
146ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org
147ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgTestCase::~TestCase (void)
148ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org{
149236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org}
150236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org
151236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org} // tcu
15243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen