Fixes the test gmock_output_test.py with MSVC
For MSVC, gmock_output_test.py output struct std::pair<int,bool>, for GCC, it's output std::pair<int, bool>, it's not the same, my intention is getting these to be same by removing struct for MSVC's outptu, and strip redundant space for GCC. As a by-product, ``` #ifdef _MSC_VER #define ERROR_DESC "class std::runtime_error" #else #define ERROR_DESC "std::runtime_error" #endif ``` can be simplified to ``` #define ERROR_DESC "std::runtime_error" ``` Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
This commit is contained in:
		@@ -292,7 +292,7 @@ Stack trace:
 | 
				
			|||||||
FILE:#: Failure
 | 
					FILE:#: Failure
 | 
				
			||||||
Value of: (std::pair<int, bool>(42, true))
 | 
					Value of: (std::pair<int, bool>(42, true))
 | 
				
			||||||
Expected: is pair (first: is >= 48, second: true)
 | 
					Expected: is pair (first: is >= 48, second: true)
 | 
				
			||||||
  Actual: (42, true) (of type std::pair<int, bool>)
 | 
					  Actual: (42, true) (of type std::pair<int,bool>)
 | 
				
			||||||
[  FAILED  ] GMockOutputTest.PrintsMatcher
 | 
					[  FAILED  ] GMockOutputTest.PrintsMatcher
 | 
				
			||||||
[  FAILED  ] GMockOutputTest.UnexpectedCall
 | 
					[  FAILED  ] GMockOutputTest.UnexpectedCall
 | 
				
			||||||
[  FAILED  ] GMockOutputTest.UnexpectedCallToVoidFunction
 | 
					[  FAILED  ] GMockOutputTest.UnexpectedCallToVoidFunction
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,6 +67,22 @@ inline std::string CanonicalizeForStdLibVersioning(std::string s) {
 | 
				
			|||||||
      s.erase(strlen("std"), end - strlen("std"));
 | 
					      s.erase(strlen("std"), end - strlen("std"));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* Strip redundant spaces in typename to match MSVC */
 | 
				
			||||||
 | 
					  /* For example, std::pair<int, bool> -> std::pair<int,bool> */
 | 
				
			||||||
 | 
					  static const char to_search[] = ", ";
 | 
				
			||||||
 | 
					  static const char replace_str[] = ",";
 | 
				
			||||||
 | 
					  size_t pos = 0;
 | 
				
			||||||
 | 
					  while (true) {
 | 
				
			||||||
 | 
					    // Get the next occurrence from the current position
 | 
				
			||||||
 | 
					    pos = s.find(to_search, pos);
 | 
				
			||||||
 | 
					    if (pos == std::string::npos) {
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // Replace this occurrence of substring
 | 
				
			||||||
 | 
					    s.replace(pos, strlen(to_search), replace_str);
 | 
				
			||||||
 | 
					    pos += strlen(replace_str);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  return s;
 | 
					  return s;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -85,6 +101,20 @@ inline std::string GetTypeName(const std::type_info& type) {
 | 
				
			|||||||
  const std::string name_str(status == 0 ? readable_name : name);
 | 
					  const std::string name_str(status == 0 ? readable_name : name);
 | 
				
			||||||
  free(readable_name);
 | 
					  free(readable_name);
 | 
				
			||||||
  return CanonicalizeForStdLibVersioning(name_str);
 | 
					  return CanonicalizeForStdLibVersioning(name_str);
 | 
				
			||||||
 | 
					#elif defined(_MSC_VER)
 | 
				
			||||||
 | 
					  // Strip struct and class due to differences between
 | 
				
			||||||
 | 
					  // MSVC and other compilers. std::pair<int,bool> is printed as
 | 
				
			||||||
 | 
					  // "struct std::pair<int,bool>" when using MSVC vs "std::pair<int, bool>" with
 | 
				
			||||||
 | 
					  // other compilers.
 | 
				
			||||||
 | 
					  std::string s = name;
 | 
				
			||||||
 | 
					  // Only strip the leading "struct " and "class ", so uses rfind == 0 to 
 | 
				
			||||||
 | 
					  // ensure that
 | 
				
			||||||
 | 
					  if (s.rfind("struct ", 0) == 0) {
 | 
				
			||||||
 | 
					    s = s.substr(strlen("struct "));
 | 
				
			||||||
 | 
					  } else if (s.rfind("class ", 0) == 0) {
 | 
				
			||||||
 | 
					    s = s.substr(strlen("class "));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return s;
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
  return name;
 | 
					  return name;
 | 
				
			||||||
#endif  // GTEST_HAS_CXXABI_H_ || __HP_aCC
 | 
					#endif  // GTEST_HAS_CXXABI_H_ || __HP_aCC
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3314,11 +3314,7 @@ TEST_F(SingleEvaluationTest, OtherCases) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#if GTEST_HAS_RTTI
 | 
					#if GTEST_HAS_RTTI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef _MSC_VER
 | 
					 | 
				
			||||||
#define ERROR_DESC "class std::runtime_error"
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
#define ERROR_DESC "std::runtime_error"
 | 
					#define ERROR_DESC "std::runtime_error"
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#else  // GTEST_HAS_RTTI
 | 
					#else  // GTEST_HAS_RTTI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user