Inject GetArgvs() with a macro from custom/gtest-port.h.
This commit is contained in:
		@@ -100,9 +100,6 @@ class ScopedTrace;                     // Implements scoped trace.
 | 
			
		||||
class TestInfoImpl;                    // Opaque implementation of TestInfo
 | 
			
		||||
class UnitTestImpl;                    // Opaque implementation of UnitTest
 | 
			
		||||
 | 
			
		||||
// How many times InitGoogleTest() has been called.
 | 
			
		||||
GTEST_API_ extern int g_init_gtest_count;
 | 
			
		||||
 | 
			
		||||
// The text used in failure messages to indicate the start of the
 | 
			
		||||
// stack trace.
 | 
			
		||||
GTEST_API_ extern const char kStackTraceMarker[];
 | 
			
		||||
 
 | 
			
		||||
@@ -276,6 +276,7 @@
 | 
			
		||||
#include <sstream>  // NOLINT
 | 
			
		||||
#include <string>  // NOLINT
 | 
			
		||||
#include <utility>
 | 
			
		||||
#include <vector>  // NOLINT
 | 
			
		||||
 | 
			
		||||
#include "gtest/internal/gtest-port-arch.h"
 | 
			
		||||
#include "gtest/internal/custom/gtest-port.h"
 | 
			
		||||
@@ -785,7 +786,6 @@ using ::std::tuple_size;
 | 
			
		||||
     GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX || \
 | 
			
		||||
     GTEST_OS_OPENBSD || GTEST_OS_QNX || GTEST_OS_FREEBSD)
 | 
			
		||||
# define GTEST_HAS_DEATH_TEST 1
 | 
			
		||||
# include <vector>  // NOLINT
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// We don't support MSVC 7.1 with exceptions disabled now.  Therefore
 | 
			
		||||
@@ -1421,14 +1421,15 @@ GTEST_API_ size_t GetFileSize(FILE* file);
 | 
			
		||||
// Reads the entire content of a file as a string.
 | 
			
		||||
GTEST_API_ std::string ReadEntireFile(FILE* file);
 | 
			
		||||
 | 
			
		||||
// All command line arguments.
 | 
			
		||||
GTEST_API_ const ::std::vector<testing::internal::string>& GetArgvs();
 | 
			
		||||
 | 
			
		||||
#if GTEST_HAS_DEATH_TEST
 | 
			
		||||
 | 
			
		||||
const ::std::vector<testing::internal::string>& GetInjectableArgvs();
 | 
			
		||||
void SetInjectableArgvs(const ::std::vector<testing::internal::string>*
 | 
			
		||||
                             new_argvs);
 | 
			
		||||
 | 
			
		||||
// A copy of all command line arguments.  Set by ParseGTestFlags().
 | 
			
		||||
extern ::std::vector<testing::internal::string> g_argvs;
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_HAS_DEATH_TEST
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1084,9 +1084,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 +1097,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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								src/gtest.cc
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								src/gtest.cc
									
									
									
									
									
								
							@@ -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();
 | 
			
		||||
@@ -5328,24 +5330,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();
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user