@ -161,10 +161,10 @@
// NOT define them.
//
// These macros are public so that portable tests can be written.
// Such tests typically surround code using a feature with an #if
// Such tests typically surround code using a feature with an #ifdef
// which controls that code. For example:
//
// #if GTEST_HAS_DEATH_TEST
// #ifdef GTEST_HAS_DEATH_TEST
// EXPECT_DEATH(DoSomethingDeadly());
// #endif
//
@ -178,6 +178,7 @@
// define themselves.
// GTEST_USES_SIMPLE_RE - our own simple regex is used;
// the above RE\b(s) are mutually exclusive.
// GTEST_HAS_ABSL - Google Test is compiled with Abseil.
// Misc public macros
// ------------------
@ -202,16 +203,25 @@
// is suppressed.
// GTEST_INTERNAL_HAS_ANY - for enabling UniversalPrinter<std::any> or
// UniversalPrinter<absl::any> specializations.
// Always defined to 0 or 1.
// GTEST_INTERNAL_HAS_OPTIONAL - for enabling UniversalPrinter<std::optional>
// or
// UniversalPrinter<absl::optional>
// specializations.
// specializations. Always defined to 0 or 1.
// GTEST_INTERNAL_HAS_STRING_VIEW - for enabling Matcher<std::string_view> or
// Matcher<absl::string_view>
// specializations.
// specializations. Always defined to 0 or 1.
// GTEST_INTERNAL_HAS_VARIANT - for enabling UniversalPrinter<std::variant> or
// UniversalPrinter<absl::variant>
// specializations.
// specializations. Always defined to 0 or 1.
// GTEST_USE_OWN_FLAGFILE_FLAG_ - Always defined to 0 or 1.
// GTEST_HAS_CXXABI_H_ - Always defined to 0 or 1.
// GTEST_CAN_STREAM_RESULTS_ - Always defined to 0 or 1.
// GTEST_HAS_ALT_PATH_SEP_ - Always defined to 0 or 1.
// GTEST_WIDE_STRING_USES_UTF16_ - Always defined to 0 or 1.
// GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ - Always defined to 0 or 1.
// GTEST_HAS_DOWNCAST_ - Always defined to 0 or 1.
// GTEST_HAS_NOTIFICATION_- Always defined to 0 or 1.
//
// Synchronization:
// Mutex, MutexLock, ThreadLocal, GetThreadCount()
@ -303,7 +313,19 @@
# include "gtest/internal/custom/gtest-port.h"
# include "gtest/internal/gtest-port-arch.h"
# if GTEST_HAS_ABSL
# ifndef GTEST_HAS_DOWNCAST_
# define GTEST_HAS_DOWNCAST_ 0
# endif
# ifndef GTEST_HAS_MUTEX_AND_THREAD_LOCAL_
# define GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ 0
# endif
# ifndef GTEST_HAS_NOTIFICATION_
# define GTEST_HAS_NOTIFICATION_ 0
# endif
# ifdef GTEST_HAS_ABSL
# include "absl/flags/declare.h"
# include "absl/flags/flag.h"
# include "absl/flags/reflection.h"
@ -361,13 +383,13 @@
// Brings in definitions for functions used in the testing::internal::posix
// namespace (read, write, close, chdir, isatty, stat). We do not currently
// use them on Windows Mobile.
# if GTEST_OS_WINDOWS
# if ! GTEST_OS_WINDOWS_MOBILE
# ifdef GTEST_OS_WINDOWS
# ifndef GTEST_OS_WINDOWS_MOBILE
# include <direct.h>
# include <io.h>
# endif
// In order to avoid having to include <windows.h>, use forward declaration
# if GTEST_OS_WINDOWS_MINGW && !defined(__MINGW64_VERSION_MAJOR)
# if defined( GTEST_OS_WINDOWS_MINGW) && !defined(__MINGW64_VERSION_MAJOR)
// MinGW defined _CRITICAL_SECTION and _RTL_CRITICAL_SECTION as two
// separate (equivalent) structs, instead of using typedef
typedef struct _CRITICAL_SECTION GTEST_CRITICAL_SECTION ;
@ -377,7 +399,7 @@ typedef struct _CRITICAL_SECTION GTEST_CRITICAL_SECTION;
// WindowsTypesTest.CRITICAL_SECTIONIs_RTL_CRITICAL_SECTION.
typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION ;
# endif
# elif GTEST_OS_XTENSA
# elif defined( GTEST_OS_XTENSA)
# include <unistd.h>
// Xtensa toolchains define strcasecmp in the string.h header instead of
// strings.h. string.h is already included.
@ -389,7 +411,7 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
# include <unistd.h>
# endif // GTEST_OS_WINDOWS
# if GTEST_OS_LINUX_ANDROID
# ifdef GTEST_OS_LINUX_ANDROID
// Used to define __ANDROID_API__ matching the target NDK API level.
# include <android/api-level.h> // NOLINT
# endif
@ -397,17 +419,21 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
// Defines this to true if and only if Google Test can use POSIX regular
// expressions.
# ifndef GTEST_HAS_POSIX_RE
# if GTEST_OS_LINUX_ANDROID
# ifdef GTEST_OS_LINUX_ANDROID
// On Android, <regex.h> is only available starting with Gingerbread.
# define GTEST_HAS_POSIX_RE (__ANDROID_API__ >= 9)
# else
# define GTEST_HAS_POSIX_RE \
! ( GTEST_OS_WINDOWS | | GTEST_OS_XTENSA | | GTEST_OS_QURT )
# if !(defined(GTEST_OS_WINDOWS) || defined(GTEST_OS_XTENSA) || \
defined ( GTEST_OS_QURT ) )
# define GTEST_HAS_POSIX_RE 1
# else
# define GTEST_HAS_POSIX_RE 0
# endif
# endif // GTEST_OS_LINUX_ANDROID
# endif
// Select the regular expression implementation.
# if GTEST_HAS_ABSL
# ifdef GTEST_HAS_ABSL
// When using Abseil, RE2 is required.
# include "absl/strings/string_view.h"
# include "re2/re2.h"
@ -443,8 +469,12 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
// cleanups prior to that. To reliably check for C++ exception availability with
// clang, check for
// __EXCEPTIONS && __has_feature(cxx_exceptions).
# define GTEST_HAS_EXCEPTIONS (__EXCEPTIONS && __has_feature(cxx_exceptions))
# elif defined(__GNUC__) && __EXCEPTIONS
# if defined(__EXCEPTIONS) && __EXCEPTIONS && __has_feature(cxx_exceptions)
# define GTEST_HAS_EXCEPTIONS 1
# else
# define GTEST_HAS_EXCEPTIONS 0
# endif
# elif defined(__GNUC__) && defined(__EXCEPTIONS) && __EXCEPTIONS
// gcc defines __EXCEPTIONS to 1 if and only if exceptions are enabled.
# define GTEST_HAS_EXCEPTIONS 1
# elif defined(__SUNPRO_CC)
@ -452,7 +482,7 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
// detecting whether they are enabled or not. Therefore, we assume that
// they are enabled unless the user tells us otherwise.
# define GTEST_HAS_EXCEPTIONS 1
# elif defined(__IBMCPP__) && __EXCEPTIONS
# elif defined(__IBMCPP__) && defined(__EXCEPTIONS) && __EXCEPTIONS
// xlC defines __EXCEPTIONS to 1 if and only if exceptions are enabled.
# define GTEST_HAS_EXCEPTIONS 1
# elif defined(__HP_aCC)
@ -472,11 +502,14 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
// Cygwin 1.7 and below doesn't support ::std::wstring.
// Solaris' libc++ doesn't support it either. Android has
// no support for it at least as recent as Froyo (2.2).
# define GTEST_HAS_STD_WSTRING \
( ! ( GTEST_OS_LINUX_ANDROID | | GTEST_OS_CYGWIN | | GTEST_OS_SOLARIS | | \
GTEST_OS_HAIKU | | GTEST_OS_ESP32 | | GTEST_OS_ESP8266 | | \
GTEST_OS_XTENSA | | GTEST_OS_QURT ) )
# if (!(defined(GTEST_OS_LINUX_ANDROID) || defined(GTEST_OS_CYGWIN) || \
defined ( GTEST_OS_SOLARIS ) | | defined ( GTEST_OS_HAIKU ) | | \
defined ( GTEST_OS_ESP32 ) | | defined ( GTEST_OS_ESP8266 ) | | \
defined ( GTEST_OS_XTENSA ) | | defined ( GTEST_OS_QURT ) ) )
# define GTEST_HAS_STD_WSTRING 1
# else
# define GTEST_HAS_STD_WSTRING 0
# endif
# endif // GTEST_HAS_STD_WSTRING
# ifndef GTEST_HAS_FILE_SYSTEM
@ -506,7 +539,8 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
// -frtti -fno-exceptions, the build fails at link time with undefined
// references to __cxa_bad_typeid. Note sure if STL or toolchain bug,
// so disable RTTI when detected.
# if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) && !defined(__EXCEPTIONS)
# if defined(GTEST_OS_LINUX_ANDROID) && defined(_STLPORT_MAJOR) && \
! defined ( __EXCEPTIONS )
# define GTEST_HAS_RTTI 0
# else
# define GTEST_HAS_RTTI 1
@ -554,11 +588,17 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
//
// To disable threading support in Google Test, add -DGTEST_HAS_PTHREAD=0
// to your compiler flags.
# define GTEST_HAS_PTHREAD \
( GTEST_OS_LINUX | | GTEST_OS_MAC | | GTEST_OS_HPUX | | GTEST_OS_QNX | | \
GTEST_OS_FREEBSD | | GTEST_OS_NACL | | GTEST_OS_NETBSD | | GTEST_OS_FUCHSIA | | \
GTEST_OS_DRAGONFLY | | GTEST_OS_GNU_KFREEBSD | | GTEST_OS_OPENBSD | | \
GTEST_OS_HAIKU | | GTEST_OS_GNU_HURD )
# if (defined(GTEST_OS_LINUX) || defined(GTEST_OS_MAC) || \
defined ( GTEST_OS_HPUX ) | | defined ( GTEST_OS_QNX ) | | \
defined ( GTEST_OS_FREEBSD ) | | defined ( GTEST_OS_NACL ) | | \
defined ( GTEST_OS_NETBSD ) | | defined ( GTEST_OS_FUCHSIA ) | | \
defined ( GTEST_OS_DRAGONFLY ) | | defined ( GTEST_OS_GNU_KFREEBSD ) | | \
defined ( GTEST_OS_OPENBSD ) | | defined ( GTEST_OS_HAIKU ) | | \
defined ( GTEST_OS_GNU_HURD ) )
# define GTEST_HAS_PTHREAD 1
# else
# define GTEST_HAS_PTHREAD 0
# endif
# endif // GTEST_HAS_PTHREAD
# if GTEST_HAS_PTHREAD
@ -577,8 +617,8 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
# ifndef GTEST_HAS_CLONE
// The user didn't tell us, so we need to figure it out.
# if GTEST_OS_LINUX && !defined(__ia64__)
# if GTEST_OS_LINUX_ANDROID
# if defined( GTEST_OS_LINUX) && !defined(__ia64__)
# if defined( GTEST_OS_LINUX_ANDROID)
// On Android, clone() became available at different API levels for each 32-bit
// architecture.
# if defined(__LP64__) || (defined(__arm__) && __ANDROID_API__ >= 9) || \
@ -603,9 +643,10 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
// By default, we assume that stream redirection is supported on all
// platforms except known mobile / embedded ones. Also, if the port doesn't have
// a file system, stream redirection is not supported.
# if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || \
GTEST_OS_WINDOWS_RT | | GTEST_OS_ESP8266 | | GTEST_OS_XTENSA | | \
GTEST_OS_QURT | | ! GTEST_HAS_FILE_SYSTEM
# if defined(GTEST_OS_WINDOWS_MOBILE) || defined(GTEST_OS_WINDOWS_PHONE) || \
defined ( GTEST_OS_WINDOWS_RT ) | | defined ( GTEST_OS_ESP8266 ) | | \
defined ( GTEST_OS_XTENSA ) | | defined ( GTEST_OS_QURT ) | | \
! GTEST_HAS_FILE_SYSTEM
# define GTEST_HAS_STREAM_REDIRECTION 0
# else
# define GTEST_HAS_STREAM_REDIRECTION 1
@ -614,13 +655,16 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
// Determines whether to support death tests.
// pops up a dialog window that cannot be suppressed programmatically.
# if (GTEST_OS_LINUX || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \
( GTEST_OS_MAC & & ! GTEST_OS_IOS ) | | \
( GTEST_OS_WINDOWS_DESKTOP & & _MSC_VER ) | | GTEST_OS_WINDOWS_MINGW | | \
GTEST_OS_AIX | | GTEST_OS_HPUX | | GTEST_OS_OPENBSD | | GTEST_OS_QNX | | \
GTEST_OS_FREEBSD | | GTEST_OS_NETBSD | | GTEST_OS_FUCHSIA | | \
GTEST_OS_DRAGONFLY | | GTEST_OS_GNU_KFREEBSD | | GTEST_OS_HAIKU | | \
GTEST_OS_GNU_HURD )
# if (defined(GTEST_OS_LINUX) || defined(GTEST_OS_CYGWIN) || \
defined ( GTEST_OS_SOLARIS ) | | \
( defined ( GTEST_OS_MAC ) & & ! defined ( GTEST_OS_IOS ) ) | | \
( defined ( GTEST_OS_WINDOWS_DESKTOP ) & & _MSC_VER ) | | \
defined ( GTEST_OS_WINDOWS_MINGW ) | | defined ( GTEST_OS_AIX ) | | \
defined ( GTEST_OS_HPUX ) | | defined ( GTEST_OS_OPENBSD ) | | \
defined ( GTEST_OS_QNX ) | | defined ( GTEST_OS_FREEBSD ) | | \
defined ( GTEST_OS_NETBSD ) | | defined ( GTEST_OS_FUCHSIA ) | | \
defined ( GTEST_OS_DRAGONFLY ) | | defined ( GTEST_OS_GNU_KFREEBSD ) | | \
defined ( GTEST_OS_HAIKU ) | | defined ( GTEST_OS_GNU_HURD ) )
// Death tests require a file system to work properly.
# if GTEST_HAS_FILE_SYSTEM
# define GTEST_HAS_DEATH_TEST 1
@ -638,14 +682,21 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
# endif
// Determines whether the system compiler uses UTF-16 for encoding wide strings.
# define GTEST_WIDE_STRING_USES_UTF16_ \
( GTEST_OS_WINDOWS | | GTEST_OS_CYGWIN | | GTEST_OS_AIX | | GTEST_OS_OS2 )
# if defined(GTEST_OS_WINDOWS) || defined(GTEST_OS_CYGWIN) || \
defined ( GTEST_OS_AIX ) | | defined ( GTEST_OS_OS2 )
# define GTEST_WIDE_STRING_USES_UTF16_ 1
# else
# define GTEST_WIDE_STRING_USES_UTF16_ 0
# endif
// Determines whether test results can be streamed to a socket.
# if GTEST_OS_LINUX || GTEST_OS_GNU_KFREEBSD || GTEST_OS_DRAGONFLY || \
GTEST_OS_FREEBSD | | GTEST_OS_NETBSD | | GTEST_OS_OPENBSD | | \
GTEST_OS_GNU_HURD
# if defined(GTEST_OS_LINUX) || defined(GTEST_OS_GNU_KFREEBSD) || \
defined ( GTEST_OS_DRAGONFLY ) | | defined ( GTEST_OS_FREEBSD ) | | \
defined ( GTEST_OS_NETBSD ) | | defined ( GTEST_OS_OPENBSD ) | | \
defined ( GTEST_OS_GNU_HURD ) | | defined ( GTEST_OS_MAC )
# define GTEST_CAN_STREAM_RESULTS_ 1
# else
# define GTEST_CAN_STREAM_RESULTS_ 0
# endif
// Defines some utility macros.
@ -759,14 +810,16 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
# ifndef GTEST_IS_THREADSAFE
# define GTEST_IS_THREADSAFE \
( GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ | | \
( GTEST_OS_WINDOWS & & ! GTEST_OS_WINDOWS_PHONE & & ! GTEST_OS_WINDOWS_RT ) | | \
GTEST_HAS_PTHREAD )
# if (GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ || \
( defined ( GTEST_OS_WINDOWS ) & & ! defined ( GTEST_OS_WINDOWS_PHONE ) & & \
! defined ( GTEST_OS_WINDOWS_RT ) ) | | \
GTEST_HAS_PTHREAD )
# define GTEST_IS_THREADSAFE 1
# endif
# endif // GTEST_IS_THREADSAFE
# if GTEST_IS_THREADSAFE
# ifdef GTEST_IS_THREADSAFE
// Some platforms don't support including these threading related headers.
# include <condition_variable> // NOLINT
# include <mutex> // NOLINT
@ -808,7 +861,7 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
// Ask the compiler not to perform tail call optimization inside
// the marked function.
# define GTEST_NO_TAIL_CALL_ __attribute__((disable_tail_calls))
# elif __GNUC__
# elif defined( __GNUC__) && !defined(__NVCOMPILER)
# define GTEST_NO_TAIL_CALL_ \
__attribute__ ( ( optimize ( " no-optimize-sibling-calls " ) ) )
# else
@ -881,7 +934,7 @@ GTEST_API_ bool IsTrue(bool condition);
// Defines RE.
# if GTEST_USES_RE2
# ifdef GTEST_USES_RE2
// This is almost `using RE = ::RE2`, except it is copy-constructible, and it
// needs to disambiguate the `std::string`, `absl::string_view`, and `const
@ -906,7 +959,9 @@ class GTEST_API_ RE {
RE2 regex_ ;
} ;
# elif GTEST_USES_POSIX_RE || GTEST_USES_SIMPLE_RE
# elif defined(GTEST_USES_POSIX_RE) || defined(GTEST_USES_SIMPLE_RE)
GTEST_DISABLE_MSC_WARNINGS_PUSH_ ( 4251 \
/* class A needs to have dll-interface to be used by clients of class B */ )
// A simple C++ wrapper for <regex.h>. It uses the POSIX Extended
// Regular Expression syntax.
@ -923,7 +978,7 @@ class GTEST_API_ RE {
~ RE ( ) ;
// Returns the string representation of the regex.
const char * pattern ( ) const { return pattern_ ; }
const char * pattern ( ) const { return pattern_ . c_str ( ) ; }
// FullMatch(str, re) returns true if and only if regular expression re
// matches the entire str.
@ -941,21 +996,21 @@ class GTEST_API_ RE {
private :
void Init ( const char * regex ) ;
const char * pattern_ ;
std : : string pattern_ ;
bool is_valid_ ;
# if GTEST_USES_POSIX_RE
# ifdef GTEST_USES_POSIX_RE
regex_t full_regex_ ; // For FullMatch().
regex_t partial_regex_ ; // For PartialMatch().
# else // GTEST_USES_SIMPLE_RE
const char * full_pattern_ ; // For FullMatch();
std : : string full_pattern_ ; // For FullMatch();
# endif
} ;
GTEST_DISABLE_MSC_WARNINGS_POP_ ( ) // 4251
# endif // ::testing::internal::RE implementation
// Formats a source file path and a line number as they would appear
@ -1172,7 +1227,7 @@ GTEST_API_ std::string ReadEntireFile(FILE* file);
// All command line arguments.
GTEST_API_ std : : vector < std : : string > GetArgvs ( ) ;
# if GTEST_HAS_DEATH_TEST
# ifdef GTEST_HAS_DEATH_TEST
std : : vector < std : : string > GetInjectableArgvs ( ) ;
// Deprecated: pass the args vector by value instead.
@ -1183,9 +1238,9 @@ void ClearInjectableArgvs();
# endif // GTEST_HAS_DEATH_TEST
// Defines synchronization primitives.
# if GTEST_IS_THREADSAFE
# ifdef GTEST_IS_THREADSAFE
# if GTEST_OS_WINDOWS
# ifdef GTEST_OS_WINDOWS
// Provides leak-safe Windows kernel handle ownership.
// Used in death tests and in threading support.
class GTEST_API_ AutoHandle {
@ -1264,7 +1319,7 @@ GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251
// On MinGW, we can have both GTEST_OS_WINDOWS and GTEST_HAS_PTHREAD
// defined, but we don't want to use MinGW's pthreads implementation, which
// has conformance problems with some versions of the POSIX standard.
# if GTEST_HAS_PTHREAD && !GTEST_OS_WINDOWS_MINGW
# if GTEST_HAS_PTHREAD && !defined( GTEST_OS_WINDOWS_MINGW)
// As a C-function, ThreadFuncWithCLinkage cannot be templated itself.
// Consequently, it cannot select a correct instantiation of ThreadWithParam
@ -1273,7 +1328,7 @@ GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251
// problem.
class ThreadWithParamBase {
public :
virtual ~ ThreadWithParamBase ( ) { }
virtual ~ ThreadWithParamBase ( ) = default ;
virtual void Run ( ) = 0 ;
} ;
@ -1350,7 +1405,8 @@ class ThreadWithParam : public ThreadWithParamBase {
// Mutex and ThreadLocal have already been imported into the namespace.
// Nothing to do here.
# elif GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT
# elif defined(GTEST_OS_WINDOWS) && !defined(GTEST_OS_WINDOWS_PHONE) && \
! defined ( GTEST_OS_WINDOWS_RT )
// Mutex implements mutex on Windows platforms. It is used in conjunction
// with class MutexLock:
@ -1734,7 +1790,7 @@ typedef GTestMutexLock MutexLock;
// ThreadLocalValueHolderBase.
class GTEST_API_ ThreadLocalValueHolderBase {
public :
virtual ~ ThreadLocalValueHolderBase ( ) { }
virtual ~ ThreadLocalValueHolderBase ( ) = default ;
} ;
// Called by pthread to delete thread-local data stored by
@ -1806,8 +1862,8 @@ class GTEST_API_ ThreadLocal {
class ValueHolderFactory {
public :
ValueHolderFactory ( ) { }
virtual ~ ValueHolderFactory ( ) { }
ValueHolderFactory ( ) = default ;
virtual ~ ValueHolderFactory ( ) = default ;
virtual ValueHolder * MakeNewHolder ( ) const = 0 ;
private :
@ -1817,7 +1873,7 @@ class GTEST_API_ ThreadLocal {
class DefaultValueHolderFactory : public ValueHolderFactory {
public :
DefaultValueHolderFactory ( ) { }
DefaultValueHolderFactory ( ) = default ;
ValueHolder * MakeNewHolder ( ) const override { return new ValueHolder ( ) ; }
private :
@ -1903,7 +1959,7 @@ class GTEST_API_ ThreadLocal {
// we cannot detect it.
GTEST_API_ size_t GetThreadCount ( ) ;
# if GTEST_OS_WINDOWS
# ifdef GTEST_OS_WINDOWS
# define GTEST_PATH_SEP_ "\\"
# define GTEST_HAS_ALT_PATH_SEP_ 1
# else
@ -1980,11 +2036,11 @@ namespace posix {
// File system porting.
# if GTEST_HAS_FILE_SYSTEM
# if GTEST_OS_WINDOWS
# ifdef GTEST_OS_WINDOWS
typedef struct _stat StatStruct ;
# if GTEST_OS_WINDOWS_MOBILE
# ifdef GTEST_OS_WINDOWS_MOBILE
inline int FileNo ( FILE * file ) { return reinterpret_cast < int > ( _fileno ( file ) ) ; }
// Stat(), RmDir(), and IsDir() are not needed on Windows CE at this
// time and thus not defined there.
@ -1995,7 +2051,7 @@ inline int RmDir(const char* dir) { return _rmdir(dir); }
inline bool IsDir ( const StatStruct & st ) { return ( _S_IFDIR & st . st_mode ) ! = 0 ; }
# endif // GTEST_OS_WINDOWS_MOBILE
# elif GTEST_OS_ESP8266
# elif defined( GTEST_OS_ESP8266)
typedef struct stat StatStruct ;
inline int FileNo ( FILE * file ) { return fileno ( file ) ; }
@ -2012,7 +2068,7 @@ typedef struct stat StatStruct;
inline int FileNo ( FILE * file ) { return fileno ( file ) ; }
inline int Stat ( const char * path , StatStruct * buf ) { return stat ( path , buf ) ; }
# if GTEST_OS_QURT
# ifdef GTEST_OS_QURT
// QuRT doesn't support any directory functions, including rmdir
inline int RmDir ( const char * ) { return 0 ; }
# else
@ -2025,17 +2081,17 @@ inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); }
// Other functions with a different name on Windows.
# if GTEST_OS_WINDOWS
# ifdef GTEST_OS_WINDOWS
# ifdef __BORLANDC__
inline int DoIsATTY ( int fd ) { return isatty ( fd ) ; }
inline int StrCaseCmp ( const char * s1 , const char * s2 ) {
return stricmp ( s1 , s2 ) ;
}
inline char * StrDup ( const char * src ) { return strdup ( src ) ; }
# else // !__BORLANDC__
# if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_ZOS || GTEST_OS_IOS || \
GTEST_OS_WINDOWS_PHONE | | GTEST_OS_WINDOWS_RT | | defined ( ESP_PLATFORM )
# if defined(GTEST_OS_WINDOWS_MOBILE) || defined(GTEST_OS_ZOS) || \
defined ( GTEST_OS_IOS ) | | defined ( GTEST_OS_WINDOWS_PHONE ) | | \
defined ( GTEST_OS_WINDOWS_RT ) | | defined ( ESP_PLATFORM )
inline int DoIsATTY ( int /* fd */ ) { return 0 ; }
# else
inline int DoIsATTY ( int fd ) { return _isatty ( fd ) ; }
@ -2043,24 +2099,14 @@ inline int DoIsATTY(int fd) { return _isatty(fd); }
inline int StrCaseCmp ( const char * s1 , const char * s2 ) {
return _stricmp ( s1 , s2 ) ;
}
inline char * StrDup ( const char * src ) { return _strdup ( src ) ; }
# endif // __BORLANDC__
# elif GTEST_OS_ESP8266
inline int DoIsATTY ( int fd ) { return isatty ( fd ) ; }
inline int StrCaseCmp ( const char * s1 , const char * s2 ) {
return strcasecmp ( s1 , s2 ) ;
}
inline char * StrDup ( const char * src ) { return strdup ( src ) ; }
# else
inline int DoIsATTY ( int fd ) { return isatty ( fd ) ; }
inline int StrCaseCmp ( const char * s1 , const char * s2 ) {
return strcasecmp ( s1 , s2 ) ;
}
inline char * StrDup ( const char * src ) { return strdup ( src ) ; }
# endif // GTEST_OS_WINDOWS
@ -2083,13 +2129,13 @@ GTEST_DISABLE_MSC_DEPRECATED_PUSH_()
// StrError() aren't needed on Windows CE at this time and thus not
// defined there.
# if GTEST_HAS_FILE_SYSTEM
# if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_WINDOWS_PHONE && \
! GTEST_OS_WINDOWS_RT & & ! GTEST_OS_ESP8266 & & ! GTEST_OS_XTENSA & & \
! GTEST_OS_QURT
# if !defined( GTEST_OS_WINDOWS_MOBILE) && !defined( GTEST_OS_WINDOWS_PHONE) && \
! defined ( GTEST_OS_WINDOWS_RT ) & & ! defined ( GTEST_OS_ESP8266 ) & & \
! defined ( GTEST_OS_XTENSA ) & & ! defined ( GTEST_OS_QURT )
inline int ChDir ( const char * dir ) { return chdir ( dir ) ; }
# endif
inline FILE * FOpen ( const char * path , const char * mode ) {
# if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MINGW
# if defined( GTEST_OS_WINDOWS) && !defined( GTEST_OS_WINDOWS_MINGW)
struct wchar_codecvt : public std : : codecvt < wchar_t , char , std : : mbstate_t > { } ;
std : : wstring_convert < wchar_codecvt > converter ;
std : : wstring wide_path = converter . from_bytes ( path ) ;
@ -2099,14 +2145,14 @@ inline FILE* FOpen(const char* path, const char* mode) {
return fopen ( path , mode ) ;
# endif // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MINGW
}
# if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_QURT
# if !defined( GTEST_OS_WINDOWS_MOBILE) && !defined( GTEST_OS_QURT)
inline FILE * FReopen ( const char * path , const char * mode , FILE * stream ) {
return freopen ( path , mode , stream ) ;
}
inline FILE * FDOpen ( int fd , const char * mode ) { return fdopen ( fd , mode ) ; }
# endif // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_QURT
inline int FClose ( FILE * fp ) { return fclose ( fp ) ; }
# if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_QURT
# if !defined( GTEST_OS_WINDOWS_MOBILE) && !defined( GTEST_OS_QURT)
inline int Read ( int fd , void * buf , unsigned int count ) {
return static_cast < int > ( read ( fd , buf , count ) ) ;
}
@ -2117,14 +2163,14 @@ inline int Close(int fd) { return close(fd); }
# endif // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_QURT
# endif // GTEST_HAS_FILE_SYSTEM
# if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_QURT
# if !defined( GTEST_OS_WINDOWS_MOBILE) && !defined( GTEST_OS_QURT)
inline const char * StrError ( int errnum ) { return strerror ( errnum ) ; }
# endif // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_QURT
inline const char * GetEnv ( const char * name ) {
# if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || \
GTEST_OS_WINDOWS_RT | | GTEST_OS_ESP8266 | | GTEST_OS_XTENSA | | \
GTEST_OS_QURT
# if defined( GTEST_OS_WINDOWS_MOBILE) || defined( GTEST_OS_WINDOWS_PHONE) || \
defined ( GTEST_OS_ESP8266 ) | | defined ( GTEST_OS_XTENSA ) | | \
defined ( GTEST_OS_QURT )
// We are on an embedded platform, which has no environment variables.
static_cast < void > ( name ) ; // To prevent 'unused argument' warning.
return nullptr ;
@ -2140,7 +2186,7 @@ inline const char* GetEnv(const char* name) {
GTEST_DISABLE_MSC_DEPRECATED_POP_ ( )
# if GTEST_OS_WINDOWS_MOBILE
# ifdef GTEST_OS_WINDOWS_MOBILE
// Windows CE has no C library. The abort() function is used in
// several places in Google Test. This implementation provides a reasonable
// imitation of standard behaviour.
@ -2156,7 +2202,7 @@ GTEST_DISABLE_MSC_DEPRECATED_POP_()
// MSVC-based platforms. We map the GTEST_SNPRINTF_ macro to the appropriate
// function in order to achieve that. We use macro definition here because
// snprintf is a variadic function.
# if defined(_MSC_VER) && !GTEST_OS_WINDOWS_MOBILE
# if defined(_MSC_VER) && !defined( GTEST_OS_WINDOWS_MOBILE)
// MSVC 2005 and above support variadic macros.
# define GTEST_SNPRINTF_(buffer, size, format, ...) \
_snprintf_s ( buffer , size , size , format , __VA_ARGS__ )
@ -2229,7 +2275,7 @@ using TimeInMillis = int64_t; // Represents time in milliseconds.
# endif // !defined(GTEST_FLAG)
// Pick a command line flags implementation.
# if GTEST_HAS_ABSL
# ifdef GTEST_HAS_ABSL
// Macros for defining flags.
# define GTEST_DEFINE_bool_(name, default_val, doc) \
@ -2340,7 +2386,7 @@ const char* StringFromGTestEnv(const char* flag, const char* default_val);
# endif // !defined(GTEST_INTERNAL_DEPRECATED)
# if GTEST_HAS_ABSL
# ifdef GTEST_HAS_ABSL
// Always use absl::any for UniversalPrinter<> specializations if googletest
// is built with absl support.
# define GTEST_INTERNAL_HAS_ANY 1
@ -2352,7 +2398,8 @@ using Any = ::absl::any;
} // namespace testing
# else
# ifdef __has_include
# if __has_include(<any>) && __cplusplus >= 201703L
# if __has_include(<any>) && GTEST_INTERNAL_CPLUSPLUS_LANG >= 201703L && \
( ! defined ( _MSC_VER ) | | GTEST_HAS_RTTI )
// Otherwise for C++17 and higher use std::any for UniversalPrinter<>
// specializations.
# define GTEST_INTERNAL_HAS_ANY 1
@ -2364,11 +2411,15 @@ using Any = ::std::any;
} // namespace testing
// The case where absl is configured NOT to alias std::any is not
// supported.
# endif // __has_include(<any>) && __cplusplus >= 201703L
# endif // __has_include(<any>) && GTEST_INTERNAL_CPLUSPLUS_LANG >= 201703L
# endif // __has_include
# endif // GTEST_HAS_ABSL
# if GTEST_HAS_ABSL
# ifndef GTEST_INTERNAL_HAS_ANY
# define GTEST_INTERNAL_HAS_ANY 0
# endif
# ifdef GTEST_HAS_ABSL
// Always use absl::optional for UniversalPrinter<> specializations if
// googletest is built with absl support.
# define GTEST_INTERNAL_HAS_OPTIONAL 1
@ -2382,7 +2433,7 @@ inline ::absl::nullopt_t Nullopt() { return ::absl::nullopt; }
} // namespace testing
# else
# ifdef __has_include
# if __has_include(<optional>) && __cplusplus >= 201703L
# if __has_include(<optional>) && GTEST_INTERNAL_CPLUSPLUS_LANG >= 201703L
// Otherwise for C++17 and higher use std::optional for UniversalPrinter<>
// specializations.
# define GTEST_INTERNAL_HAS_OPTIONAL 1
@ -2396,11 +2447,15 @@ inline ::std::nullopt_t Nullopt() { return ::std::nullopt; }
} // namespace testing
// The case where absl is configured NOT to alias std::optional is not
// supported.
# endif // __has_include(<optional>) && __cplusplus >= 201703L
# endif // __has_include(<optional>) && GTEST_INTERNAL_CPLUSPLUS_LANG >= 201703L
# endif // __has_include
# endif // GTEST_HAS_ABSL
# if GTEST_HAS_ABSL
# ifndef GTEST_INTERNAL_HAS_OPTIONAL
# define GTEST_INTERNAL_HAS_OPTIONAL 0
# endif
# ifdef GTEST_HAS_ABSL
// Always use absl::string_view for Matcher<> specializations if googletest
// is built with absl support.
# define GTEST_INTERNAL_HAS_STRING_VIEW 1
@ -2412,7 +2467,7 @@ using StringView = ::absl::string_view;
} // namespace testing
# else
# ifdef __has_include
# if __has_include(<string_view>) && __cplusplus >= 201703L
# if __has_include(<string_view>) && GTEST_INTERNAL_CPLUSPLUS_LANG >= 201703L
// Otherwise for C++17 and higher use std::string_view for Matcher<>
// specializations.
# define GTEST_INTERNAL_HAS_STRING_VIEW 1
@ -2424,11 +2479,16 @@ using StringView = ::std::string_view;
} // namespace testing
// The case where absl is configured NOT to alias std::string_view is not
// supported.
# endif // __has_include(<string_view>) && __cplusplus >= 201703L
# endif // __has_include(<string_view>) && GTEST_INTERNAL_CPLUSPLUS_LANG >=
// 201703L
# endif // __has_include
# endif // GTEST_HAS_ABSL
# if GTEST_HAS_ABSL
# ifndef GTEST_INTERNAL_HAS_STRING_VIEW
# define GTEST_INTERNAL_HAS_STRING_VIEW 0
# endif
# ifdef GTEST_HAS_ABSL
// Always use absl::variant for UniversalPrinter<> specializations if googletest
// is built with absl support.
# define GTEST_INTERNAL_HAS_VARIANT 1
@ -2441,7 +2501,7 @@ using Variant = ::absl::variant<T...>;
} // namespace testing
# else
# ifdef __has_include
# if __has_include(<variant>) && __cplusplus >= 201703L
# if __has_include(<variant>) && GTEST_INTERNAL_CPLUSPLUS_LANG >= 201703L
// Otherwise for C++17 and higher use std::variant for UniversalPrinter<>
// specializations.
# define GTEST_INTERNAL_HAS_VARIANT 1
@ -2453,8 +2513,17 @@ using Variant = ::std::variant<T...>;
} // namespace internal
} // namespace testing
// The case where absl is configured NOT to alias std::variant is not supported.
# endif // __has_include(<variant>) && __cplusplus >= 201703L
# endif // __has_include(<variant>) && GTEST_INTERNAL_CPLUSPLUS_LANG >= 201703L
# endif // __has_include
# endif // GTEST_HAS_ABSL
# ifndef GTEST_INTERNAL_HAS_VARIANT
# define GTEST_INTERNAL_HAS_VARIANT 0
# endif
# if defined(GTEST_INTERNAL_CPLUSPLUS_LANG) && \
GTEST_INTERNAL_CPLUSPLUS_LANG < 201703L
# define GTEST_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL 1
# endif
# endif // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_