forked from OSchip/llvm-project
reland [gtest] Fix printing of StringRef and SmallString in assert messages.
Renames GTEST_NO_LLVM_RAW_OSTREAM -> GTEST_NO_LLVM_SUPPORT and guards the new features behind it. This reverts commit a063bcf3ef5a879adbe9639a3c187d876eee0e66. llvm-svn: 369527
This commit is contained in:
parent
4d668a1f07
commit
a451156bb6
|
@ -360,7 +360,7 @@ set(COMPILER_RT_UNITTEST_LINK_FLAGS ${COMPILER_RT_UNITTEST_CFLAGS})
|
|||
set(COMPILER_RT_GTEST_PATH ${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest)
|
||||
set(COMPILER_RT_GTEST_SOURCE ${COMPILER_RT_GTEST_PATH}/src/gtest-all.cc)
|
||||
set(COMPILER_RT_GTEST_CFLAGS
|
||||
-DGTEST_NO_LLVM_RAW_OSTREAM=1
|
||||
-DGTEST_NO_LLVM_SUPPORT=1
|
||||
-DGTEST_HAS_RTTI=0
|
||||
-I${COMPILER_RT_GTEST_PATH}/include
|
||||
-I${COMPILER_RT_GTEST_PATH}
|
||||
|
@ -370,7 +370,7 @@ set(COMPILER_RT_GTEST_CFLAGS
|
|||
set(COMPILER_RT_GMOCK_PATH ${LLVM_MAIN_SRC_DIR}/utils/unittest/googlemock)
|
||||
set(COMPILER_RT_GMOCK_SOURCE ${COMPILER_RT_GMOCK_PATH}/src/gmock-all.cc)
|
||||
set(COMPILER_RT_GMOCK_CFLAGS
|
||||
-DGTEST_NO_LLVM_RAW_OSTREAM=1
|
||||
-DGTEST_NO_LLVM_SUPPORT=1
|
||||
-DGTEST_HAS_RTTI=0
|
||||
-I${COMPILER_RT_GMOCK_PATH}/include
|
||||
-I${COMPILER_RT_GMOCK_PATH}
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
// with ASan) involving C++ standard library types when using libcxx.
|
||||
#define _LIBCPP_HAS_NO_ASAN
|
||||
|
||||
// Do not attempt to use LLVM ostream from gtest.
|
||||
#define GTEST_NO_LLVM_RAW_OSTREAM 1
|
||||
// Do not attempt to use LLVM ostream etc from gtest.
|
||||
#define GTEST_NO_LLVM_SUPPORT 1
|
||||
|
||||
#include "FuzzerCorpus.h"
|
||||
#include "FuzzerDictionary.h"
|
||||
|
|
|
@ -169,7 +169,7 @@ TEST_F(SmallStringTest, Realloc) {
|
|||
EXPECT_EQ("abcdyyy", theString.slice(0, 7));
|
||||
}
|
||||
|
||||
TEST(StringRefTest, Comparisons) {
|
||||
TEST_F(SmallStringTest, Comparisons) {
|
||||
EXPECT_EQ(-1, SmallString<10>("aab").compare("aad"));
|
||||
EXPECT_EQ( 0, SmallString<10>("aab").compare("aab"));
|
||||
EXPECT_EQ( 1, SmallString<10>("aab").compare("aaa"));
|
||||
|
@ -203,4 +203,12 @@ TEST(StringRefTest, Comparisons) {
|
|||
EXPECT_EQ( 1, SmallString<10>("V8_q0").compare_numeric("V1_q0"));
|
||||
}
|
||||
|
||||
// Check gtest prints SmallString as a string instead of a container of chars.
|
||||
// The code is in utils/unittest/googletest/internal/custom/gtest-printers.h
|
||||
TEST_F(SmallStringTest, GTestPrinter) {
|
||||
EXPECT_EQ(R"("foo")", ::testing::PrintToString(SmallString<1>("foo")));
|
||||
const SmallVectorImpl<char> &ErasedSmallString = SmallString<1>("foo");
|
||||
EXPECT_EQ(R"("foo")", ::testing::PrintToString(ErasedSmallString));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
|
|
@ -1055,6 +1055,12 @@ TEST(StringRefTest, StringLiteral) {
|
|||
EXPECT_EQ(StringRef("Bar"), Strings[1]);
|
||||
}
|
||||
|
||||
// Check gtest prints StringRef as a string instead of a container of chars.
|
||||
// The code is in utils/unittest/googletest/internal/custom/gtest-printers.h
|
||||
TEST(StringRefTest, GTestPrinter) {
|
||||
EXPECT_EQ(R"("foo")", ::testing::PrintToString(StringRef("foo")));
|
||||
}
|
||||
|
||||
static_assert(is_trivially_copyable<StringRef>::value, "trivially copyable");
|
||||
|
||||
} // end anonymous namespace
|
||||
|
|
|
@ -39,4 +39,31 @@
|
|||
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_
|
||||
#define GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_
|
||||
|
||||
#if !GTEST_NO_LLVM_SUPPORT
|
||||
#include "llvm/ADT/SmallString.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include <ostream>
|
||||
// Printing of llvm String types.
|
||||
// gtest sees these as containers of char (they have nested iterator types),
|
||||
// so their operator<< is never considered unless we provide PrintTo().
|
||||
// PrintStringTo provides quotes and escaping, at the cost of a copy.
|
||||
namespace llvm {
|
||||
inline void PrintTo(llvm::StringRef S, std::ostream *OS) {
|
||||
*OS << ::testing::PrintToString(S.str());
|
||||
}
|
||||
// We need both SmallString<N> and SmallVectorImpl<char> overloads:
|
||||
// - the SmallString<N> template is needed as overload resolution will
|
||||
// instantiate generic PrintTo<T> rather than do derived-to-base conversion
|
||||
// - but SmallVectorImpl<char> is sometimes the actual static type, in code
|
||||
// that erases the small size
|
||||
template <unsigned N>
|
||||
inline void PrintTo(const SmallString<N> &S, std::ostream *OS) {
|
||||
*OS << ::testing::PrintToString(std::string(S.data(), S.size()));
|
||||
}
|
||||
inline void PrintTo(const SmallVectorImpl<char> &S, std::ostream *OS) {
|
||||
*OS << ::testing::PrintToString(std::string(S.data(), S.size()));
|
||||
}
|
||||
} // namespace llvm
|
||||
#endif // !GTEST_NO_LLVM_SUPPORT
|
||||
|
||||
#endif // GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_
|
||||
|
|
|
@ -40,7 +40,7 @@ auto printable(const T &V) -> decltype(StreamSwitch<T>::printable(V)) {
|
|||
|
||||
// If raw_ostream support is enabled, we specialize for types with operator<<
|
||||
// that takes a raw_ostream.
|
||||
#if !GTEST_NO_LLVM_RAW_OSTREAM
|
||||
#if !GTEST_NO_LLVM_SUPPORT
|
||||
#include "llvm/ADT/Optional.h"
|
||||
#include "llvm/Support/raw_os_ostream.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
|
@ -81,6 +81,6 @@ struct StreamSwitch<llvm::Optional<T>,
|
|||
}
|
||||
};
|
||||
} // namespace llvm_gtest
|
||||
#endif // !GTEST_NO_LLVM_RAW_OSTREAM
|
||||
#endif // !GTEST_NO_LLVM_SUPPORT
|
||||
|
||||
#endif // GTEST_INCLUDE_GTEST_INTERNAL_CUSTOM_RAW_OSTREAM_H_
|
||||
|
|
Loading…
Reference in New Issue