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