Simplifies implementation by defining a POSIX portability layer; adds the death test style flag to --help.
This commit is contained in:
@@ -39,12 +39,6 @@
|
||||
|
||||
#include <gtest/internal/gtest-internal.h>
|
||||
|
||||
#if GTEST_HAS_DEATH_TEST && GTEST_OS_WINDOWS
|
||||
#include <io.h>
|
||||
#elif GTEST_HAS_DEATH_TEST
|
||||
#include <unistd.h>
|
||||
#endif // GTEST_HAS_DEATH_TEST && GTEST_OS_WINDOWS
|
||||
|
||||
namespace testing {
|
||||
namespace internal {
|
||||
|
||||
@@ -203,15 +197,7 @@ class InternalRunDeathTestFlag {
|
||||
|
||||
~InternalRunDeathTestFlag() {
|
||||
if (write_fd_ >= 0)
|
||||
// Suppress MSVC complaints about POSIX functions.
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable: 4996)
|
||||
#endif // _MSC_VER
|
||||
close(write_fd_);
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(pop)
|
||||
#endif // _MSC_VER
|
||||
posix::close(write_fd_);
|
||||
}
|
||||
|
||||
String file() const { return file_; }
|
||||
|
||||
@@ -149,7 +149,10 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <iostream> // Used for GTEST_CHECK_
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <iostream> // NOLINT
|
||||
|
||||
#define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com"
|
||||
#define GTEST_FLAG_PREFIX_ "gtest_"
|
||||
@@ -192,8 +195,21 @@
|
||||
// included <stdlib.h>, which is guaranteed to define size_t through
|
||||
// <stddef.h>.
|
||||
#include <regex.h> // NOLINT
|
||||
#include <strings.h> // NOLINT
|
||||
#include <sys/types.h> // NOLINT
|
||||
#include <unistd.h> // NOLINT
|
||||
|
||||
#define GTEST_USES_POSIX_RE 1
|
||||
|
||||
#elif GTEST_OS_WINDOWS
|
||||
|
||||
#include <direct.h> // NOLINT
|
||||
#include <io.h> // NOLINT
|
||||
|
||||
// <regex.h> is not available on Windows. Use our own simple regex
|
||||
// implementation instead.
|
||||
#define GTEST_USES_SIMPLE_RE 1
|
||||
|
||||
#else
|
||||
|
||||
// <regex.h> may not be available on this platform. Use our own
|
||||
@@ -381,7 +397,7 @@
|
||||
GTEST_OS_CYGWIN || \
|
||||
(GTEST_OS_WINDOWS && _MSC_VER >= 1400))
|
||||
#define GTEST_HAS_DEATH_TEST 1
|
||||
#include <vector>
|
||||
#include <vector> // NOLINT
|
||||
#endif
|
||||
|
||||
// Determines whether to support value-parameterized tests.
|
||||
@@ -701,18 +717,108 @@ struct is_pointer<T*> : public true_type {};
|
||||
|
||||
#if GTEST_OS_WINDOWS
|
||||
#define GTEST_PATH_SEP_ "\\"
|
||||
#else
|
||||
#define GTEST_PATH_SEP_ "/"
|
||||
#endif // GTEST_OS_WINDOWS
|
||||
|
||||
// Defines BiggestInt as the biggest signed integer type the compiler
|
||||
// supports.
|
||||
#if GTEST_OS_WINDOWS
|
||||
// The biggest signed integer type the compiler supports.
|
||||
typedef __int64 BiggestInt;
|
||||
#else
|
||||
#define GTEST_PATH_SEP_ "/"
|
||||
typedef long long BiggestInt; // NOLINT
|
||||
#endif // GTEST_OS_WINDOWS
|
||||
|
||||
// The testing::internal::posix namespace holds wrappers for common
|
||||
// POSIX functions. These wrappers hide the differences between
|
||||
// Windows/MSVC and POSIX systems.
|
||||
namespace posix {
|
||||
|
||||
// Functions with a different name on Windows.
|
||||
|
||||
#if GTEST_OS_WINDOWS
|
||||
|
||||
typedef struct _stat stat_struct;
|
||||
|
||||
inline int chdir(const char* dir) { return ::_chdir(dir); }
|
||||
inline int fileno(FILE* file) { return _fileno(file); }
|
||||
inline int isatty(int fd) { return ::_isatty(fd); }
|
||||
inline int stat(const char* path, stat_struct* buf) { return ::_stat(path, buf); }
|
||||
inline int strcasecmp(const char* s1, const char* s2) {
|
||||
return ::_stricmp(s1, s2);
|
||||
}
|
||||
inline const char* strdup(const char* src) { return ::_strdup(src); }
|
||||
inline int rmdir(const char* dir) { return ::_rmdir(dir); }
|
||||
inline bool IsDir(const stat_struct& st) {
|
||||
return (_S_IFDIR & st.st_mode) != 0;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
typedef struct stat stat_struct;
|
||||
|
||||
using ::chdir;
|
||||
using ::fileno;
|
||||
using ::isatty;
|
||||
using ::stat;
|
||||
using ::strcasecmp;
|
||||
using ::strdup;
|
||||
using ::rmdir;
|
||||
inline bool IsDir(const stat_struct& st) { return S_ISDIR(st.st_mode); }
|
||||
|
||||
#endif // GTEST_OS_WINDOWS
|
||||
|
||||
// Functions deprecated by MSVC 8.0.
|
||||
|
||||
#ifdef _MSC_VER
|
||||
// Temporarily disable warning 4996 (deprecated function).
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4996)
|
||||
#endif
|
||||
|
||||
inline const char* strncpy(char* dest, const char* src, size_t n) {
|
||||
return ::strncpy(dest, src, n);
|
||||
}
|
||||
|
||||
inline FILE* fopen(const char* path, const char* mode) {
|
||||
return ::fopen(path, mode);
|
||||
}
|
||||
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);
|
||||
}
|
||||
inline int fclose(FILE *fp) { return ::fclose(fp); }
|
||||
|
||||
inline int read(int fd, void* buf, size_t count) {
|
||||
return static_cast<int>(::read(fd, buf, count));
|
||||
}
|
||||
inline int write(int fd, const void* buf, size_t count) {
|
||||
return static_cast<int>(::write(fd, buf, count));
|
||||
}
|
||||
inline int close(int fd) { return ::close(fd); }
|
||||
|
||||
inline const char* strerror(int errnum) { return ::strerror(errnum); }
|
||||
|
||||
inline const char* getenv(const char* name) {
|
||||
#ifdef _WIN32_WCE // We are on Windows CE, which has no environment variables.
|
||||
return NULL;
|
||||
#else
|
||||
return ::getenv(name);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(pop) // Restores the warning state.
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
// 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.
|
||||
void abort();
|
||||
#else
|
||||
using ::abort;
|
||||
#endif // _WIN32_WCE
|
||||
|
||||
} // namespace posix
|
||||
|
||||
// The maximum number a BiggestInt can represent. This definition
|
||||
// works no matter BiggestInt is represented in one's complement or
|
||||
// two's complement.
|
||||
@@ -783,32 +889,6 @@ typedef TypeWithSize<8>::Int TimeInMillis; // Represents time in milliseconds.
|
||||
|
||||
// Utilities for command line flags and environment variables.
|
||||
|
||||
// A wrapper for getenv() that works on Linux, Windows, and Mac OS.
|
||||
inline const char* GetEnv(const char* name) {
|
||||
#ifdef _WIN32_WCE // We are on Windows CE.
|
||||
// CE has no environment variables.
|
||||
return NULL;
|
||||
#elif GTEST_OS_WINDOWS // We are on Windows proper.
|
||||
// MSVC 8 deprecates getenv(), so we want to suppress warning 4996
|
||||
// (deprecated function) there.
|
||||
#pragma warning(push) // Saves the current warning state.
|
||||
#pragma warning(disable:4996) // Temporarily disables warning 4996.
|
||||
return getenv(name);
|
||||
#pragma warning(pop) // Restores the warning state.
|
||||
#else // We are on Linux or Mac OS.
|
||||
return getenv(name);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
// 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.
|
||||
void abort();
|
||||
#else
|
||||
inline void abort() { ::abort(); }
|
||||
#endif // _WIN32_WCE
|
||||
|
||||
// INTERNAL IMPLEMENTATION - DO NOT USE.
|
||||
//
|
||||
// GTEST_CHECK_ is an all-mode assert. It aborts the program if the condition
|
||||
|
||||
Reference in New Issue
Block a user