Merge pull request #3184 from N-Dekker:PrintTo-type_index-overload
PiperOrigin-RevId: 361175466
This commit is contained in:
@@ -1589,6 +1589,61 @@ TEST(PrintToStringTest, WorksForCharArrayWithEmbeddedNul) {
|
||||
"\n As Text: \"From ä — ẑ\"");
|
||||
}
|
||||
|
||||
#if GTEST_HAS_RTTI
|
||||
template <typename T>
|
||||
class PrintToStringTest : public testing::Test {
|
||||
public:
|
||||
using TestType = T;
|
||||
};
|
||||
|
||||
struct PrintBase {
|
||||
virtual ~PrintBase() = default;
|
||||
};
|
||||
struct PrintDerived : PrintBase {};
|
||||
|
||||
using PrintToStringTestTypes =
|
||||
testing::Types<void, int, const volatile int*, PrintBase, PrintDerived>;
|
||||
TYPED_TEST_SUITE(PrintToStringTest, PrintToStringTestTypes);
|
||||
|
||||
// Returns `true` if `haystack` contains `needle`.
|
||||
//
|
||||
// FIXME: Replace with `EXPECT_THAT(haystack, HasSubstr(needle))` once
|
||||
// GoogleTest starts depending on GoogleMock.
|
||||
bool ContainsSubstr(const std::string& haystack, const std::string& needle) {
|
||||
return haystack.find(needle) != std::string::npos;
|
||||
}
|
||||
|
||||
TYPED_TEST(PrintToStringTest, IncludesNameWithTypeInfoAndTypeIndex) {
|
||||
const ::std::type_info& info = typeid(typename TestFixture::TestType);
|
||||
SCOPED_TRACE(info.name());
|
||||
EXPECT_TRUE(ContainsSubstr(PrintToString(info), info.name()));
|
||||
EXPECT_TRUE(
|
||||
ContainsSubstr(PrintToString(::std::type_index{info}), info.name()));
|
||||
}
|
||||
|
||||
TEST(PrintToStringTest, IncludesNameWithTypeInfoAndTypeIndexViaBaseRef) {
|
||||
PrintDerived derived;
|
||||
PrintBase& base = derived;
|
||||
|
||||
{
|
||||
const ::std::type_info& derived_info = typeid(derived);
|
||||
SCOPED_TRACE(derived_info.name());
|
||||
EXPECT_TRUE(
|
||||
ContainsSubstr(PrintToString(derived_info), derived_info.name()));
|
||||
EXPECT_TRUE(ContainsSubstr(PrintToString(::std::type_index{derived_info}),
|
||||
derived_info.name()));
|
||||
}
|
||||
{
|
||||
const ::std::type_info& base_ref_info = typeid(base);
|
||||
SCOPED_TRACE(base_ref_info.name());
|
||||
EXPECT_TRUE(
|
||||
ContainsSubstr(PrintToString(base_ref_info), base_ref_info.name()));
|
||||
EXPECT_TRUE(ContainsSubstr(PrintToString(::std::type_index{base_ref_info}),
|
||||
base_ref_info.name()));
|
||||
}
|
||||
}
|
||||
#endif // GTEST_HAS_RTTI
|
||||
|
||||
TEST(IsValidUTF8Test, IllFormedUTF8) {
|
||||
// The following test strings are ill-formed UTF-8 and are printed
|
||||
// as hex only (or ASCII, in case of ASCII bytes) because IsValidUTF8() is
|
||||
|
||||
Reference in New Issue
Block a user