1 /* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 * use this file except in compliance with the License. You may obtain a copy of 6 * the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations under 14 * the License. 15 */ 16 17 18 #ifndef CTSAUDIO_TASKGENERIC_H 19 #define CTSAUDIO_TASKGENERIC_H 20 #include <string.h> 21 #include <stdio.h> 22 #include <list> 23 #include <map> 24 #include <set> 25 #include <utils/String8.h> 26 27 28 class TaskCase; 29 30 class TaskGeneric { 31 public: 32 // internal model for xml tags 33 enum TaskType { 34 ETaskInvalid = 0, 35 ETaskBatch = 1, 36 ETaskCase = 2, 37 ETaskSetup = 3, 38 ETaskAction = 4, 39 ETaskSequential = 5, 40 ETaskProcess = 6, 41 ETaskInput = 7, 42 ETaskOutput = 8, 43 ETaskSound = 9, 44 ETaskSave = 10, 45 ETaskMessage = 11, 46 ETaskDownload = 12, 47 ETaskInvalidLast = 13, 48 //no ETaskInclude include does not involve any action. 49 }; 50 51 explicit TaskGeneric(TaskType type); 52 53 virtual ~TaskGeneric(); 54 55 inline TaskType getType() { 56 return mType; 57 } 58 59 enum ExecutionResult { 60 EResultOK = 0, 61 // continue in the current loop. will result in skipping all subsequent steps 62 EResultContinue = 1, 63 // get out of the current loop 64 EResultBreakOneLoop = 2, 65 // error which cannot be continued. effect is the same as fail. stops everything. 66 EResultError = 3, 67 // test failed. stops everything. 68 EResultFail = 4, 69 // test passed. 70 EResultPass = 5 71 }; 72 73 /** 74 * default implementation for adding child action 75 * Ownership of the child is passed to this instance, and child will be destroyed in parent's 76 * destructor. 77 * @return false on error 78 */ 79 virtual bool addChild(TaskGeneric* child); 80 81 virtual ExecutionResult run(); 82 83 /// can be NULL if parent does not exist 84 TaskGeneric* getParent(); 85 /// can be NULL if TestCase does not exist (unit testing?) 86 TaskCase* getTestCase(); 87 88 void setParent(TaskGeneric* parent); 89 90 /** 91 * parse attribute from XML DOM. name/value pair will be passed for all attributes. 92 */ 93 virtual bool parseAttribute(const android::String8& name, const android::String8& value); 94 95 bool forEachChild(bool (*runForEachChild)(TaskGeneric* child, void* data), void* data); 96 97 protected: 98 /// used by child instance to register allowed attributes 99 /// keys array should end with NULL 100 void registerSupportedStringAttributes(const android::String8* keys[]); 101 bool addStringAttribute(const android::String8& key, const android::String8& value); 102 bool findStringAttribute(const android::String8& key, android::String8& value) const; 103 inline std::list<TaskGeneric*>& getChildren() { 104 return mChildren; 105 }; 106 107 private: 108 TaskType mType; 109 TaskGeneric* mParent; 110 std::list<TaskGeneric*> mChildren; 111 112 std::set<android::String8> mAllowedStringAttributes; 113 std::map<android::String8, android::String8> mStringAttributes; 114 115 }; 116 117 118 #endif // CTSAUDIO_TASKGENERIC_H 119