13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*-------------------------------------------------------------------------
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program Tester Core
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ----------------------------------------
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project
63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License");
83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License.
93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at
103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *      http://www.apache.org/licenses/LICENSE-2.0
123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software
143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS,
153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and
173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License.
183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*!
203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file
213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Basic definitions.
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuDefs.hpp"
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deFilePath.hpp"
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "qpDebugOut.h"
273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <sstream>
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <stdarg.h>
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace tcu
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid die (const char* format, ...)
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	va_list args;
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	va_start(args, format);
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	qpDiev(format, args);
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	va_end(args);
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
423c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid print (const char* format, ...)
433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	va_list args;
453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	va_start(args, format);
463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	qpPrintv(format, args);
473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	va_end(args);
483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic std::string formatError (const char* message, const char* expr, const char* file, int line)
513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	std::ostringstream msg;
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	msg << (message ? message : "Runtime check failed");
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (expr)
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		msg << ": '" << expr << '\'';
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (file)
593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		msg << " at " << de::FilePath(file).getBaseName() << ":" << line;
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return msg.str();
623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
643c827367444ee418f129b2c238299f49d3264554Jarkko PoyryException::Exception (const char* message, const char* expr, const char* file, int line)
653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	: std::runtime_error(formatError(message, expr, file, line))
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_message			(message ? message : "Runtime check failed")
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
703c827367444ee418f129b2c238299f49d3264554Jarkko PoyryException::Exception (const std::string& message)
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	: std::runtime_error(message)
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_message			(message)
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
769296957fdb746e7558a00fec7f9a519f092168d8Jarkko PöyryTestException::TestException (const char* message, const char* expr, const char* file, int line, qpTestResult result)
779296957fdb746e7558a00fec7f9a519f092168d8Jarkko Pöyry	: Exception	(formatError(message, expr, file, line))
789296957fdb746e7558a00fec7f9a519f092168d8Jarkko Pöyry	, m_result	(result)
799296957fdb746e7558a00fec7f9a519f092168d8Jarkko Pöyry{
809296957fdb746e7558a00fec7f9a519f092168d8Jarkko Pöyry}
819296957fdb746e7558a00fec7f9a519f092168d8Jarkko Pöyry
829296957fdb746e7558a00fec7f9a519f092168d8Jarkko PöyryTestException::TestException (const std::string& message, qpTestResult result)
839296957fdb746e7558a00fec7f9a519f092168d8Jarkko Pöyry	: Exception	(message)
849296957fdb746e7558a00fec7f9a519f092168d8Jarkko Pöyry	, m_result	(result)
859296957fdb746e7558a00fec7f9a519f092168d8Jarkko Pöyry{
869296957fdb746e7558a00fec7f9a519f092168d8Jarkko Pöyry}
879296957fdb746e7558a00fec7f9a519f092168d8Jarkko Pöyry
883c827367444ee418f129b2c238299f49d3264554Jarkko PoyryTestError::TestError (const char* message, const char* expr, const char* file, int line)
899296957fdb746e7558a00fec7f9a519f092168d8Jarkko Pöyry	: TestException(message, expr, file, line, QP_TEST_RESULT_FAIL)
903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
933c827367444ee418f129b2c238299f49d3264554Jarkko PoyryTestError::TestError (const std::string& message)
949296957fdb746e7558a00fec7f9a519f092168d8Jarkko Pöyry	: TestException(message, QP_TEST_RESULT_FAIL)
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
983c827367444ee418f129b2c238299f49d3264554Jarkko PoyryInternalError::InternalError (const char* message, const char* expr, const char* file, int line)
999296957fdb746e7558a00fec7f9a519f092168d8Jarkko Pöyry	: TestException(message, expr, file, line, QP_TEST_RESULT_INTERNAL_ERROR)
1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1033c827367444ee418f129b2c238299f49d3264554Jarkko PoyryInternalError::InternalError (const std::string& message)
1049296957fdb746e7558a00fec7f9a519f092168d8Jarkko Pöyry	: TestException(message, QP_TEST_RESULT_INTERNAL_ERROR)
1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1083c827367444ee418f129b2c238299f49d3264554Jarkko PoyryResourceError::ResourceError (const char* message, const char* expr, const char* file, int line)
1099296957fdb746e7558a00fec7f9a519f092168d8Jarkko Pöyry	: TestException(message, expr, file, line, QP_TEST_RESULT_RESOURCE_ERROR)
1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1133c827367444ee418f129b2c238299f49d3264554Jarkko PoyryResourceError::ResourceError (const std::string& message)
1149296957fdb746e7558a00fec7f9a519f092168d8Jarkko Pöyry	: TestException(message, QP_TEST_RESULT_RESOURCE_ERROR)
1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1183c827367444ee418f129b2c238299f49d3264554Jarkko PoyryNotSupportedError::NotSupportedError (const char* message, const char* expr, const char* file, int line)
1199296957fdb746e7558a00fec7f9a519f092168d8Jarkko Pöyry	: TestException(message, expr, file, line, QP_TEST_RESULT_NOT_SUPPORTED)
1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1233c827367444ee418f129b2c238299f49d3264554Jarkko PoyryNotSupportedError::NotSupportedError (const std::string& message)
1249296957fdb746e7558a00fec7f9a519f092168d8Jarkko Pöyry	: TestException(message, QP_TEST_RESULT_NOT_SUPPORTED)
1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // namespace tcu
129