gtest: Update to latest version from git
This commit is contained in:
1 parent
ec9b49436c
commit
e5f576f862
14 files changed
+1090
-335
No files matched your search
+8
@@ -33,6 +33,7 @@
|
||||
|
||||
#include "gtest/gtest-death-test.h"
|
||||
#include "gtest/internal/gtest-port.h"
|
||||
#include "gtest/internal/custom/gtest.h"
|
||||
|
||||
#if GTEST_HAS_DEATH_TEST
|
||||
|
||||
@@ -120,7 +121,9 @@ namespace internal {
|
||||
|
||||
// Valid only for fast death tests. Indicates the code is running in the
|
||||
// child process of a fast style death test.
|
||||
# if !GTEST_OS_WINDOWS
|
||||
static bool g_in_fast_death_test_child = false;
|
||||
# endif
|
||||
|
||||
// Returns a Boolean value indicating whether the caller is currently
|
||||
// executing in the context of the death test child process. Tools such as
|
||||
@@ -883,6 +886,11 @@ class ExecDeathTest : public ForkingDeathTest {
|
||||
static ::std::vector<testing::internal::string>
|
||||
GetArgvsForDeathTestChildProcess() {
|
||||
::std::vector<testing::internal::string> args = GetInjectableArgvs();
|
||||
# if defined(GTEST_EXTRA_DEATH_TEST_COMMAND_LINE_ARGS_)
|
||||
::std::vector<testing::internal::string> extra_args =
|
||||
GTEST_EXTRA_DEATH_TEST_COMMAND_LINE_ARGS_();
|
||||
args.insert(args.end(), extra_args.begin(), extra_args.end());
|
||||
# endif // defined(GTEST_EXTRA_DEATH_TEST_COMMAND_LINE_ARGS_)
|
||||
return args;
|
||||
}
|
||||
// The name of the file in which the death test is located.
|
||||
|
||||
+1
-1
@@ -1032,7 +1032,7 @@ class TestResultAccessor {
|
||||
#if GTEST_CAN_STREAM_RESULTS_
|
||||
|
||||
// Streams test results to the given port on the given host machine.
|
||||
class StreamingListener : public EmptyTestEventListener {
|
||||
class GTEST_API_ StreamingListener : public EmptyTestEventListener {
|
||||
public:
|
||||
// Abstract base class for writing strings to a socket.
|
||||
class AbstractSocketWriter {
|
||||
|
||||
Vendored
+53
-9
@@ -58,6 +58,11 @@
|
||||
# include <sys/procfs.h>
|
||||
#endif // GTEST_OS_QNX
|
||||
|
||||
#if GTEST_OS_AIX
|
||||
# include <procinfo.h>
|
||||
# include <sys/types.h>
|
||||
#endif // GTEST_OS_AIX
|
||||
|
||||
#include "gtest/gtest-spi.h"
|
||||
#include "gtest/gtest-message.h"
|
||||
#include "gtest/internal/gtest-internal.h"
|
||||
@@ -146,6 +151,19 @@ size_t GetThreadCount() {
|
||||
}
|
||||
}
|
||||
|
||||
#elif GTEST_OS_AIX
|
||||
|
||||
size_t GetThreadCount() {
|
||||
struct procentry64 entry;
|
||||
pid_t pid = getpid();
|
||||
int status = getprocs64(&entry, sizeof(entry), NULL, 0, &pid, 1);
|
||||
if (status == 1) {
|
||||
return entry.pi_thcount;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
size_t GetThreadCount() {
|
||||
@@ -218,8 +236,8 @@ void Notification::WaitForNotification() {
|
||||
}
|
||||
|
||||
Mutex::Mutex()
|
||||
: type_(kDynamic),
|
||||
owner_thread_id_(0),
|
||||
: owner_thread_id_(0),
|
||||
type_(kDynamic),
|
||||
critical_section_init_phase_(0),
|
||||
critical_section_(new CRITICAL_SECTION) {
|
||||
::InitializeCriticalSection(critical_section_);
|
||||
@@ -1084,9 +1102,6 @@ std::string ReadEntireFile(FILE* file) {
|
||||
|
||||
#if GTEST_HAS_DEATH_TEST
|
||||
|
||||
// A copy of all command line arguments. Set by InitGoogleTest().
|
||||
::std::vector<testing::internal::string> g_argvs;
|
||||
|
||||
static const ::std::vector<testing::internal::string>* g_injected_test_argvs =
|
||||
NULL; // Owned.
|
||||
|
||||
@@ -1100,7 +1115,7 @@ const ::std::vector<testing::internal::string>& GetInjectableArgvs() {
|
||||
if (g_injected_test_argvs != NULL) {
|
||||
return *g_injected_test_argvs;
|
||||
}
|
||||
return g_argvs;
|
||||
return GetArgvs();
|
||||
}
|
||||
#endif // GTEST_HAS_DEATH_TEST
|
||||
|
||||
@@ -1174,6 +1189,9 @@ bool ParseInt32(const Message& src_text, const char* str, Int32* value) {
|
||||
//
|
||||
// The value is considered true iff it's not "0".
|
||||
bool BoolFromGTestEnv(const char* flag, bool default_value) {
|
||||
#if defined(GTEST_GET_BOOL_FROM_ENV_)
|
||||
return GTEST_GET_BOOL_FROM_ENV_(flag, default_value);
|
||||
#endif // defined(GTEST_GET_BOOL_FROM_ENV_)
|
||||
const std::string env_var = FlagToEnvVar(flag);
|
||||
const char* const string_value = posix::GetEnv(env_var.c_str());
|
||||
return string_value == NULL ?
|
||||
@@ -1184,6 +1202,9 @@ bool BoolFromGTestEnv(const char* flag, bool default_value) {
|
||||
// variable corresponding to the given flag; if it isn't set or
|
||||
// doesn't represent a valid 32-bit integer, returns default_value.
|
||||
Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) {
|
||||
#if defined(GTEST_GET_INT32_FROM_ENV_)
|
||||
return GTEST_GET_INT32_FROM_ENV_(flag, default_value);
|
||||
#endif // defined(GTEST_GET_INT32_FROM_ENV_)
|
||||
const std::string env_var = FlagToEnvVar(flag);
|
||||
const char* const string_value = posix::GetEnv(env_var.c_str());
|
||||
if (string_value == NULL) {
|
||||
@@ -1205,10 +1226,33 @@ Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) {
|
||||
|
||||
// Reads and returns the string environment variable corresponding to
|
||||
// the given flag; if it's not set, returns default_value.
|
||||
const char* StringFromGTestEnv(const char* flag, const char* default_value) {
|
||||
std::string StringFromGTestEnv(const char* flag, const char* default_value) {
|
||||
#if defined(GTEST_GET_STRING_FROM_ENV_)
|
||||
return GTEST_GET_STRING_FROM_ENV_(flag, default_value);
|
||||
#endif // defined(GTEST_GET_STRING_FROM_ENV_)
|
||||
const std::string env_var = FlagToEnvVar(flag);
|
||||
const char* const value = posix::GetEnv(env_var.c_str());
|
||||
return value == NULL ? default_value : value;
|
||||
const char* value = posix::GetEnv(env_var.c_str());
|
||||
if (value != NULL) {
|
||||
return value;
|
||||
}
|
||||
|
||||
// As a special case for the 'output' flag, if GTEST_OUTPUT is not
|
||||
// set, we look for XML_OUTPUT_FILE, which is set by the Bazel build
|
||||
// system. The value of XML_OUTPUT_FILE is a filename without the
|
||||
// "xml:" prefix of GTEST_OUTPUT.
|
||||
//
|
||||
// The net priority order after flag processing is thus:
|
||||
// --gtest_output command line flag
|
||||
// GTEST_OUTPUT environment variable
|
||||
// XML_OUTPUT_FILE environment variable
|
||||
// 'default_value'
|
||||
if (strcmp(flag, "output") == 0) {
|
||||
value = posix::GetEnv("XML_OUTPUT_FILE");
|
||||
if (value != NULL) {
|
||||
return std::string("xml:") + value;
|
||||
}
|
||||
}
|
||||
return default_value;
|
||||
}
|
||||
|
||||
} // namespace internal
|
||||
|
||||
Vendored
+94
-80
@@ -327,13 +327,7 @@ UInt32 Random::Generate(UInt32 range) {
|
||||
// GTestIsInitialized() returns true iff the user has initialized
|
||||
// Google Test. Useful for catching the user mistake of not initializing
|
||||
// Google Test before calling RUN_ALL_TESTS().
|
||||
//
|
||||
// A user must call testing::InitGoogleTest() to initialize Google
|
||||
// Test. g_init_gtest_count is set to the number of times
|
||||
// InitGoogleTest() has been called. We don't protect this variable
|
||||
// under a mutex as it is only accessed in the main thread.
|
||||
GTEST_API_ int g_init_gtest_count = 0;
|
||||
static bool GTestIsInitialized() { return g_init_gtest_count != 0; }
|
||||
static bool GTestIsInitialized() { return GetArgvs().size() > 0; }
|
||||
|
||||
// Iterates over a vector of TestCases, keeping a running sum of the
|
||||
// results of calling a given int-returning method on each.
|
||||
@@ -389,8 +383,16 @@ void AssertHelper::operator=(const Message& message) const {
|
||||
// Mutex for linked pointers.
|
||||
GTEST_API_ GTEST_DEFINE_STATIC_MUTEX_(g_linked_ptr_mutex);
|
||||
|
||||
// Application pathname gotten in InitGoogleTest.
|
||||
std::string g_executable_path;
|
||||
// A copy of all command line arguments. Set by InitGoogleTest().
|
||||
::std::vector<testing::internal::string> g_argvs;
|
||||
|
||||
const ::std::vector<testing::internal::string>& GetArgvs() {
|
||||
#if defined(GTEST_CUSTOM_GET_ARGVS_)
|
||||
return GTEST_CUSTOM_GET_ARGVS_();
|
||||
#else // defined(GTEST_CUSTOM_GET_ARGVS_)
|
||||
return g_argvs;
|
||||
#endif // defined(GTEST_CUSTOM_GET_ARGVS_)
|
||||
}
|
||||
|
||||
// Returns the current application's name, removing directory path if that
|
||||
// is present.
|
||||
@@ -398,9 +400,9 @@ FilePath GetCurrentExecutableName() {
|
||||
FilePath result;
|
||||
|
||||
#if GTEST_OS_WINDOWS
|
||||
result.Set(FilePath(g_executable_path).RemoveExtension("exe"));
|
||||
result.Set(FilePath(GetArgvs()[0]).RemoveExtension("exe"));
|
||||
#else
|
||||
result.Set(FilePath(g_executable_path));
|
||||
result.Set(FilePath(GetArgvs()[0]));
|
||||
#endif // GTEST_OS_WINDOWS
|
||||
|
||||
return result.RemoveDirectoryName();
|
||||
@@ -1299,41 +1301,41 @@ std::vector<std::string> SplitEscapedString(const std::string& str) {
|
||||
// and their values, as strings. For example, for ASSERT_EQ(foo, bar)
|
||||
// where foo is 5 and bar is 6, we have:
|
||||
//
|
||||
// expected_expression: "foo"
|
||||
// actual_expression: "bar"
|
||||
// expected_value: "5"
|
||||
// actual_value: "6"
|
||||
// lhs_expression: "foo"
|
||||
// rhs_expression: "bar"
|
||||
// lhs_value: "5"
|
||||
// rhs_value: "6"
|
||||
//
|
||||
// The ignoring_case parameter is true iff the assertion is a
|
||||
// *_STRCASEEQ*. When it's true, the string " (ignoring case)" will
|
||||
// *_STRCASEEQ*. When it's true, the string "Ignoring case" will
|
||||
// be inserted into the message.
|
||||
AssertionResult EqFailure(const char* expected_expression,
|
||||
const char* actual_expression,
|
||||
const std::string& expected_value,
|
||||
const std::string& actual_value,
|
||||
AssertionResult EqFailure(const char* lhs_expression,
|
||||
const char* rhs_expression,
|
||||
const std::string& lhs_value,
|
||||
const std::string& rhs_value,
|
||||
bool ignoring_case) {
|
||||
Message msg;
|
||||
msg << "Value of: " << actual_expression;
|
||||
if (actual_value != actual_expression) {
|
||||
msg << "\n Actual: " << actual_value;
|
||||
msg << " Expected: " << lhs_expression;
|
||||
if (lhs_value != lhs_expression) {
|
||||
msg << "\n Which is: " << lhs_value;
|
||||
}
|
||||
msg << "\nTo be equal to: " << rhs_expression;
|
||||
if (rhs_value != rhs_expression) {
|
||||
msg << "\n Which is: " << rhs_value;
|
||||
}
|
||||
|
||||
msg << "\nExpected: " << expected_expression;
|
||||
if (ignoring_case) {
|
||||
msg << " (ignoring case)";
|
||||
}
|
||||
if (expected_value != expected_expression) {
|
||||
msg << "\nWhich is: " << expected_value;
|
||||
msg << "\nIgnoring case";
|
||||
}
|
||||
|
||||
if (!expected_value.empty() && !actual_value.empty()) {
|
||||
const std::vector<std::string> expected_lines =
|
||||
SplitEscapedString(expected_value);
|
||||
const std::vector<std::string> actual_lines =
|
||||
SplitEscapedString(actual_value);
|
||||
if (expected_lines.size() > 1 || actual_lines.size() > 1) {
|
||||
if (!lhs_value.empty() && !rhs_value.empty()) {
|
||||
const std::vector<std::string> lhs_lines =
|
||||
SplitEscapedString(lhs_value);
|
||||
const std::vector<std::string> rhs_lines =
|
||||
SplitEscapedString(rhs_value);
|
||||
if (lhs_lines.size() > 1 || rhs_lines.size() > 1) {
|
||||
msg << "\nWith diff:\n"
|
||||
<< edit_distance::CreateUnifiedDiff(expected_lines, actual_lines);
|
||||
<< edit_distance::CreateUnifiedDiff(lhs_lines, rhs_lines);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1432,18 +1434,18 @@ namespace internal {
|
||||
|
||||
// The helper function for {ASSERT|EXPECT}_EQ with int or enum
|
||||
// arguments.
|
||||
AssertionResult CmpHelperEQ(const char* expected_expression,
|
||||
const char* actual_expression,
|
||||
BiggestInt expected,
|
||||
BiggestInt actual) {
|
||||
if (expected == actual) {
|
||||
AssertionResult CmpHelperEQ(const char* lhs_expression,
|
||||
const char* rhs_expression,
|
||||
BiggestInt lhs,
|
||||
BiggestInt rhs) {
|
||||
if (lhs == rhs) {
|
||||
return AssertionSuccess();
|
||||
}
|
||||
|
||||
return EqFailure(expected_expression,
|
||||
actual_expression,
|
||||
FormatForComparisonFailureMessage(expected, actual),
|
||||
FormatForComparisonFailureMessage(actual, expected),
|
||||
return EqFailure(lhs_expression,
|
||||
rhs_expression,
|
||||
FormatForComparisonFailureMessage(lhs, rhs),
|
||||
FormatForComparisonFailureMessage(rhs, lhs),
|
||||
false);
|
||||
}
|
||||
|
||||
@@ -1482,34 +1484,34 @@ GTEST_IMPL_CMP_HELPER_(GT, > )
|
||||
#undef GTEST_IMPL_CMP_HELPER_
|
||||
|
||||
// The helper function for {ASSERT|EXPECT}_STREQ.
|
||||
AssertionResult CmpHelperSTREQ(const char* expected_expression,
|
||||
const char* actual_expression,
|
||||
const char* expected,
|
||||
const char* actual) {
|
||||
if (String::CStringEquals(expected, actual)) {
|
||||
AssertionResult CmpHelperSTREQ(const char* lhs_expression,
|
||||
const char* rhs_expression,
|
||||
const char* lhs,
|
||||
const char* rhs) {
|
||||
if (String::CStringEquals(lhs, rhs)) {
|
||||
return AssertionSuccess();
|
||||
}
|
||||
|
||||
return EqFailure(expected_expression,
|
||||
actual_expression,
|
||||
PrintToString(expected),
|
||||
PrintToString(actual),
|
||||
return EqFailure(lhs_expression,
|
||||
rhs_expression,
|
||||
PrintToString(lhs),
|
||||
PrintToString(rhs),
|
||||
false);
|
||||
}
|
||||
|
||||
// The helper function for {ASSERT|EXPECT}_STRCASEEQ.
|
||||
AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression,
|
||||
const char* actual_expression,
|
||||
const char* expected,
|
||||
const char* actual) {
|
||||
if (String::CaseInsensitiveCStringEquals(expected, actual)) {
|
||||
AssertionResult CmpHelperSTRCASEEQ(const char* lhs_expression,
|
||||
const char* rhs_expression,
|
||||
const char* lhs,
|
||||
const char* rhs) {
|
||||
if (String::CaseInsensitiveCStringEquals(lhs, rhs)) {
|
||||
return AssertionSuccess();
|
||||
}
|
||||
|
||||
return EqFailure(expected_expression,
|
||||
actual_expression,
|
||||
PrintToString(expected),
|
||||
PrintToString(actual),
|
||||
return EqFailure(lhs_expression,
|
||||
rhs_expression,
|
||||
PrintToString(lhs),
|
||||
PrintToString(rhs),
|
||||
true);
|
||||
}
|
||||
|
||||
@@ -1864,18 +1866,18 @@ bool String::WideCStringEquals(const wchar_t * lhs, const wchar_t * rhs) {
|
||||
}
|
||||
|
||||
// Helper function for *_STREQ on wide strings.
|
||||
AssertionResult CmpHelperSTREQ(const char* expected_expression,
|
||||
const char* actual_expression,
|
||||
const wchar_t* expected,
|
||||
const wchar_t* actual) {
|
||||
if (String::WideCStringEquals(expected, actual)) {
|
||||
AssertionResult CmpHelperSTREQ(const char* lhs_expression,
|
||||
const char* rhs_expression,
|
||||
const wchar_t* lhs,
|
||||
const wchar_t* rhs) {
|
||||
if (String::WideCStringEquals(lhs, rhs)) {
|
||||
return AssertionSuccess();
|
||||
}
|
||||
|
||||
return EqFailure(expected_expression,
|
||||
actual_expression,
|
||||
PrintToString(expected),
|
||||
PrintToString(actual),
|
||||
return EqFailure(lhs_expression,
|
||||
rhs_expression,
|
||||
PrintToString(lhs),
|
||||
PrintToString(rhs),
|
||||
false);
|
||||
}
|
||||
|
||||
@@ -2928,6 +2930,8 @@ bool ShouldUseColor(bool stdout_is_tty) {
|
||||
String::CStringEquals(term, "xterm-256color") ||
|
||||
String::CStringEquals(term, "screen") ||
|
||||
String::CStringEquals(term, "screen-256color") ||
|
||||
String::CStringEquals(term, "tmux") ||
|
||||
String::CStringEquals(term, "tmux-256color") ||
|
||||
String::CStringEquals(term, "rxvt-unicode") ||
|
||||
String::CStringEquals(term, "rxvt-unicode-256color") ||
|
||||
String::CStringEquals(term, "linux") ||
|
||||
@@ -4434,6 +4438,11 @@ void UnitTestImpl::PostFlagParsingInit() {
|
||||
if (!post_flag_parse_init_performed_) {
|
||||
post_flag_parse_init_performed_ = true;
|
||||
|
||||
#if defined(GTEST_CUSTOM_TEST_EVENT_LISTENER_)
|
||||
// Register to send notifications about key process state changes.
|
||||
listeners()->Append(new GTEST_CUSTOM_TEST_EVENT_LISTENER_());
|
||||
#endif // defined(GTEST_CUSTOM_TEST_EVENT_LISTENER_)
|
||||
|
||||
#if GTEST_HAS_DEATH_TEST
|
||||
InitDeathTestSubprocessControlInfo();
|
||||
SuppressTestEventsIfInSubprocess();
|
||||
@@ -4567,6 +4576,11 @@ bool UnitTestImpl::RunAllTests() {
|
||||
|
||||
#if GTEST_HAS_DEATH_TEST
|
||||
in_subprocess_for_death_test = (internal_run_death_test_flag_.get() != NULL);
|
||||
# if defined(GTEST_EXTRA_DEATH_TEST_CHILD_SETUP_)
|
||||
if (in_subprocess_for_death_test) {
|
||||
GTEST_EXTRA_DEATH_TEST_CHILD_SETUP_();
|
||||
}
|
||||
# endif // defined(GTEST_EXTRA_DEATH_TEST_CHILD_SETUP_)
|
||||
#endif // GTEST_HAS_DEATH_TEST
|
||||
|
||||
const bool should_shard = ShouldShard(kTestTotalShards, kTestShardIndex,
|
||||
@@ -5328,24 +5342,16 @@ void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv) {
|
||||
// wchar_t.
|
||||
template <typename CharType>
|
||||
void InitGoogleTestImpl(int* argc, CharType** argv) {
|
||||
g_init_gtest_count++;
|
||||
|
||||
// We don't want to run the initialization code twice.
|
||||
if (g_init_gtest_count != 1) return;
|
||||
if (GTestIsInitialized()) return;
|
||||
|
||||
if (*argc <= 0) return;
|
||||
|
||||
internal::g_executable_path = internal::StreamableToString(argv[0]);
|
||||
|
||||
#if GTEST_HAS_DEATH_TEST
|
||||
|
||||
g_argvs.clear();
|
||||
for (int i = 0; i != *argc; i++) {
|
||||
g_argvs.push_back(StreamableToString(argv[i]));
|
||||
}
|
||||
|
||||
#endif // GTEST_HAS_DEATH_TEST
|
||||
|
||||
ParseGoogleTestFlagsOnly(argc, argv);
|
||||
GetUnitTestImpl()->PostFlagParsingInit();
|
||||
}
|
||||
@@ -5362,13 +5368,21 @@ void InitGoogleTestImpl(int* argc, CharType** argv) {
|
||||
//
|
||||
// Calling the function for the second time has no user-visible effect.
|
||||
void InitGoogleTest(int* argc, char** argv) {
|
||||
#if defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)
|
||||
GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_(argc, argv);
|
||||
#else // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)
|
||||
internal::InitGoogleTestImpl(argc, argv);
|
||||
#endif // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)
|
||||
}
|
||||
|
||||
// This overloaded version can be used in Windows programs compiled in
|
||||
// UNICODE mode.
|
||||
void InitGoogleTest(int* argc, wchar_t** argv) {
|
||||
#if defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)
|
||||
GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_(argc, argv);
|
||||
#else // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)
|
||||
internal::InitGoogleTestImpl(argc, argv);
|
||||
#endif // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)
|
||||
}
|
||||
|
||||
} // namespace testing
|
||||
Reference in new issue
Block a user