1 #ifndef _XEBATCHRESULT_HPP
2 #define _XEBATCHRESULT_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 batch result.
24  *//*--------------------------------------------------------------------*/
25 
26 #include "xeDefs.hpp"
27 #include "xeTestCase.hpp"
28 #include "xeTestCaseResult.hpp"
29 #include "deSharedPtr.hpp"
30 
31 #include <string>
32 #include <vector>
33 #include <map>
34 
35 namespace xe
36 {
37 
38 class SessionInfo
39 {
40 public:
41 	// Produced by test binary.
42 	std::string			releaseName;
43 	std::string			releaseId;
44 	std::string			targetName;
45 	std::string			qpaCommandLineParameters;
46 
47 	// Produced by Candy.
48 	std::string			candyTargetName;
49 	std::string			configName;
50 	std::string			resultName;
51 	std::string			timestamp;
52 };
53 
54 class InfoLog
55 {
56 public:
57 							InfoLog			(void);
58 
getSize(void) const59 	size_t					getSize			(void) const { return m_data.size();							}
getBytes(void) const60 	const deUint8*			getBytes		(void) const { return !m_data.empty() ? &m_data[0] : DE_NULL;	}
61 
62 	void					append			(const deUint8* bytes, size_t numBytes);
63 
64 private:
65 							InfoLog			(const InfoLog& other);
66 	InfoLog&				operator=		(const InfoLog& other);
67 
68 	std::vector<deUint8>	m_data;
69 };
70 
71 class TestCaseResultData
72 {
73 public:
74 								TestCaseResultData				(const char* casePath);
75 								~TestCaseResultData				(void);
76 
getTestCasePath(void) const77 	const char*					getTestCasePath					(void) const	{ return m_casePath.c_str();		}
78 
79 	void						setTestResult					(TestStatusCode code, const char* details);
80 
getStatusCode(void) const81 	TestStatusCode				getStatusCode					(void) const	{ return m_statusCode;				}
getStatusDetails(void) const82 	const char*					getStatusDetails				(void) const	{ return m_statusDetails.c_str();	}
83 
getDataSize(void) const84 	int							getDataSize						(void) const	{ return (int)m_data.size();		}
setDataSize(int size)85 	void						setDataSize						(int size)		{ m_data.resize(size);				}
86 
getData(void) const87 	const deUint8*				getData							(void) const	{ return !m_data.empty() ? &m_data[0] : DE_NULL;	}
getData(void)88 	deUint8*					getData							(void)			{ return !m_data.empty() ? &m_data[0] : DE_NULL;	}
89 
90 	void						clear							(void);
91 
92 private:
93 	// \note statusCode and statusDetails are either set by BatchExecutor or later parsed from data.
94 	std::string					m_casePath;
95 	TestStatusCode				m_statusCode;
96 	std::string					m_statusDetails;
97 	std::vector<deUint8>		m_data;
98 };
99 
100 typedef de::SharedPtr<TestCaseResultData>			TestCaseResultPtr;
101 typedef de::SharedPtr<const TestCaseResultData>		ConstTestCaseResultPtr;
102 
103 class BatchResult
104 {
105 public:
106 										BatchResult				(void);
107 										~BatchResult			(void);
108 
getSessionInfo(void) const109 	const SessionInfo&					getSessionInfo			(void) const	{ return m_sessionInfo;	}
getSessionInfo(void)110 	SessionInfo&						getSessionInfo			(void)			{ return m_sessionInfo;	}
111 
getNumTestCaseResults(void) const112 	int									getNumTestCaseResults	(void) const	{ return (int)m_testCaseResults.size();							}
getTestCaseResult(int ndx) const113 	ConstTestCaseResultPtr				getTestCaseResult		(int ndx) const	{ return ConstTestCaseResultPtr(m_testCaseResults[ndx]);		}
getTestCaseResult(int ndx)114 	TestCaseResultPtr					getTestCaseResult		(int ndx)		{ return m_testCaseResults[ndx];								}
115 
116 	bool								hasTestCaseResult		(const char* casePath) const;
117 	ConstTestCaseResultPtr				getTestCaseResult		(const char* casePath) const;
118 	TestCaseResultPtr					getTestCaseResult		(const char* casePath);
119 
120 	TestCaseResultPtr					createTestCaseResult	(const char* casePath);
121 
122 private:
123 										BatchResult				(const BatchResult& other);
124 	BatchResult&						operator=				(const BatchResult& other);
125 
126 	SessionInfo							m_sessionInfo;
127 	std::vector<TestCaseResultPtr>		m_testCaseResults;
128 	std::map<std::string, int>			m_resultMap;
129 };
130 
131 } // xe
132 
133 #endif // _XEBATCHRESULT_HPP
134