/* * Copyright (C) 2012 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. */ #ifndef CTSAUDIO_MODELBUILDER_H #define CTSAUDIO_MODELBUILDER_H #include #include "TaskAll.h" namespace tinyxml2 { class XMLElement; }; class GenericFactory; /** * Class to parse Test description XML and generate test model with TestCase in top */ class ModelBuilder { public: ModelBuilder(); explicit ModelBuilder(GenericFactory* factory); virtual ~ModelBuilder(); /** * parse given xml with test case or batch. When caseOnly is true, only test case can be in. */ virtual TaskGeneric* parseTestDescriptionXml(const android::String8& xmlFileName, bool caseOnly = false); struct ChildInfo { TaskGeneric::TaskType type; bool mandatory; // whether the child is mandatory or not }; private: virtual bool parseAttributes(const tinyxml2::XMLElement& elem, TaskGeneric& task); virtual TaskGeneric* parseGeneric(const tinyxml2::XMLElement& elem, int tableIndex); virtual TaskCase* parseCase(const tinyxml2::XMLElement& root); virtual TaskBatch* parseBatch(const tinyxml2::XMLElement& root, const android::String8& xmlFileName); virtual TaskCase* parseInclude(const tinyxml2::XMLElement& elem, const android::String8& path); struct ParsingInfo { const char* name; // XML element name TaskGeneric::TaskType type; const ChildInfo* allowedChildren; int Nchildren; }; // no table for batch, and ETaskInvalidLast is not in either (-2) static const int PARSING_TABLE_SIZE = TaskGeneric::ETaskInvalidLast - 2; static ParsingInfo mParsingTable[PARSING_TABLE_SIZE]; GenericFactory* mFactory; }; #endif // CTSAUDIO_MODELBUILDER_H