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:
parent
097f64e986
commit
6f1c4b3d7b
@ -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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user