Improves gtest's failure messages. In particulars, char pointers and
char arrays are not escapped properly.
This commit is contained in:
@@ -195,67 +195,6 @@ class GTEST_API_ ScopedTrace {
|
||||
template <typename T>
|
||||
String StreamableToString(const T& streamable);
|
||||
|
||||
// The Symbian compiler has a bug that prevents it from selecting the
|
||||
// correct overload of FormatForComparisonFailureMessage (see below)
|
||||
// unless we pass the first argument by reference. If we do that,
|
||||
// however, Visual Age C++ 10.1 generates a compiler error. Therefore
|
||||
// we only apply the work-around for Symbian.
|
||||
#if defined(__SYMBIAN32__)
|
||||
# define GTEST_CREF_WORKAROUND_ const&
|
||||
#else
|
||||
# define GTEST_CREF_WORKAROUND_
|
||||
#endif
|
||||
|
||||
// When this operand is a const char* or char*, if the other operand
|
||||
// is a ::std::string or ::string, we print this operand as a C string
|
||||
// rather than a pointer (we do the same for wide strings); otherwise
|
||||
// we print it as a pointer to be safe.
|
||||
|
||||
// This internal macro is used to avoid duplicated code.
|
||||
#define GTEST_FORMAT_IMPL_(operand2_type, operand1_printer)\
|
||||
inline String FormatForComparisonFailureMessage(\
|
||||
operand2_type::value_type* GTEST_CREF_WORKAROUND_ str, \
|
||||
const operand2_type& /*operand2*/) {\
|
||||
return operand1_printer(str);\
|
||||
}\
|
||||
inline String FormatForComparisonFailureMessage(\
|
||||
const operand2_type::value_type* GTEST_CREF_WORKAROUND_ str, \
|
||||
const operand2_type& /*operand2*/) {\
|
||||
return operand1_printer(str);\
|
||||
}
|
||||
|
||||
GTEST_FORMAT_IMPL_(::std::string, String::ShowCStringQuoted)
|
||||
#if GTEST_HAS_STD_WSTRING
|
||||
GTEST_FORMAT_IMPL_(::std::wstring, String::ShowWideCStringQuoted)
|
||||
#endif // GTEST_HAS_STD_WSTRING
|
||||
|
||||
#if GTEST_HAS_GLOBAL_STRING
|
||||
GTEST_FORMAT_IMPL_(::string, String::ShowCStringQuoted)
|
||||
#endif // GTEST_HAS_GLOBAL_STRING
|
||||
#if GTEST_HAS_GLOBAL_WSTRING
|
||||
GTEST_FORMAT_IMPL_(::wstring, String::ShowWideCStringQuoted)
|
||||
#endif // GTEST_HAS_GLOBAL_WSTRING
|
||||
|
||||
#undef GTEST_FORMAT_IMPL_
|
||||
|
||||
// The next four overloads handle the case where the operand being
|
||||
// printed is a char/wchar_t pointer and the other operand is not a
|
||||
// string/wstring object. In such cases, we just print the operand as
|
||||
// a pointer to be safe.
|
||||
#define GTEST_FORMAT_CHAR_PTR_IMPL_(CharType) \
|
||||
template <typename T> \
|
||||
String FormatForComparisonFailureMessage(CharType* GTEST_CREF_WORKAROUND_ p, \
|
||||
const T&) { \
|
||||
return PrintToString(static_cast<const void*>(p)); \
|
||||
}
|
||||
|
||||
GTEST_FORMAT_CHAR_PTR_IMPL_(char)
|
||||
GTEST_FORMAT_CHAR_PTR_IMPL_(const char)
|
||||
GTEST_FORMAT_CHAR_PTR_IMPL_(wchar_t)
|
||||
GTEST_FORMAT_CHAR_PTR_IMPL_(const wchar_t)
|
||||
|
||||
#undef GTEST_FORMAT_CHAR_PTR_IMPL_
|
||||
|
||||
// Constructs and returns the message for an equality assertion
|
||||
// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure.
|
||||
//
|
||||
|
||||
@@ -1585,6 +1585,10 @@ inline bool IsUpper(char ch) {
|
||||
inline bool IsXDigit(char ch) {
|
||||
return isxdigit(static_cast<unsigned char>(ch)) != 0;
|
||||
}
|
||||
inline bool IsXDigit(wchar_t ch) {
|
||||
const unsigned char low_byte = static_cast<unsigned char>(ch);
|
||||
return ch == low_byte && isxdigit(low_byte) != 0;
|
||||
}
|
||||
|
||||
inline char ToLower(char ch) {
|
||||
return static_cast<char>(tolower(static_cast<unsigned char>(ch)));
|
||||
|
||||
@@ -82,15 +82,6 @@ class GTEST_API_ String {
|
||||
public:
|
||||
// Static utility methods
|
||||
|
||||
// Returns the input enclosed in double quotes if it's not NULL;
|
||||
// otherwise returns "(null)". For example, "\"Hello\"" is returned
|
||||
// for input "Hello".
|
||||
//
|
||||
// This is useful for printing a C string in the syntax of a literal.
|
||||
//
|
||||
// Known issue: escape sequences are not handled yet.
|
||||
static String ShowCStringQuoted(const char* c_str);
|
||||
|
||||
// Clones a 0-terminated C string, allocating memory using new. The
|
||||
// caller is responsible for deleting the return value using
|
||||
// delete[]. Returns the cloned string, or NULL if the input is
|
||||
@@ -139,10 +130,6 @@ class GTEST_API_ String {
|
||||
// returned.
|
||||
static String ShowWideCString(const wchar_t* wide_c_str);
|
||||
|
||||
// Similar to ShowWideCString(), except that this function encloses
|
||||
// the converted string in double quotes.
|
||||
static String ShowWideCStringQuoted(const wchar_t* wide_c_str);
|
||||
|
||||
// Compares two wide C strings. Returns true iff they have the same
|
||||
// content.
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user