14e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos/*------------------------------------------------------------------------- 24e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * drawElements Quality Program Tester Core 34e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * ---------------------------------------- 44e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * 54e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * Copyright 2014 The Android Open Source Project 64e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * 74e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * Licensed under the Apache License, Version 2.0 (the "License"); 84e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * you may not use this file except in compliance with the License. 94e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * You may obtain a copy of the License at 104e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * 114e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * http://www.apache.org/licenses/LICENSE-2.0 124e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * 134e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * Unless required by applicable law or agreed to in writing, software 144e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * distributed under the License is distributed on an "AS IS" BASIS, 154e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 164e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * See the License for the specific language governing permissions and 174e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * limitations under the License. 184e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * 194e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos *//*! 204e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * \file 214e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos * \brief Test case hierarchy iterator. 224e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos *//*--------------------------------------------------------------------*/ 234e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 244e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos#include "tcuTestHierarchyIterator.hpp" 254e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos#include "tcuCommandLine.hpp" 264e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 274e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulosnamespace tcu 284e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos{ 294e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 304e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulosusing std::string; 314e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulosusing std::vector; 324e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 334e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos// TestHierarchyInflater 344e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 354e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry HaulosTestHierarchyInflater::TestHierarchyInflater (void) 364e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos{ 374e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos} 384e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 394e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry HaulosTestHierarchyInflater::~TestHierarchyInflater (void) 404e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos{ 414e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos} 424e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 434e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos// DefaultHierarchyInflater 444e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 454e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry HaulosDefaultHierarchyInflater::DefaultHierarchyInflater (TestContext& testCtx) 464e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos : m_testCtx(testCtx) 474e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos{ 484e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos} 494e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 504e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry HaulosDefaultHierarchyInflater::~DefaultHierarchyInflater (void) 514e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos{ 524e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos} 534e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 544e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulosvoid DefaultHierarchyInflater::enterTestPackage (TestPackage* testPackage, vector<TestNode*>& children) 554e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos{ 564e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 574e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos Archive* const pkgArchive = testPackage->getArchive(); 584e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 594e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos if (pkgArchive) 604e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos m_testCtx.setCurrentArchive(*pkgArchive); 614e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos else 624e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos m_testCtx.setCurrentArchive(m_testCtx.getRootArchive()); 634e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 644e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 654e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos testPackage->init(); 664e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos testPackage->getChildren(children); 674e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos} 684e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 694e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulosvoid DefaultHierarchyInflater::leaveTestPackage (TestPackage* testPackage) 704e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos{ 714e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos m_testCtx.setCurrentArchive(m_testCtx.getRootArchive()); 724e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos testPackage->deinit(); 734e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos} 744e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 754e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulosvoid DefaultHierarchyInflater::enterGroupNode (TestCaseGroup* testGroup, vector<TestNode*>& children) 764e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos{ 774e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos testGroup->init(); 784e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos testGroup->getChildren(children); 794e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos} 804e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 814e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulosvoid DefaultHierarchyInflater::leaveGroupNode (TestCaseGroup* testGroup) 824e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos{ 834e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos testGroup->deinit(); 844e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos} 854e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 864e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos// TestHierarchyIterator 874e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 884e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry HaulosTestHierarchyIterator::TestHierarchyIterator (TestPackageRoot& rootNode, 894e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos TestHierarchyInflater& inflater, 904e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos const CommandLine& cmdLine) 914e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos : m_inflater (inflater) 924e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos , m_cmdLine (cmdLine) 934e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos{ 944e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos // Init traverse state and "seek" to first reportable node. 954e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos NodeIter iter(&rootNode); 964e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos iter.setState(NodeIter::STATE_ENTER); // Root is never reported 974e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos m_sessionStack.push_back(iter); 984e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos next(); 994e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos} 1004e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 1014e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry HaulosTestHierarchyIterator::~TestHierarchyIterator (void) 1024e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos{ 1034e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos // Tear down inflated nodes in m_sessionStack 1044e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos for (vector<NodeIter>::reverse_iterator iter = m_sessionStack.rbegin(); iter != m_sessionStack.rend(); ++iter) 1054e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 1064e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos TestNode* const node = iter->node; 1074e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos const TestNodeType nodeType = node->getNodeType(); 1084e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 1094e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos switch (nodeType) 1104e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 1114e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos case NODETYPE_ROOT: /* root is not de-initialized */ break; 1124e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos case NODETYPE_PACKAGE: m_inflater.leaveTestPackage(static_cast<TestPackage*>(node)); break; 1134e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos case NODETYPE_GROUP: m_inflater.leaveGroupNode(static_cast<TestCaseGroup*>(node)); break; 1144e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos default: 1154e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos break; 1164e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 1174e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 1184e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos} 1194e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 1204e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry HaulosTestHierarchyIterator::State TestHierarchyIterator::getState (void) const 1214e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos{ 1224e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos if (!m_sessionStack.empty()) 1234e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 1244e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos const NodeIter& iter = m_sessionStack.back(); 1254e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 1264e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos DE_ASSERT(iter.getState() == NodeIter::STATE_ENTER || 1274e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos iter.getState() == NodeIter::STATE_LEAVE); 1284e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 1294e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos return iter.getState() == NodeIter::STATE_ENTER ? STATE_ENTER_NODE : STATE_LEAVE_NODE; 1304e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 1314e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos else 1324e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos return STATE_FINISHED; 1334e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos} 1344e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 1354e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry HaulosTestNode* TestHierarchyIterator::getNode (void) const 1364e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos{ 1374e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos DE_ASSERT(getState() != STATE_FINISHED); 1384e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos return m_sessionStack.back().node; 1394e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos} 1404e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 1414e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulosconst std::string& TestHierarchyIterator::getNodePath (void) const 1424e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos{ 1434e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos DE_ASSERT(getState() != STATE_FINISHED); 1444e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos return m_nodePath; 1454e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos} 1464e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 1474e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulosstd::string TestHierarchyIterator::buildNodePath (const vector<NodeIter>& nodeStack) 1484e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos{ 1494e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos string nodePath; 1504e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos for (size_t ndx = 1; ndx < nodeStack.size(); ndx++) 1514e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 1524e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos const NodeIter& iter = nodeStack[ndx]; 1534e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos if (ndx > 1) // ignore root package 1544e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos nodePath += "."; 1554e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos nodePath += iter.node->getName(); 1564e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 1574e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos return nodePath; 1584e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos} 1594e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 1604e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulosvoid TestHierarchyIterator::next (void) 1614e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos{ 1624e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos while (!m_sessionStack.empty()) 1634e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 1644e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos NodeIter& iter = m_sessionStack.back(); 1654e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos TestNode* const node = iter.node; 1664e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos const bool isLeaf = isTestNodeTypeExecutable(node->getNodeType()); 1674e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 1684e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos switch (iter.getState()) 1694e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 1704e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos case NodeIter::STATE_INIT: 1714e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 1724e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos const std::string nodePath = buildNodePath(m_sessionStack); 1734e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 1744e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos // Return to parent if name doesn't match filter. 1754e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos if (!(isLeaf ? m_cmdLine.checkTestCaseName(nodePath.c_str()) : m_cmdLine.checkTestGroupName(nodePath.c_str()))) 1764e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 1774e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos m_sessionStack.pop_back(); 1784e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos break; 1794e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 1804e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 1814e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos m_nodePath = nodePath; 1824e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos iter.setState(NodeIter::STATE_ENTER); 1834e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos return; // Yield enter event 1844e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 1854e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 1864e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos case NodeIter::STATE_ENTER: 1874e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 1884e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos if (isLeaf) 1894e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 1904e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos iter.setState(NodeIter::STATE_LEAVE); 1914e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos return; // Yield leave event 1924e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 1934e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos else 1944e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 1954e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos iter.setState(NodeIter::STATE_TRAVERSE_CHILDREN); 1964e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos iter.children.clear(); 1974e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 1984e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos switch (node->getNodeType()) 1994e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 2004e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos case NODETYPE_ROOT: static_cast<TestPackageRoot*>(node)->getChildren(iter.children); break; 2014e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos case NODETYPE_PACKAGE: m_inflater.enterTestPackage(static_cast<TestPackage*>(node), iter.children); break; 2024e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos case NODETYPE_GROUP: m_inflater.enterGroupNode(static_cast<TestCaseGroup*>(node), iter.children); break; 2034e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos default: 2044e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos DE_ASSERT(false); 2054e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 2064e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 2074e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 2084e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos break; 2094e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 2104e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 2114e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos case NodeIter::STATE_TRAVERSE_CHILDREN: 2124e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 2134e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos int numChildren = (int)iter.children.size(); 2144e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos if (++iter.curChildNdx < numChildren) 2154e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 2164e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos // Push child to stack. 2174e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos TestNode* childNode = iter.children[iter.curChildNdx]; 2184e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos m_sessionStack.push_back(NodeIter(childNode)); 2194e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 2204e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos else 2214e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 2224e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos iter.setState(NodeIter::STATE_LEAVE); 2234e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos if (node->getNodeType() != NODETYPE_ROOT) 2244e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos return; // Yield leave event 2254e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 2264e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 2274e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos break; 2284e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 2294e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 2304e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos case NodeIter::STATE_LEAVE: 2314e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 2324e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos // Leave node. 2334e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos if (!isLeaf) 2344e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 2354e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos switch (node->getNodeType()) 2364e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos { 2374e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos case NODETYPE_ROOT: /* root is not de-initialized */ break; 2384e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos case NODETYPE_PACKAGE: m_inflater.leaveTestPackage(static_cast<TestPackage*>(node)); break; 2394e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos case NODETYPE_GROUP: m_inflater.leaveGroupNode(static_cast<TestCaseGroup*>(node)); break; 2404e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos default: 2414e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos DE_ASSERT(false); 2424e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 2434e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 2444e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 2454e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos m_sessionStack.pop_back(); 2464e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos m_nodePath = buildNodePath(m_sessionStack); 2474e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos break; 2484e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 2494e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 2504e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos default: 2514e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos DE_ASSERT(false); 2524e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos return; 2534e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 2544e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos } 2554e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 2564e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos DE_ASSERT(m_sessionStack.empty() && getState() == STATE_FINISHED); 2574e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos} 2584e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos 2594e3ea87b79b12195e79d28ef6ab2be0a847b5d9aPyry Haulos} // tcu 260