blob: 52269d94a2e26e31beaee693ab698168a61f7b76 [file] [log] [blame]
#ifndef _XEBATCHRESULT_HPP
#define _XEBATCHRESULT_HPP
/*-------------------------------------------------------------------------
* drawElements Quality Program Test Executor
* ------------------------------------------
*
* Copyright 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*//*!
* \file
* \brief Test batch result.
*//*--------------------------------------------------------------------*/
#include "xeDefs.hpp"
#include "xeTestCase.hpp"
#include "xeTestCaseResult.hpp"
#include "deSharedPtr.hpp"
#include <string>
#include <vector>
#include <map>
namespace xe
{
class SessionInfo
{
public:
// Produced by test binary.
std::string releaseName;
std::string releaseId;
std::string targetName;
std::string qpaCommandLineParameters;
// Produced by Candy.
std::string candyTargetName;
std::string configName;
std::string resultName;
std::string timestamp;
};
class InfoLog
{
public:
InfoLog (void);
size_t getSize (void) const { return m_data.size(); }
const deUint8* getBytes (void) const { return !m_data.empty() ? &m_data[0] : DE_NULL; }
void append (const deUint8* bytes, size_t numBytes);
private:
InfoLog (const InfoLog& other);
InfoLog& operator= (const InfoLog& other);
std::vector<deUint8> m_data;
};
class TestCaseResultData
{
public:
TestCaseResultData (const char* casePath);
~TestCaseResultData (void);
const char* getTestCasePath (void) const { return m_casePath.c_str(); }
void setTestResult (TestStatusCode code, const char* details);
TestStatusCode getStatusCode (void) const { return m_statusCode; }
const char* getStatusDetails (void) const { return m_statusDetails.c_str(); }
int getDataSize (void) const { return (int)m_data.size(); }
void setDataSize (int size) { m_data.resize(size); }
const deUint8* getData (void) const { return !m_data.empty() ? &m_data[0] : DE_NULL; }
deUint8* getData (void) { return !m_data.empty() ? &m_data[0] : DE_NULL; }
void clear (void);
private:
// \note statusCode and statusDetails are either set by BatchExecutor or later parsed from data.
std::string m_casePath;
TestStatusCode m_statusCode;
std::string m_statusDetails;
std::vector<deUint8> m_data;
};
typedef de::SharedPtr<TestCaseResultData> TestCaseResultPtr;
typedef de::SharedPtr<const TestCaseResultData> ConstTestCaseResultPtr;
class BatchResult
{
public:
BatchResult (void);
~BatchResult (void);
const SessionInfo& getSessionInfo (void) const { return m_sessionInfo; }
SessionInfo& getSessionInfo (void) { return m_sessionInfo; }
int getNumTestCaseResults (void) const { return (int)m_testCaseResults.size(); }
ConstTestCaseResultPtr getTestCaseResult (int ndx) const { return ConstTestCaseResultPtr(m_testCaseResults[ndx]); }
TestCaseResultPtr getTestCaseResult (int ndx) { return m_testCaseResults[ndx]; }
bool hasTestCaseResult (const char* casePath) const;
ConstTestCaseResultPtr getTestCaseResult (const char* casePath) const;
TestCaseResultPtr getTestCaseResult (const char* casePath);
TestCaseResultPtr createTestCaseResult (const char* casePath);
private:
BatchResult (const BatchResult& other);
BatchResult& operator= (const BatchResult& other);
SessionInfo m_sessionInfo;
std::vector<TestCaseResultPtr> m_testCaseResults;
std::map<std::string, int> m_resultMap;
};
} // xe
#endif // _XEBATCHRESULT_HPP