1*5c90c05cSAndroid Build Coastguard Worker // Formatting library for C++ - test version of FMT_ASSERT 2*5c90c05cSAndroid Build Coastguard Worker // 3*5c90c05cSAndroid Build Coastguard Worker // Copyright (c) 2012 - present, Victor Zverovich 4*5c90c05cSAndroid Build Coastguard Worker // All rights reserved. 5*5c90c05cSAndroid Build Coastguard Worker // 6*5c90c05cSAndroid Build Coastguard Worker // For the license information refer to format.h. 7*5c90c05cSAndroid Build Coastguard Worker 8*5c90c05cSAndroid Build Coastguard Worker #ifndef FMT_TEST_ASSERT_H_ 9*5c90c05cSAndroid Build Coastguard Worker #define FMT_TEST_ASSERT_H_ 10*5c90c05cSAndroid Build Coastguard Worker 11*5c90c05cSAndroid Build Coastguard Worker #include <stdexcept> 12*5c90c05cSAndroid Build Coastguard Worker 13*5c90c05cSAndroid Build Coastguard Worker void throw_assertion_failure(const char* message); 14*5c90c05cSAndroid Build Coastguard Worker #define FMT_ASSERT(condition, message) \ 15*5c90c05cSAndroid Build Coastguard Worker ((condition) ? (void)0 : throw_assertion_failure(message)) 16*5c90c05cSAndroid Build Coastguard Worker 17*5c90c05cSAndroid Build Coastguard Worker #include "gtest/gtest.h" 18*5c90c05cSAndroid Build Coastguard Worker 19*5c90c05cSAndroid Build Coastguard Worker class assertion_failure : public std::logic_error { 20*5c90c05cSAndroid Build Coastguard Worker public: assertion_failure(const char * message)21*5c90c05cSAndroid Build Coastguard Worker explicit assertion_failure(const char* message) : std::logic_error(message) {} 22*5c90c05cSAndroid Build Coastguard Worker 23*5c90c05cSAndroid Build Coastguard Worker private: 24*5c90c05cSAndroid Build Coastguard Worker virtual void avoid_weak_vtable(); 25*5c90c05cSAndroid Build Coastguard Worker }; 26*5c90c05cSAndroid Build Coastguard Worker avoid_weak_vtable()27*5c90c05cSAndroid Build Coastguard Workervoid assertion_failure::avoid_weak_vtable() {} 28*5c90c05cSAndroid Build Coastguard Worker 29*5c90c05cSAndroid Build Coastguard Worker // We use a separate function (rather than throw directly from FMT_ASSERT) to 30*5c90c05cSAndroid Build Coastguard Worker // avoid GCC's -Wterminate warning when FMT_ASSERT is used in a destructor. throw_assertion_failure(const char * message)31*5c90c05cSAndroid Build Coastguard Workerinline void throw_assertion_failure(const char* message) { 32*5c90c05cSAndroid Build Coastguard Worker throw assertion_failure(message); 33*5c90c05cSAndroid Build Coastguard Worker } 34*5c90c05cSAndroid Build Coastguard Worker 35*5c90c05cSAndroid Build Coastguard Worker // Expects an assertion failure. 36*5c90c05cSAndroid Build Coastguard Worker #define EXPECT_ASSERT(stmt, message) \ 37*5c90c05cSAndroid Build Coastguard Worker FMT_TEST_THROW_(stmt, assertion_failure, message, GTEST_NONFATAL_FAILURE_) 38*5c90c05cSAndroid Build Coastguard Worker 39*5c90c05cSAndroid Build Coastguard Worker #endif // FMT_TEST_ASSERT_H_ 40