Adds ability to inject death test child arguments for test purposes.
This commit is contained in:
		@@ -177,7 +177,7 @@
 | 
			
		||||
//   GTEST_FLAG()       - references a flag.
 | 
			
		||||
//   GTEST_DECLARE_*()  - declares a flag.
 | 
			
		||||
//   GTEST_DEFINE_*()   - defines a flag.
 | 
			
		||||
//   GetArgvs()         - returns the command line as a vector of strings.
 | 
			
		||||
//   GetInjectableArgvs() - returns the command line as a vector of strings.
 | 
			
		||||
//
 | 
			
		||||
// Environment variable utilities:
 | 
			
		||||
//   GetEnv()             - gets the value of an environment variable.
 | 
			
		||||
@@ -1069,11 +1069,12 @@ GTEST_API_ String GetCapturedStderr();
 | 
			
		||||
 | 
			
		||||
#if GTEST_HAS_DEATH_TEST
 | 
			
		||||
 | 
			
		||||
// A copy of all command line arguments.  Set by InitGoogleTest().
 | 
			
		||||
extern ::std::vector<String> g_argvs;
 | 
			
		||||
const ::std::vector<testing::internal::string>& GetInjectableArgvs();
 | 
			
		||||
void SetInjectableArgvs(const ::std::vector<testing::internal::string>*
 | 
			
		||||
                             new_argvs);
 | 
			
		||||
 | 
			
		||||
// GTEST_HAS_DEATH_TEST implies we have ::std::string.
 | 
			
		||||
const ::std::vector<String>& GetArgvs();
 | 
			
		||||
// A copy of all command line arguments.  Set by InitGoogleTest().
 | 
			
		||||
extern ::std::vector<testing::internal::string> g_argvs;
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_HAS_DEATH_TEST
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -844,6 +844,11 @@ class ExecDeathTest : public ForkingDeathTest {
 | 
			
		||||
      ForkingDeathTest(a_statement, a_regex), file_(file), line_(line) { }
 | 
			
		||||
  virtual TestRole AssumeRole();
 | 
			
		||||
 private:
 | 
			
		||||
  static ::std::vector<testing::internal::string>
 | 
			
		||||
  GetArgvsForDeathTestChildProcess() {
 | 
			
		||||
    ::std::vector<testing::internal::string> 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());
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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<String> g_argvs;
 | 
			
		||||
::std::vector<testing::internal::string> g_argvs;
 | 
			
		||||
 | 
			
		||||
// Returns the command line as a vector of strings.
 | 
			
		||||
const ::std::vector<String>& GetArgvs() { return g_argvs; }
 | 
			
		||||
static const ::std::vector<testing::internal::string>* g_injected_test_argvs =
 | 
			
		||||
                                        NULL;  // Owned.
 | 
			
		||||
 | 
			
		||||
void SetInjectableArgvs(const ::std::vector<testing::internal::string>* argvs) {
 | 
			
		||||
  if (g_injected_test_argvs != argvs)
 | 
			
		||||
    delete g_injected_test_argvs;
 | 
			
		||||
  g_injected_test_argvs = argvs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const ::std::vector<testing::internal::string>& 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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user