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