1 #ifndef _XETESTRESULTPARSER_HPP 2 #define _XETESTRESULTPARSER_HPP 3 /*------------------------------------------------------------------------- 4 * drawElements Quality Program Test Executor 5 * ------------------------------------------ 6 * 7 * Copyright 2014 The Android Open Source Project 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 * 21 *//*! 22 * \file 23 * \brief Test case result parser. 24 *//*--------------------------------------------------------------------*/ 25 26 #include "xeDefs.hpp" 27 #include "xeXMLParser.hpp" 28 #include "xeTestCaseResult.hpp" 29 30 #include <vector> 31 32 namespace xe 33 { 34 35 enum TestLogVersion 36 { 37 TESTLOGVERSION_0_2_0 = 0, 38 TESTLOGVERSION_0_3_0, 39 TESTLOGVERSION_0_3_1, 40 TESTLOGVERSION_0_3_2, 41 TESTLOGVERSION_0_3_3, 42 43 TESTLOGVERSION_LAST 44 }; 45 46 class TestResultParseError : public ParseError 47 { 48 public: TestResultParseError(const std::string & message)49 TestResultParseError (const std::string& message) : ParseError(message) {} 50 }; 51 52 class TestResultParser 53 { 54 public: 55 enum ParseResult 56 { 57 PARSERESULT_NOT_CHANGED, 58 PARSERESULT_CHANGED, 59 PARSERESULT_COMPLETE, 60 PARSERESULT_ERROR, 61 62 PARSERESULT_LAST 63 }; 64 65 TestResultParser (void); 66 ~TestResultParser (void); 67 68 void init (TestCaseResult* dstResult); 69 ParseResult parse (const deUint8* bytes, int numBytes); 70 71 private: 72 TestResultParser (const TestResultParser& other); 73 TestResultParser& operator= (const TestResultParser& other); 74 75 void clear (void); 76 77 void handleElementStart (void); 78 void handleElementEnd (void); 79 void handleData (void); 80 81 const char* getAttribute (const char* name); 82 83 ri::Item* getCurrentItem (void); 84 ri::List* getCurrentItemList (void); 85 void pushItem (ri::Item* item); 86 void popItem (void); 87 void updateCurrentItemList (void); 88 89 enum State 90 { 91 STATE_NOT_INITIALIZED = 0, 92 STATE_INITIALIZED, 93 STATE_IN_TEST_CASE_RESULT, 94 STATE_TEST_CASE_RESULT_ENDED, 95 96 STATE_LAST 97 }; 98 99 xml::Parser m_xmlParser; 100 TestCaseResult* m_result; 101 102 State m_state; 103 TestLogVersion m_logVersion; //!< Only valid in STATE_IN_TEST_CASE_RESULT. 104 105 std::vector<ri::Item*> m_itemStack; 106 ri::List* m_curItemList; 107 108 int m_base64DecodeOffset; 109 110 std::string m_curNumValue; 111 }; 112 113 // Helpers exposed to other parsers. 114 TestStatusCode getTestStatusCode (const char* statusCode); 115 116 // Parsing helpers. 117 118 class TestCaseResultData; 119 120 void parseTestCaseResultFromData (TestResultParser* parser, TestCaseResult* result, const TestCaseResultData& data); 121 122 } // xe 123 124 #endif // _XETESTRESULTPARSER_HPP 125