45 #ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ 46 #define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_ 262 #if defined(_MSVC_LANG) 263 #define GTEST_INTERNAL_CPLUSPLUS_LANG _MSVC_LANG 264 #elif defined(__cplusplus) 265 #define GTEST_INTERNAL_CPLUSPLUS_LANG __cplusplus 268 #if !defined(GTEST_INTERNAL_CPLUSPLUS_LANG) || \ 269 GTEST_INTERNAL_CPLUSPLUS_LANG < 201402L 270 #error C++ versions less than C++14 are not supported. 290 #include <type_traits> 294 #include <sys/stat.h> 295 #include <sys/types.h> 296 #endif // !_WIN32_WCE 298 #if defined __APPLE__ 299 #include <AvailabilityMacros.h> 300 #include <TargetConditionals.h> 307 #include "absl/flags/declare.h" 308 #include "absl/flags/flag.h" 309 #include "absl/flags/reflection.h" 312 #if !defined(GTEST_DEV_EMAIL_) 313 #define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com" 314 #define GTEST_FLAG_PREFIX_ "gtest_" 315 #define GTEST_FLAG_PREFIX_DASH_ "gtest-" 316 #define GTEST_FLAG_PREFIX_UPPER_ "GTEST_" 317 #define GTEST_NAME_ "Google Test" 318 #define GTEST_PROJECT_URL_ "https://github.com/google/googletest/" 319 #endif // !defined(GTEST_DEV_EMAIL_) 321 #if !defined(GTEST_INIT_GOOGLE_TEST_NAME_) 322 #define GTEST_INIT_GOOGLE_TEST_NAME_ "testing::InitGoogleTest" 323 #endif // !defined(GTEST_INIT_GOOGLE_TEST_NAME_) 328 #define GTEST_GCC_VER_ \ 329 (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) 337 #if defined(_MSC_VER) 338 #define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) \ 339 __pragma(warning(push)) __pragma(warning(disable : warnings)) 340 #define GTEST_DISABLE_MSC_WARNINGS_POP_() __pragma(warning(pop)) 343 #define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) 344 #define GTEST_DISABLE_MSC_WARNINGS_POP_() 350 #define GTEST_DISABLE_MSC_DEPRECATED_PUSH_() \ 351 _Pragma("clang diagnostic push") \ 352 _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") \ 353 _Pragma("clang diagnostic ignored \"-Wdeprecated-implementations\"") 354 #define GTEST_DISABLE_MSC_DEPRECATED_POP_() _Pragma("clang diagnostic pop") 356 #define GTEST_DISABLE_MSC_DEPRECATED_PUSH_() \ 357 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4996) 358 #define GTEST_DISABLE_MSC_DEPRECATED_POP_() GTEST_DISABLE_MSC_WARNINGS_POP_() 365 #if !GTEST_OS_WINDOWS_MOBILE 370 #if GTEST_OS_WINDOWS_MINGW && !defined(__MINGW64_VERSION_MAJOR) 373 typedef struct _CRITICAL_SECTION GTEST_CRITICAL_SECTION;
378 typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
380 #elif GTEST_OS_XTENSA 390 #endif // GTEST_OS_WINDOWS 392 #if GTEST_OS_LINUX_ANDROID 394 #include <android/api-level.h> 399 #ifndef GTEST_HAS_POSIX_RE 400 #if GTEST_OS_LINUX_ANDROID 402 #define GTEST_HAS_POSIX_RE (__ANDROID_API__ >= 9) 404 #define GTEST_HAS_POSIX_RE \ 405 !(GTEST_OS_WINDOWS || GTEST_OS_XTENSA || GTEST_OS_QURT) 412 #include "absl/strings/string_view.h" 414 #define GTEST_USES_RE2 1 415 #elif GTEST_HAS_POSIX_RE 417 #define GTEST_USES_POSIX_RE 1 420 #define GTEST_USES_SIMPLE_RE 1 423 #ifndef GTEST_HAS_EXCEPTIONS 426 #if defined(_MSC_VER) && defined(_CPPUNWIND) 428 #define GTEST_HAS_EXCEPTIONS 1 429 #elif defined(__BORLANDC__) 433 #ifndef _HAS_EXCEPTIONS 434 #define _HAS_EXCEPTIONS 1 435 #endif // _HAS_EXCEPTIONS 436 #define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS 437 #elif defined(__clang__) 446 #define GTEST_HAS_EXCEPTIONS (__EXCEPTIONS && __has_feature(cxx_exceptions)) 447 #elif defined(__GNUC__) && __EXCEPTIONS 449 #define GTEST_HAS_EXCEPTIONS 1 450 #elif defined(__SUNPRO_CC) 454 #define GTEST_HAS_EXCEPTIONS 1 455 #elif defined(__IBMCPP__) && __EXCEPTIONS 457 #define GTEST_HAS_EXCEPTIONS 1 458 #elif defined(__HP_aCC) 461 #define GTEST_HAS_EXCEPTIONS 1 465 #define GTEST_HAS_EXCEPTIONS 0 466 #endif // defined(_MSC_VER) || defined(__BORLANDC__) 467 #endif // GTEST_HAS_EXCEPTIONS 469 #ifndef GTEST_HAS_STD_WSTRING 475 #define GTEST_HAS_STD_WSTRING \ 476 (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \ 477 GTEST_OS_HAIKU || GTEST_OS_ESP32 || GTEST_OS_ESP8266 || \ 478 GTEST_OS_XTENSA || GTEST_OS_QURT)) 480 #endif // GTEST_HAS_STD_WSTRING 482 #ifndef GTEST_HAS_FILE_SYSTEM 484 #define GTEST_HAS_FILE_SYSTEM 1 485 #endif // GTEST_HAS_FILE_SYSTEM 488 #ifndef GTEST_HAS_RTTI 494 #ifdef _CPPRTTI // MSVC defines this macro if and only if RTTI is enabled. 495 #define GTEST_HAS_RTTI 1 497 #define GTEST_HAS_RTTI 0 502 #elif defined(__GNUC__) 509 #if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) && !defined(__EXCEPTIONS) 510 #define GTEST_HAS_RTTI 0 512 #define GTEST_HAS_RTTI 1 513 #endif // GTEST_OS_LINUX_ANDROID && __STLPORT_MAJOR && !__EXCEPTIONS 515 #define GTEST_HAS_RTTI 0 521 #elif defined(__clang__) 523 #define GTEST_HAS_RTTI __has_feature(cxx_rtti) 527 #elif defined(__IBMCPP__) && (__IBMCPP__ >= 900) 530 #define GTEST_HAS_RTTI 1 532 #define GTEST_HAS_RTTI 0 538 #define GTEST_HAS_RTTI 1 542 #endif // GTEST_HAS_RTTI 551 #ifndef GTEST_HAS_PTHREAD 557 #define GTEST_HAS_PTHREAD \ 558 (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX || GTEST_OS_QNX || \ 559 GTEST_OS_FREEBSD || GTEST_OS_NACL || GTEST_OS_NETBSD || GTEST_OS_FUCHSIA || \ 560 GTEST_OS_DRAGONFLY || GTEST_OS_GNU_KFREEBSD || GTEST_OS_OPENBSD || \ 561 GTEST_OS_HAIKU || GTEST_OS_GNU_HURD) 562 #endif // GTEST_HAS_PTHREAD 564 #if GTEST_HAS_PTHREAD 577 #ifndef GTEST_HAS_CLONE 580 #if GTEST_OS_LINUX && !defined(__ia64__) 581 #if GTEST_OS_LINUX_ANDROID 584 #if defined(__LP64__) || (defined(__arm__) && __ANDROID_API__ >= 9) || \ 585 (defined(__mips__) && __ANDROID_API__ >= 12) || \ 586 (defined(__i386__) && __ANDROID_API__ >= 17) 587 #define GTEST_HAS_CLONE 1 589 #define GTEST_HAS_CLONE 0 592 #define GTEST_HAS_CLONE 1 595 #define GTEST_HAS_CLONE 0 596 #endif // GTEST_OS_LINUX && !defined(__ia64__) 598 #endif // GTEST_HAS_CLONE 602 #ifndef GTEST_HAS_STREAM_REDIRECTION 606 #if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || \ 607 GTEST_OS_WINDOWS_RT || GTEST_OS_ESP8266 || GTEST_OS_XTENSA || \ 608 GTEST_OS_QURT || !GTEST_HAS_FILE_SYSTEM 609 #define GTEST_HAS_STREAM_REDIRECTION 0 611 #define GTEST_HAS_STREAM_REDIRECTION 1 612 #endif // !GTEST_OS_WINDOWS_MOBILE 613 #endif // GTEST_HAS_STREAM_REDIRECTION 617 #if (GTEST_OS_LINUX || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \ 618 (GTEST_OS_MAC && !GTEST_OS_IOS) || \ 619 (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER) || GTEST_OS_WINDOWS_MINGW || \ 620 GTEST_OS_AIX || GTEST_OS_HPUX || GTEST_OS_OPENBSD || GTEST_OS_QNX || \ 621 GTEST_OS_FREEBSD || GTEST_OS_NETBSD || GTEST_OS_FUCHSIA || \ 622 GTEST_OS_DRAGONFLY || GTEST_OS_GNU_KFREEBSD || GTEST_OS_HAIKU || \ 625 #if GTEST_HAS_FILE_SYSTEM 626 #define GTEST_HAS_DEATH_TEST 1 627 #endif // GTEST_HAS_FILE_SYSTEM 634 #if defined(__GNUC__) || defined(_MSC_VER) || defined(__SUNPRO_CC) || \ 635 defined(__IBMCPP__) || defined(__HP_aCC) 636 #define GTEST_HAS_TYPED_TEST 1 637 #define GTEST_HAS_TYPED_TEST_P 1 641 #define GTEST_WIDE_STRING_USES_UTF16_ \ 642 (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_AIX || GTEST_OS_OS2) 645 #if GTEST_OS_LINUX || GTEST_OS_GNU_KFREEBSD || GTEST_OS_DRAGONFLY || \ 646 GTEST_OS_FREEBSD || GTEST_OS_NETBSD || GTEST_OS_OPENBSD || \ 648 #define GTEST_CAN_STREAM_RESULTS_ 1 661 #ifdef __INTEL_COMPILER 662 #define GTEST_AMBIGUOUS_ELSE_BLOCKER_ 664 #define GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 680 #ifdef __has_attribute 681 #define GTEST_HAVE_ATTRIBUTE_(x) __has_attribute(x) 683 #define GTEST_HAVE_ATTRIBUTE_(x) 0 691 #define GTEST_HAVE_FEATURE_(x) __has_feature(x) 693 #define GTEST_HAVE_FEATURE_(x) 0 701 #if GTEST_HAVE_ATTRIBUTE_(unused) 702 #define GTEST_ATTRIBUTE_UNUSED_ __attribute__((unused)) 704 #define GTEST_ATTRIBUTE_UNUSED_ 708 #if GTEST_HAVE_ATTRIBUTE_(format) && defined(__MINGW_PRINTF_FORMAT) 712 #define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \ 713 __attribute__((format(__MINGW_PRINTF_FORMAT, string_index, first_to_check))) 714 #elif GTEST_HAVE_ATTRIBUTE_(format) 715 #define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \ 716 __attribute__((format(printf, string_index, first_to_check))) 718 #define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) 726 #if GTEST_HAVE_ATTRIBUTE_(warn_unused_result) 727 #define GTEST_MUST_USE_RESULT_ __attribute__((warn_unused_result)) 729 #define GTEST_MUST_USE_RESULT_ 740 #define GTEST_INTENTIONAL_CONST_COND_PUSH_() \ 741 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4127) 742 #define GTEST_INTENTIONAL_CONST_COND_POP_() GTEST_DISABLE_MSC_WARNINGS_POP_() 747 #ifndef GTEST_HAS_SEH 750 #if defined(_MSC_VER) || defined(__BORLANDC__) 752 #define GTEST_HAS_SEH 1 755 #define GTEST_HAS_SEH 0 758 #endif // GTEST_HAS_SEH 760 #ifndef GTEST_IS_THREADSAFE 762 #define GTEST_IS_THREADSAFE \ 763 (GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ || \ 764 (GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT) || \ 767 #endif // GTEST_IS_THREADSAFE 769 #if GTEST_IS_THREADSAFE 771 #include <condition_variable> 773 #endif // GTEST_IS_THREADSAFE 781 #if GTEST_LINKED_AS_SHARED_LIBRARY 782 #define GTEST_API_ __declspec(dllimport) 783 #elif GTEST_CREATE_SHARED_LIBRARY 784 #define GTEST_API_ __declspec(dllexport) 786 #elif GTEST_HAVE_ATTRIBUTE_(visibility) 787 #define GTEST_API_ __attribute__((visibility("default"))) 796 #ifndef GTEST_DEFAULT_DEATH_TEST_STYLE 797 #define GTEST_DEFAULT_DEATH_TEST_STYLE "fast" 798 #endif // GTEST_DEFAULT_DEATH_TEST_STYLE 800 #if GTEST_HAVE_ATTRIBUTE_(noinline) 802 #define GTEST_NO_INLINE_ __attribute__((noinline)) 804 #define GTEST_NO_INLINE_ 807 #if GTEST_HAVE_ATTRIBUTE_(disable_tail_calls) 810 #define GTEST_NO_TAIL_CALL_ __attribute__((disable_tail_calls)) 812 #define GTEST_NO_TAIL_CALL_ \ 813 __attribute__((optimize("no-optimize-sibling-calls"))) 815 #define GTEST_NO_TAIL_CALL_ 819 #if !defined(GTEST_HAS_CXXABI_H_) 820 #if defined(__GLIBCXX__) || (defined(_LIBCPP_VERSION) && !defined(_MSC_VER)) 821 #define GTEST_HAS_CXXABI_H_ 1 823 #define GTEST_HAS_CXXABI_H_ 0 829 #if GTEST_HAVE_ATTRIBUTE_(no_sanitize_memory) 830 #define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ __attribute__((no_sanitize_memory)) 832 #define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ 836 #if GTEST_HAVE_ATTRIBUTE_(no_sanitize_address) 837 #define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ \ 838 __attribute__((no_sanitize_address)) 840 #define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ 844 #if GTEST_HAVE_FEATURE_(hwaddress_sanitizer) && \ 845 GTEST_HAVE_ATTRIBUTE_(no_sanitize) 846 #define GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ \ 847 __attribute__((no_sanitize("hwaddress"))) 849 #define GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ 853 #if GTEST_HAVE_ATTRIBUTE_(no_sanitize_thread) 854 #define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ __attribute((no_sanitize_thread)) 856 #define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ 866 using std::make_tuple;
868 using std::tuple_element;
869 using std::tuple_size;
891 RE(absl::string_view regex) : regex_(regex) {}
892 RE(
const char* regex) : RE(absl::string_view(regex)) {}
893 RE(
const std::string& regex) : RE(absl::string_view(regex)) {}
894 RE(
const RE& other) : RE(other.pattern()) {}
896 const std::string& pattern()
const {
return regex_.pattern(); }
898 static bool FullMatch(absl::string_view str,
const RE& re) {
899 return RE2::FullMatch(str, re.regex_);
901 static bool PartialMatch(absl::string_view str,
const RE& re) {
902 return RE2::PartialMatch(str, re.regex_);
909 #elif GTEST_USES_POSIX_RE || GTEST_USES_SIMPLE_RE 920 RE(const ::std::string& regex) { Init(regex.c_str()); }
922 RE(
const char* regex) { Init(regex); }
926 const char*
pattern()
const {
return pattern_; }
932 static bool FullMatch(const ::std::string& str,
const RE& re) {
933 return FullMatch(str.c_str(), re);
936 return PartialMatch(str.c_str(), re);
939 static bool FullMatch(
const char* str,
const RE& re);
940 static bool PartialMatch(
const char* str,
const RE& re);
943 void Init(
const char* regex);
944 const char* pattern_;
947 #if GTEST_USES_POSIX_RE 950 regex_t partial_regex_;
952 #else // GTEST_USES_SIMPLE_RE 954 const char* full_pattern_;
959 #endif // ::testing::internal::RE implementation 998 #if !defined(GTEST_LOG_) 1000 #define GTEST_LOG_(severity) \ 1001 ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \ 1002 __FILE__, __LINE__) \ 1008 #endif // !defined(GTEST_LOG_) 1010 #if !defined(GTEST_CHECK_) 1025 #define GTEST_CHECK_(condition) \ 1026 GTEST_AMBIGUOUS_ELSE_BLOCKER_ \ 1027 if (::testing::internal::IsTrue(condition)) \ 1030 GTEST_LOG_(FATAL) << "Condition " #condition " failed. " 1031 #endif // !defined(GTEST_CHECK_) 1038 #define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \ 1039 if (const int gtest_error = (posix_call)) \ 1040 GTEST_LOG_(FATAL) << #posix_call << "failed with error " << gtest_error 1053 template <
typename T>
1057 template <
typename T>
1063 #define GTEST_REFERENCE_TO_CONST_(T) \ 1064 typename ::testing::internal::ConstRef<T>::type 1086 template <
typename To>
1112 template <
typename To,
typename From>
1121 const To to =
nullptr;
1122 ::testing::internal::ImplicitCast_<From*>(to);
1127 GTEST_CHECK_(f ==
nullptr || dynamic_cast<To>(f) !=
nullptr);
1129 return static_cast<To
>(
f);
1137 template <
class Derived,
class Base>
1143 #if GTEST_HAS_DOWNCAST_ 1144 return ::down_cast<Derived*>(base);
1145 #elif GTEST_HAS_RTTI 1146 return dynamic_cast<Derived*
>(base);
1148 return static_cast<Derived*
>(base);
1152 #if GTEST_HAS_STREAM_REDIRECTION 1165 #endif // GTEST_HAS_STREAM_REDIRECTION 1175 #if GTEST_HAS_DEATH_TEST 1177 std::vector<std::string> GetInjectableArgvs();
1179 void SetInjectableArgvs(
const std::vector<std::string>* new_argvs);
1180 void SetInjectableArgvs(
const std::vector<std::string>& new_argvs);
1181 void ClearInjectableArgvs();
1183 #endif // GTEST_HAS_DEATH_TEST 1186 #if GTEST_IS_THREADSAFE 1188 #if GTEST_OS_WINDOWS 1198 typedef void* Handle;
1200 explicit AutoHandle(Handle handle);
1206 void Reset(Handle handle);
1211 bool IsCloseable()
const;
1215 AutoHandle(
const AutoHandle&) =
delete;
1216 AutoHandle& operator=(
const AutoHandle&) =
delete;
1220 #if GTEST_HAS_NOTIFICATION_ 1237 Notification() : notified_(
false) {}
1238 Notification(
const Notification&) =
delete;
1239 Notification& operator=(
const Notification&) =
delete;
1244 std::lock_guard<std::mutex> lock(mu_);
1251 void WaitForNotification() {
1252 std::unique_lock<std::mutex> lock(mu_);
1253 cv_.wait(lock, [
this]() {
return notified_; });
1258 std::condition_variable cv_;
1262 #endif // GTEST_HAS_NOTIFICATION_ 1267 #if GTEST_HAS_PTHREAD && !GTEST_OS_WINDOWS_MINGW 1274 class ThreadWithParamBase {
1276 virtual ~ThreadWithParamBase() {}
1277 virtual void Run() = 0;
1286 extern "C" inline void* ThreadFuncWithCLinkage(
void* thread) {
1287 static_cast<ThreadWithParamBase*
>(thread)->Run();
1303 template <
typename T>
1304 class ThreadWithParam :
public ThreadWithParamBase {
1306 typedef void UserThreadFunc(T);
1308 ThreadWithParam(UserThreadFunc* func, T
param, Notification* thread_can_start)
1311 thread_can_start_(thread_can_start),
1313 ThreadWithParamBase*
const base =
this;
1317 pthread_create(&thread_,
nullptr, &ThreadFuncWithCLinkage, base));
1319 ~ThreadWithParam()
override { Join(); }
1328 void Run()
override {
1329 if (thread_can_start_ !=
nullptr) thread_can_start_->WaitForNotification();
1334 UserThreadFunc*
const func_;
1338 Notification*
const thread_can_start_;
1343 ThreadWithParam(
const ThreadWithParam&) =
delete;
1344 ThreadWithParam& operator=(
const ThreadWithParam&) =
delete;
1346 #endif // !GTEST_OS_WINDOWS && GTEST_HAS_PTHREAD || 1349 #if GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ 1353 #elif GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT 1371 enum MutexType { kStatic = 0, kDynamic = 1 };
1375 enum StaticConstructorSelector { kStaticMutex = 0 };
1380 explicit Mutex(StaticConstructorSelector ) {}
1395 void ThreadSafeLazyInit();
1399 unsigned int owner_thread_id_;
1404 long critical_section_init_phase_;
1405 GTEST_CRITICAL_SECTION* critical_section_;
1407 Mutex(
const Mutex&) =
delete;
1408 Mutex& operator=(
const Mutex&) =
delete;
1411 #define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ 1412 extern ::testing::internal::Mutex mutex 1414 #define GTEST_DEFINE_STATIC_MUTEX_(mutex) \ 1415 ::testing::internal::Mutex mutex(::testing::internal::Mutex::kStaticMutex) 1429 Mutex*
const mutex_;
1439 class ThreadLocalValueHolderBase {
1441 virtual ~ThreadLocalValueHolderBase() {}
1446 class ThreadLocalBase {
1452 virtual ThreadLocalValueHolderBase* NewValueForCurrentThread()
const = 0;
1455 ThreadLocalBase() {}
1456 virtual ~ThreadLocalBase() {}
1459 ThreadLocalBase(
const ThreadLocalBase&) =
delete;
1460 ThreadLocalBase& operator=(
const ThreadLocalBase&) =
delete;
1470 static ThreadLocalValueHolderBase* GetValueOnCurrentThread(
1471 const ThreadLocalBase* thread_local_instance);
1474 static void OnThreadLocalDestroyed(
1475 const ThreadLocalBase* thread_local_instance);
1485 virtual ~Runnable() {}
1486 virtual void Run() = 0;
1489 ThreadWithParamBase(Runnable* runnable, Notification* thread_can_start);
1490 virtual ~ThreadWithParamBase();
1497 template <
typename T>
1498 class ThreadWithParam :
public ThreadWithParamBase {
1500 typedef void UserThreadFunc(T);
1502 ThreadWithParam(UserThreadFunc* func, T
param, Notification* thread_can_start)
1503 : ThreadWithParamBase(
new RunnableImpl(func, param), thread_can_start) {}
1504 virtual ~ThreadWithParam() {}
1507 class RunnableImpl :
public Runnable {
1509 RunnableImpl(UserThreadFunc* func, T param) : func_(func), param_(param) {}
1510 virtual ~RunnableImpl() {}
1511 virtual void Run() { func_(param_); }
1514 UserThreadFunc*
const func_;
1517 RunnableImpl(
const RunnableImpl&) =
delete;
1518 RunnableImpl& operator=(
const RunnableImpl&) =
delete;
1521 ThreadWithParam(
const ThreadWithParam&) =
delete;
1522 ThreadWithParam& operator=(
const ThreadWithParam&) =
delete;
1552 template <
typename T>
1555 ThreadLocal() : default_factory_(
new DefaultValueHolderFactory()) {}
1557 : default_factory_(
new InstanceValueHolderFactory(value)) {}
1559 ~
ThreadLocal()
override { ThreadLocalRegistry::OnThreadLocalDestroyed(
this); }
1561 T* pointer() {
return GetOrCreateValue(); }
1562 const T* pointer()
const {
return GetOrCreateValue(); }
1563 const T&
get()
const {
return *pointer(); }
1564 void set(
const T& value) { *pointer() = value; }
1569 class ValueHolder :
public ThreadLocalValueHolderBase {
1571 ValueHolder() : value_() {}
1572 explicit ValueHolder(
const T& value) : value_(value) {}
1574 T* pointer() {
return &value_; }
1578 ValueHolder(
const ValueHolder&) =
delete;
1579 ValueHolder& operator=(
const ValueHolder&) =
delete;
1582 T* GetOrCreateValue()
const {
1583 return static_cast<ValueHolder*
>(
1584 ThreadLocalRegistry::GetValueOnCurrentThread(
this))
1588 ThreadLocalValueHolderBase* NewValueForCurrentThread()
const override {
1589 return default_factory_->MakeNewHolder();
1592 class ValueHolderFactory {
1594 ValueHolderFactory() {}
1595 virtual ~ValueHolderFactory() {}
1596 virtual ValueHolder* MakeNewHolder()
const = 0;
1599 ValueHolderFactory(
const ValueHolderFactory&) =
delete;
1600 ValueHolderFactory& operator=(
const ValueHolderFactory&) =
delete;
1603 class DefaultValueHolderFactory :
public ValueHolderFactory {
1605 DefaultValueHolderFactory() {}
1606 ValueHolder* MakeNewHolder()
const override {
return new ValueHolder(); }
1609 DefaultValueHolderFactory(
const DefaultValueHolderFactory&) =
delete;
1610 DefaultValueHolderFactory& operator=(
const DefaultValueHolderFactory&) =
1614 class InstanceValueHolderFactory :
public ValueHolderFactory {
1616 explicit InstanceValueHolderFactory(
const T& value) : value_(value) {}
1617 ValueHolder* MakeNewHolder()
const override {
1618 return new ValueHolder(value_);
1624 InstanceValueHolderFactory(
const InstanceValueHolderFactory&) =
delete;
1625 InstanceValueHolderFactory& operator=(
const InstanceValueHolderFactory&) =
1629 std::unique_ptr<ValueHolderFactory> default_factory_;
1635 #elif GTEST_HAS_PTHREAD 1643 owner_ = pthread_self();
1659 void AssertHeld()
const {
1660 GTEST_CHECK_(has_owner_ && pthread_equal(owner_, pthread_self()))
1661 <<
"The current thread is not holding the mutex @" <<
this;
1670 pthread_mutex_t mutex_;
1682 #define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ 1683 extern ::testing::internal::MutexBase mutex 1691 #define GTEST_DEFINE_STATIC_MUTEX_(mutex) \ 1692 ::testing::internal::MutexBase mutex = {PTHREAD_MUTEX_INITIALIZER, false, 0} 1696 class Mutex :
public MutexBase {
1705 Mutex(
const Mutex&) =
delete;
1706 Mutex& operator=(
const Mutex&) =
delete;
1721 MutexBase*
const mutex_;
1735 class GTEST_API_ ThreadLocalValueHolderBase {
1737 virtual ~ThreadLocalValueHolderBase() {}
1742 extern "C" inline void DeleteThreadLocalValue(
void* value_holder) {
1743 delete static_cast<ThreadLocalValueHolderBase*
>(value_holder);
1747 template <
typename T>
1751 : key_(CreateKey()), default_factory_(
new DefaultValueHolderFactory()) {}
1752 explicit ThreadLocal(
const T& value)
1753 : key_(CreateKey()),
1754 default_factory_(
new InstanceValueHolderFactory(value)) {}
1758 DeleteThreadLocalValue(pthread_getspecific(key_));
1765 T* pointer() {
return GetOrCreateValue(); }
1766 const T* pointer()
const {
return GetOrCreateValue(); }
1767 const T&
get()
const {
return *pointer(); }
1768 void set(
const T& value) { *pointer() = value; }
1772 class ValueHolder :
public ThreadLocalValueHolderBase {
1774 ValueHolder() : value_() {}
1775 explicit ValueHolder(
const T& value) : value_(value) {}
1777 T* pointer() {
return &value_; }
1781 ValueHolder(
const ValueHolder&) =
delete;
1782 ValueHolder& operator=(
const ValueHolder&) =
delete;
1785 static pthread_key_t CreateKey() {
1790 pthread_key_create(&key, &DeleteThreadLocalValue));
1794 T* GetOrCreateValue()
const {
1795 ThreadLocalValueHolderBase*
const holder =
1796 static_cast<ThreadLocalValueHolderBase*
>(pthread_getspecific(key_));
1797 if (holder !=
nullptr) {
1798 return CheckedDowncastToActualType<ValueHolder>(holder)->pointer();
1801 ValueHolder*
const new_holder = default_factory_->MakeNewHolder();
1802 ThreadLocalValueHolderBase*
const holder_base = new_holder;
1804 return new_holder->pointer();
1807 class ValueHolderFactory {
1809 ValueHolderFactory() {}
1810 virtual ~ValueHolderFactory() {}
1811 virtual ValueHolder* MakeNewHolder()
const = 0;
1814 ValueHolderFactory(
const ValueHolderFactory&) =
delete;
1815 ValueHolderFactory& operator=(
const ValueHolderFactory&) =
delete;
1818 class DefaultValueHolderFactory :
public ValueHolderFactory {
1820 DefaultValueHolderFactory() {}
1821 ValueHolder* MakeNewHolder()
const override {
return new ValueHolder(); }
1824 DefaultValueHolderFactory(
const DefaultValueHolderFactory&) =
delete;
1825 DefaultValueHolderFactory& operator=(
const DefaultValueHolderFactory&) =
1829 class InstanceValueHolderFactory :
public ValueHolderFactory {
1831 explicit InstanceValueHolderFactory(
const T& value) : value_(value) {}
1832 ValueHolder* MakeNewHolder()
const override {
1833 return new ValueHolder(value_);
1839 InstanceValueHolderFactory(
const InstanceValueHolderFactory&) =
delete;
1840 InstanceValueHolderFactory& operator=(
const InstanceValueHolderFactory&) =
1845 const pthread_key_t key_;
1846 std::unique_ptr<ValueHolderFactory> default_factory_;
1848 ThreadLocal(
const ThreadLocal&) =
delete;
1849 ThreadLocal& operator=(
const ThreadLocal&) =
delete;
1852 #endif // GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ 1854 #else // GTEST_IS_THREADSAFE 1869 #define GTEST_DECLARE_STATIC_MUTEX_(mutex) \ 1870 extern ::testing::internal::Mutex mutex 1872 #define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex 1886 template <
typename T>
1893 const T&
get()
const {
return value_; }
1894 void set(
const T& value) { value_ = value; }
1900 #endif // GTEST_IS_THREADSAFE 1906 #if GTEST_OS_WINDOWS 1907 #define GTEST_PATH_SEP_ "\\" 1908 #define GTEST_HAS_ALT_PATH_SEP_ 1 1910 #define GTEST_PATH_SEP_ "/" 1911 #define GTEST_HAS_ALT_PATH_SEP_ 0 1912 #endif // GTEST_OS_WINDOWS 1922 return isalpha(static_cast<unsigned char>(ch)) != 0;
1925 return isalnum(static_cast<unsigned char>(ch)) != 0;
1928 return isdigit(static_cast<unsigned char>(ch)) != 0;
1931 return islower(static_cast<unsigned char>(ch)) != 0;
1934 return isspace(static_cast<unsigned char>(ch)) != 0;
1937 return isupper(static_cast<unsigned char>(ch)) != 0;
1940 return isxdigit(static_cast<unsigned char>(ch)) != 0;
1942 #ifdef __cpp_char8_t 1944 return isxdigit(static_cast<unsigned char>(ch)) != 0;
1948 const unsigned char low_byte =
static_cast<unsigned char>(ch);
1949 return ch == low_byte && isxdigit(low_byte) != 0;
1952 const unsigned char low_byte =
static_cast<unsigned char>(ch);
1953 return ch == low_byte && isxdigit(low_byte) != 0;
1956 const unsigned char low_byte =
static_cast<unsigned char>(ch);
1957 return ch == low_byte && isxdigit(low_byte) != 0;
1961 return static_cast<char>(tolower(static_cast<unsigned char>(ch)));
1964 return static_cast<char>(toupper(static_cast<unsigned char>(ch)));
1968 std::string::iterator it = str.end();
1969 while (it != str.begin() &&
IsSpace(*--it)) it = str.erase(it);
1982 #if GTEST_HAS_FILE_SYSTEM 1983 #if GTEST_OS_WINDOWS 1985 typedef struct _stat StatStruct;
1987 #if GTEST_OS_WINDOWS_MOBILE 1988 inline int FileNo(FILE* file) {
return reinterpret_cast<int>(_fileno(file)); }
1992 inline int FileNo(FILE* file) {
return _fileno(file); }
1993 inline int Stat(
const char* path, StatStruct* buf) {
return _stat(path, buf); }
1994 inline int RmDir(
const char* dir) {
return _rmdir(dir); }
1995 inline bool IsDir(
const StatStruct& st) {
return (_S_IFDIR & st.st_mode) != 0; }
1996 #endif // GTEST_OS_WINDOWS_MOBILE 1998 #elif GTEST_OS_ESP8266 1999 typedef struct stat StatStruct;
2001 inline int FileNo(FILE* file) {
return fileno(file); }
2002 inline int Stat(
const char* path, StatStruct* buf) {
2006 inline int RmDir(
const char* dir) {
return rmdir(dir); }
2007 inline bool IsDir(
const StatStruct& st) {
return S_ISDIR(st.st_mode); }
2011 typedef struct stat StatStruct;
2013 inline int FileNo(FILE* file) {
return fileno(file); }
2014 inline int Stat(
const char* path, StatStruct* buf) {
return stat(path, buf); }
2017 inline int RmDir(
const char*) {
return 0; }
2019 inline int RmDir(
const char* dir) {
return rmdir(dir); }
2021 inline bool IsDir(
const StatStruct& st) {
return S_ISDIR(st.st_mode); }
2023 #endif // GTEST_OS_WINDOWS 2024 #endif // GTEST_HAS_FILE_SYSTEM 2028 #if GTEST_OS_WINDOWS 2031 inline int DoIsATTY(
int fd) {
return isatty(fd); }
2032 inline int StrCaseCmp(
const char* s1,
const char* s2) {
2033 return stricmp(s1, s2);
2035 inline char*
StrDup(
const char* src) {
return strdup(src); }
2036 #else // !__BORLANDC__ 2037 #if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_ZOS || GTEST_OS_IOS || \ 2038 GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT || defined(ESP_PLATFORM) 2039 inline int DoIsATTY(
int ) {
return 0; }
2041 inline int DoIsATTY(
int fd) {
return _isatty(fd); }
2042 #endif // GTEST_OS_WINDOWS_MOBILE 2043 inline int StrCaseCmp(
const char* s1,
const char* s2) {
2044 return _stricmp(s1, s2);
2046 inline char*
StrDup(
const char* src) {
return _strdup(src); }
2047 #endif // __BORLANDC__ 2049 #elif GTEST_OS_ESP8266 2051 inline int DoIsATTY(
int fd) {
return isatty(fd); }
2052 inline int StrCaseCmp(
const char* s1,
const char* s2) {
2053 return strcasecmp(s1, s2);
2055 inline char*
StrDup(
const char* src) {
return strdup(src); }
2061 return strcasecmp(s1, s2);
2063 inline char*
StrDup(
const char* src) {
return strdup(src); }
2065 #endif // GTEST_OS_WINDOWS 2071 int savedErrno = errno;
2085 #if GTEST_HAS_FILE_SYSTEM 2086 #if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_WINDOWS_PHONE && \ 2087 !GTEST_OS_WINDOWS_RT && !GTEST_OS_ESP8266 && !GTEST_OS_XTENSA && \ 2089 inline int ChDir(
const char* dir) {
return chdir(dir); }
2092 #if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MINGW 2093 struct wchar_codecvt :
public std::codecvt<wchar_t, char, std::mbstate_t> {};
2094 std::wstring_convert<wchar_codecvt> converter;
2095 std::wstring wide_path = converter.from_bytes(path);
2096 std::wstring wide_mode = converter.from_bytes(mode);
2097 return _wfopen(wide_path.c_str(), wide_mode.c_str());
2098 #else // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MINGW 2099 return fopen(path, mode);
2100 #endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MINGW 2102 #if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_QURT 2103 inline FILE*
FReopen(
const char* path,
const char*
mode, FILE* stream) {
2104 return freopen(path, mode, stream);
2106 inline FILE*
FDOpen(
int fd,
const char*
mode) {
return fdopen(fd, mode); }
2107 #endif // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_QURT 2108 inline int FClose(FILE* fp) {
return fclose(fp); }
2109 #if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_QURT 2110 inline int Read(
int fd,
void* buf,
unsigned int count) {
2111 return static_cast<int>(
read(fd, buf, count));
2113 inline int Write(
int fd,
const void* buf,
unsigned int count) {
2114 return static_cast<int>(
write(fd, buf, count));
2116 inline int Close(
int fd) {
return close(fd); }
2117 #endif // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_QURT 2118 #endif // GTEST_HAS_FILE_SYSTEM 2120 #if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_QURT 2121 inline const char*
StrError(
int errnum) {
return strerror(errnum); }
2122 #endif // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_QURT 2124 inline const char*
GetEnv(
const char* name) {
2125 #if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || \ 2126 GTEST_OS_WINDOWS_RT || GTEST_OS_ESP8266 || GTEST_OS_XTENSA || \ 2129 static_cast<void>(name);
2131 #elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9) 2134 const char*
const env = getenv(name);
2135 return (env !=
nullptr && env[0] !=
'\0') ? env :
nullptr;
2137 return getenv(name);
2143 #if GTEST_OS_WINDOWS_MOBILE 2147 [[noreturn]]
void Abort();
2149 [[noreturn]]
inline void Abort() { abort(); }
2150 #endif // GTEST_OS_WINDOWS_MOBILE 2159 #if defined(_MSC_VER) && !GTEST_OS_WINDOWS_MOBILE 2161 #define GTEST_SNPRINTF_(buffer, size, format, ...) \ 2162 _snprintf_s(buffer, size, size, format, __VA_ARGS__) 2163 #elif defined(_MSC_VER) 2165 #define GTEST_SNPRINTF_ _snprintf 2167 #define GTEST_SNPRINTF_ snprintf 2196 template <
size_t size>
2226 #if !defined(GTEST_FLAG) 2227 #define GTEST_FLAG_NAME_(name) gtest_##name 2228 #define GTEST_FLAG(name) FLAGS_gtest_##name 2229 #endif // !defined(GTEST_FLAG) 2235 #define GTEST_DEFINE_bool_(name, default_val, doc) \ 2236 ABSL_FLAG(bool, GTEST_FLAG_NAME_(name), default_val, doc) 2237 #define GTEST_DEFINE_int32_(name, default_val, doc) \ 2238 ABSL_FLAG(int32_t, GTEST_FLAG_NAME_(name), default_val, doc) 2239 #define GTEST_DEFINE_string_(name, default_val, doc) \ 2240 ABSL_FLAG(std::string, GTEST_FLAG_NAME_(name), default_val, doc) 2243 #define GTEST_DECLARE_bool_(name) \ 2244 ABSL_DECLARE_FLAG(bool, GTEST_FLAG_NAME_(name)) 2245 #define GTEST_DECLARE_int32_(name) \ 2246 ABSL_DECLARE_FLAG(int32_t, GTEST_FLAG_NAME_(name)) 2247 #define GTEST_DECLARE_string_(name) \ 2248 ABSL_DECLARE_FLAG(std::string, GTEST_FLAG_NAME_(name)) 2250 #define GTEST_FLAG_SAVER_ ::absl::FlagSaver 2252 #define GTEST_FLAG_GET(name) ::absl::GetFlag(GTEST_FLAG(name)) 2253 #define GTEST_FLAG_SET(name, value) \ 2254 (void)(::absl::SetFlag(>EST_FLAG(name), value)) 2255 #define GTEST_USE_OWN_FLAGFILE_FLAG_ 0 2257 #else // GTEST_HAS_ABSL 2260 #define GTEST_DEFINE_bool_(name, default_val, doc) \ 2261 namespace testing { \ 2262 GTEST_API_ bool GTEST_FLAG(name) = (default_val); \ 2264 static_assert(true, "no-op to require trailing semicolon") 2265 #define GTEST_DEFINE_int32_(name, default_val, doc) \ 2266 namespace testing { \ 2267 GTEST_API_ std::int32_t GTEST_FLAG(name) = (default_val); \ 2269 static_assert(true, "no-op to require trailing semicolon") 2270 #define GTEST_DEFINE_string_(name, default_val, doc) \ 2271 namespace testing { \ 2272 GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val); \ 2274 static_assert(true, "no-op to require trailing semicolon") 2277 #define GTEST_DECLARE_bool_(name) \ 2278 namespace testing { \ 2279 GTEST_API_ extern bool GTEST_FLAG(name); \ 2281 static_assert(true, "no-op to require trailing semicolon") 2282 #define GTEST_DECLARE_int32_(name) \ 2283 namespace testing { \ 2284 GTEST_API_ extern std::int32_t GTEST_FLAG(name); \ 2286 static_assert(true, "no-op to require trailing semicolon") 2287 #define GTEST_DECLARE_string_(name) \ 2288 namespace testing { \ 2289 GTEST_API_ extern ::std::string GTEST_FLAG(name); \ 2291 static_assert(true, "no-op to require trailing semicolon") 2293 #define GTEST_FLAG_SAVER_ ::testing::internal::GTestFlagSaver 2295 #define GTEST_FLAG_GET(name) ::testing::GTEST_FLAG(name) 2296 #define GTEST_FLAG_SET(name, value) (void)(::testing::GTEST_FLAG(name) = value) 2297 #define GTEST_USE_OWN_FLAGFILE_FLAG_ 1 2299 #endif // GTEST_HAS_ABSL 2302 #if !defined(GTEST_EXCLUSIVE_LOCK_REQUIRED_) 2303 #define GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks) 2304 #define GTEST_LOCK_EXCLUDED_(locks) 2305 #endif // !defined(GTEST_EXCLUSIVE_LOCK_REQUIRED_) 2323 #if !defined(GTEST_INTERNAL_DEPRECATED) 2333 #if defined(_MSC_VER) 2334 #define GTEST_INTERNAL_DEPRECATED(message) __declspec(deprecated(message)) 2335 #elif defined(__GNUC__) 2336 #define GTEST_INTERNAL_DEPRECATED(message) __attribute__((deprecated(message))) 2338 #define GTEST_INTERNAL_DEPRECATED(message) 2341 #endif // !defined(GTEST_INTERNAL_DEPRECATED) 2346 #define GTEST_INTERNAL_HAS_ANY 1 2347 #include "absl/types/any.h" 2349 namespace internal {
2350 using Any = ::absl::any;
2354 #ifdef __has_include 2355 #if __has_include(<any>) && __cplusplus >= 201703L 2358 #define GTEST_INTERNAL_HAS_ANY 1 2361 namespace internal {
2362 using Any = ::std::any;
2367 #endif // __has_include(<any>) && __cplusplus >= 201703L 2368 #endif // __has_include 2369 #endif // GTEST_HAS_ABSL 2374 #define GTEST_INTERNAL_HAS_OPTIONAL 1 2375 #include "absl/types/optional.h" 2377 namespace internal {
2378 template <
typename T>
2379 using Optional = ::absl::optional<T>;
2380 inline ::absl::nullopt_t Nullopt() { return ::absl::nullopt; }
2384 #ifdef __has_include 2385 #if __has_include(<optional>) && __cplusplus >= 201703L 2388 #define GTEST_INTERNAL_HAS_OPTIONAL 1 2391 namespace internal {
2392 template <
typename T>
2393 using Optional = ::std::optional<T>;
2394 inline ::std::nullopt_t Nullopt() { return ::std::nullopt; }
2399 #endif // __has_include(<optional>) && __cplusplus >= 201703L 2400 #endif // __has_include 2401 #endif // GTEST_HAS_ABSL 2406 #define GTEST_INTERNAL_HAS_STRING_VIEW 1 2407 #include "absl/strings/string_view.h" 2409 namespace internal {
2410 using StringView = ::absl::string_view;
2414 #ifdef __has_include 2415 #if __has_include(<string_view>) && __cplusplus >= 201703L 2418 #define GTEST_INTERNAL_HAS_STRING_VIEW 1 2419 #include <string_view> 2421 namespace internal {
2422 using StringView = ::std::string_view;
2427 #endif // __has_include(<string_view>) && __cplusplus >= 201703L 2428 #endif // __has_include 2429 #endif // GTEST_HAS_ABSL 2434 #define GTEST_INTERNAL_HAS_VARIANT 1 2435 #include "absl/types/variant.h" 2437 namespace internal {
2438 template <
typename... T>
2439 using Variant = ::absl::variant<T...>;
2443 #ifdef __has_include 2444 #if __has_include(<variant>) && __cplusplus >= 201703L 2447 #define GTEST_INTERNAL_HAS_VARIANT 1 2450 namespace internal {
2451 template <
typename... T>
2452 using Variant = ::std::variant<T...>;
2456 #endif // __has_include(<variant>) && __cplusplus >= 201703L 2457 #endif // __has_include 2458 #endif // GTEST_HAS_ABSL 2460 #endif // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_
FILE * FReopen(const char *path, const char *mode, FILE *stream)
GTEST_API_ std::string GetCapturedStdout()
GTEST_API_ std::string GetCapturedStderr()
static bool FullMatch(const ::std::string &str, const RE &re)
#define GTEST_DISABLE_MSC_DEPRECATED_PUSH_()
void write(std::ostream &os, const datablock &db)
GTEST_API_ size_t GetThreadCount()
#define GTEST_INTENTIONAL_CONST_COND_PUSH_()
GTEST_API_ bool IsTrue(bool condition)
GTEST_API_ std::string ReadEntireFile(FILE *file)
GTEST_API_ bool ParseInt32(const Message &src_text, const char *str, int32_t *value)
RE(const ::std::string ®ex)
constexpr BiggestInt kMaxBiggestInt
int ChDir(const char *dir)
const char * GetEnv(const char *name)
GTEST_API_ void CaptureStdout()
static bool PartialMatch(const ::std::string &str, const RE &re)
#define GTEST_DISABLE_MSC_DEPRECATED_POP_()
const T * pointer() const
GTEST_API_ size_t GetFileSize(FILE *file)
GTEST_API_ ::std::string FormatFileLocation(const char *file, int line)
int Write(int fd, const void *buf, unsigned int count)
::std::ostream & GetStream()
int RmDir(const char *dir)
#define GTEST_CHECK_(condition)
GTEST_API_ std::vector< std::string > GetArgvs()
int Read(int fd, void *buf, unsigned int count)
void max(Image< double > &op1, const Image< double > &op2)
ThreadLocal(const T &value)
GTEST_DISABLE_MSC_WARNINGS_POP_() inline const char *SkipComma(const char *str)
int StrCaseCmp(const char *s1, const char *s2)
bool IsDir(const StatStruct &st)
#define GTEST_CHECK_POSIX_SUCCESS_(posix_call)
bool BoolFromGTestEnv(const char *flag, bool default_val)
FILE * FOpen(const char *path, const char *mode)
struct _parameter * param
GTEST_API_ ::std::string FormatCompilerIndependentFileLocation(const char *file, int line)
const char * pattern() const
GTEST_API_ void CaptureStderr()
GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251) class GTEST_API_ TypedTestSuitePState
file read(std::istream &is)
FILE * FDOpen(int fd, const char *mode)
char * StrDup(const char *src)
const char * StrError(int errnum)
Derived * CheckedDowncastToActualType(Base *base)
std::string OutputFlagAlsoCheckEnvVar()
std::string StripTrailingSpaces(std::string str)
const char * StringFromGTestEnv(const char *flag, const char *default_val)
#define GTEST_INTENTIONAL_CONST_COND_POP_()
GTEST_API_ int32_t Int32FromGTestEnv(const char *flag, int32_t default_val)