Home | History | Annotate | Download | only in executor
      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 	TESTLOGVERSION_0_3_4,
     43 
     44 	TESTLOGVERSION_LAST
     45 };
     46 
     47 class TestResultParseError : public ParseError
     48 {
     49 public:
     50 	TestResultParseError (const std::string& message) : ParseError(message) {}
     51 };
     52 
     53 class TestResultParser
     54 {
     55 public:
     56 	enum ParseResult
     57 	{
     58 		PARSERESULT_NOT_CHANGED,
     59 		PARSERESULT_CHANGED,
     60 		PARSERESULT_COMPLETE,
     61 		PARSERESULT_ERROR,
     62 
     63 		PARSERESULT_LAST
     64 	};
     65 
     66 							TestResultParser			(void);
     67 							~TestResultParser			(void);
     68 
     69 	void					init						(TestCaseResult* dstResult);
     70 	ParseResult				parse						(const deUint8* bytes, int numBytes);
     71 
     72 private:
     73 							TestResultParser			(const TestResultParser& other);
     74 	TestResultParser&		operator=					(const TestResultParser& other);
     75 
     76 	void					clear						(void);
     77 
     78 	void					handleElementStart			(void);
     79 	void					handleElementEnd			(void);
     80 	void					handleData					(void);
     81 
     82 	const char*				getAttribute				(const char* name);
     83 
     84 	ri::Item*				getCurrentItem				(void);
     85 	ri::List*				getCurrentItemList			(void);
     86 	void					pushItem					(ri::Item* item);
     87 	void					popItem						(void);
     88 	void					updateCurrentItemList		(void);
     89 
     90 	enum State
     91 	{
     92 		STATE_NOT_INITIALIZED = 0,
     93 		STATE_INITIALIZED,
     94 		STATE_IN_TEST_CASE_RESULT,
     95 		STATE_TEST_CASE_RESULT_ENDED,
     96 
     97 		STATE_LAST
     98 	};
     99 
    100 	xml::Parser				m_xmlParser;
    101 	TestCaseResult*			m_result;
    102 
    103 	State					m_state;
    104 	TestLogVersion			m_logVersion;		//!< Only valid in STATE_IN_TEST_CASE_RESULT.
    105 
    106 	std::vector<ri::Item*>	m_itemStack;
    107 	ri::List*				m_curItemList;
    108 
    109 	int						m_base64DecodeOffset;
    110 
    111 	std::string				m_curNumValue;
    112 };
    113 
    114 // Helpers exposed to other parsers.
    115 TestStatusCode	getTestStatusCode			(const char* statusCode);
    116 
    117 // Parsing helpers.
    118 
    119 class TestCaseResultData;
    120 
    121 void			parseTestCaseResultFromData	(TestResultParser* parser, TestCaseResult* result, const TestCaseResultData& data);
    122 
    123 } // xe
    124 
    125 #endif // _XETESTRESULTPARSER_HPP
    126