From 69a40b7d4ab4171cbe4ef920e7a5171109e2064c Mon Sep 17 00:00:00 2001 From: vladlosev Date: Wed, 5 Oct 2011 05:51:10 +0000 Subject: Adds ability to inject death test child arguments for test purposes. --- src/gtest-death-test.cc | 7 ++++++- src/gtest-port.cc | 18 +++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/gtest-death-test.cc b/src/gtest-death-test.cc index 2f0b0e38..76aa1685 100644 --- a/src/gtest-death-test.cc +++ b/src/gtest-death-test.cc @@ -844,6 +844,11 @@ class ExecDeathTest : public ForkingDeathTest { ForkingDeathTest(a_statement, a_regex), file_(file), line_(line) { } virtual TestRole AssumeRole(); private: + static ::std::vector + GetArgvsForDeathTestChildProcess() { + ::std::vector args = GetInjectableArgvs(); + return args; + } // The name of the file in which the death test is located. const char* const file_; // The line number on which the death test is located. @@ -1082,7 +1087,7 @@ DeathTest::TestRole ExecDeathTest::AssumeRole() { GTEST_FLAG_PREFIX_, kInternalRunDeathTestFlag, file_, line_, death_test_index, pipe_fd[1]); Arguments args; - args.AddArguments(GetArgvs()); + args.AddArguments(GetArgvsForDeathTestChildProcess()); args.AddArgument(filter_flag.c_str()); args.AddArgument(internal_flag.c_str()); diff --git a/src/gtest-port.cc b/src/gtest-port.cc index 32069146..6e8dca29 100644 --- a/src/gtest-port.cc +++ b/src/gtest-port.cc @@ -653,11 +653,23 @@ String GetCapturedStderr() { return GetCapturedStream(&g_captured_stderr); } #if GTEST_HAS_DEATH_TEST // A copy of all command line arguments. Set by InitGoogleTest(). -::std::vector g_argvs; +::std::vector g_argvs; -// Returns the command line as a vector of strings. -const ::std::vector& GetArgvs() { return g_argvs; } +static const ::std::vector* g_injected_test_argvs = + NULL; // Owned. +void SetInjectableArgvs(const ::std::vector* argvs) { + if (g_injected_test_argvs != argvs) + delete g_injected_test_argvs; + g_injected_test_argvs = argvs; +} + +const ::std::vector& GetInjectableArgvs() { + if (g_injected_test_argvs != NULL) { + return *g_injected_test_argvs; + } + return g_argvs; +} #endif // GTEST_HAS_DEATH_TEST #if GTEST_OS_WINDOWS_MOBILE -- cgit v1.2.3