1 #ifndef _TCUDEFS_HPP 2 #define _TCUDEFS_HPP 3 /*------------------------------------------------------------------------- 4 * drawElements Quality Program Tester Core 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 Basic definitions. 24 *//*--------------------------------------------------------------------*/ 25 26 #include "deDefs.hpp" 27 #include "qpTestLog.h" 28 29 #include <string> 30 #include <stdexcept> 31 32 /*--------------------------------------------------------------------*//*! 33 * \brief dEQP Common Test Framework 34 * 35 * Code in this namespace doesn't require support for any specific client 36 * APIs. 37 *//*--------------------------------------------------------------------*/ 38 namespace tcu 39 { 40 41 //! Kill program. Called when a fatal error occurs. 42 void die (const char* format, ...) DE_PRINTF_FUNC_ATTR(1, 2); 43 44 //! Print to debug console. 45 void print (const char* format, ...) DE_PRINTF_FUNC_ATTR(1, 2); 46 47 //! Print nonfatal error. 48 void printError (const char* format, ...) DE_PRINTF_FUNC_ATTR(1, 2); 49 50 //! Base exception class for dEQP test framework. 51 class Exception : public std::runtime_error 52 { 53 public: 54 Exception (const char* message, const char* expr, const char* file, int line); 55 Exception (const std::string& message); ~Exception(void)56 virtual ~Exception (void) throw() {} 57 getMessage(void) const58 const char* getMessage (void) const { return m_message.c_str(); } 59 60 private: 61 const std::string m_message; 62 }; 63 64 //! Base exception class for test exceptions that affect test result 65 class TestException : public Exception 66 { 67 public: 68 TestException (const char* message, const char* expr, const char* file, int line, qpTestResult result); 69 TestException (const std::string& message, qpTestResult result); ~TestException(void)70 virtual ~TestException (void) throw() {} 71 getTestResult(void) const72 qpTestResult getTestResult (void) const { return m_result; } isFatal(void) const73 virtual bool isFatal (void) const { return false; } 74 75 private: 76 const qpTestResult m_result; 77 }; 78 79 //! Exception for test errors. 80 class TestError : public TestException 81 { 82 public: 83 TestError (const char* message, const char* expr, const char* file, int line); 84 TestError (const std::string& message, const char* expr, const char* file, int line); 85 TestError (const std::string& message); ~TestError(void)86 virtual ~TestError (void) throw() {} 87 }; 88 89 //! Exception for internal errors. 90 class InternalError : public TestException 91 { 92 public: 93 InternalError (const char* message, const char* expr, const char* file, int line); 94 InternalError (const std::string& message); ~InternalError(void)95 virtual ~InternalError (void) throw() {} 96 }; 97 98 //! Resource error. Tester will terminate if thrown out of test case. 99 class ResourceError : public TestException 100 { 101 public: 102 ResourceError (const char* message, const char* expr, const char* file, int line); 103 ResourceError (const std::string& message); ~ResourceError(void)104 virtual ~ResourceError (void) throw() {} 105 isFatal(void) const106 virtual bool isFatal (void) const { return true; } 107 }; 108 109 //! Not supported error. 110 class NotSupportedError : public TestException 111 { 112 public: 113 NotSupportedError (const char* message, const char* expr, const char* file, int line); 114 NotSupportedError (const std::string& message, const char* expr, const char* file, int line); 115 NotSupportedError (const std::string& message); ~NotSupportedError(void)116 virtual ~NotSupportedError (void) throw() {} 117 }; 118 119 } // tcu 120 121 #define TCU_THROW_EXPR(ERRCLASS, MSG, EXPR) \ 122 throw tcu::ERRCLASS(MSG, EXPR, __FILE__, __LINE__) 123 124 #define TCU_THROW(ERRCLASS, MSG) \ 125 TCU_THROW_EXPR(ERRCLASS, MSG, DE_NULL) 126 127 #define TCU_CHECK_AND_THROW(ERRCLASS, X, MSG) \ 128 do { \ 129 if (!(!deGetFalse() && (X))) \ 130 TCU_THROW_EXPR(ERRCLASS, MSG, #X); \ 131 } while(deGetFalse()) 132 133 //! Throw TestError. 134 #define TCU_FAIL(MSG) TCU_THROW(TestError, MSG) 135 136 //! Throw TestError if condition X is not satisfied. 137 #define TCU_CHECK(X) do { if (!(!deGetFalse() && (X))) throw tcu::TestError(DE_NULL, #X, __FILE__, __LINE__); } while(deGetFalse()) 138 139 //! Throw TestError if condition X is not satisfied. 140 #define TCU_CHECK_MSG(X, MSG) do { if (!(!deGetFalse() && (X))) throw tcu::TestError((MSG), #X, __FILE__, __LINE__); } while(deGetFalse()) 141 142 //! Throw InternalError if condition X is not satisfied 143 #define TCU_CHECK_INTERNAL(X) do { if (!(!deGetFalse() && (X))) throw tcu::InternalError(DE_NULL, #X, __FILE__, __LINE__); } while(deGetFalse()) 144 145 #endif // _TCUDEFS_HPP 146