summaryrefslogtreecommitdiffstats
path: root/googletest/test
diff options
context:
space:
mode:
authorNiels Dekker <N.Dekker@lumc.nl>2020-12-24 12:42:39 (GMT)
committerNiels Dekker <N.Dekker@lumc.nl>2021-02-25 12:23:52 (GMT)
commitac3c2a8d0496893787015014a5abd397b766cce2 (patch)
treeb3502f10ab4a4745fb764f162a9501f39bdcadc0 /googletest/test
parent1de637fbdd4ab0051229707f855eee76f5a3d5da (diff)
downloadgoogletest-ac3c2a8d0496893787015014a5abd397b766cce2.zip
googletest-ac3c2a8d0496893787015014a5abd397b766cce2.tar.gz
googletest-ac3c2a8d0496893787015014a5abd397b766cce2.tar.bz2
overload PrintTo for std::type_info and std::type_indexrefs/pull/3184/head
Included the string returned by their `name()` member function with the output of `PrintTo`. Typical use case: std::unique_ptr<AbstractProduct> product = FactoryMethod(); // Assert that the product is of type X: ASSERT_EQ(std::type_index{typeid(*product)}, std::type_index{typeid(ProductX)}); Possible output in case of a test assert failure, now including the names of the compared type indices: > error: Expected equality of these values: > std::type_index(typeid(*product)) > Which is: 8-byte object <D0-65 54-8C F6-7F 00-00> ("class ProductY") > std::type_index(typeid(ProductX)) > Which is: 8-byte object <40-64 54-8C F6-7F 00-00> ("class ProductX") With help from Krystian Kuzniarek.
Diffstat (limited to 'googletest/test')
-rw-r--r--googletest/test/googletest-printers-test.cc34
1 files changed, 34 insertions, 0 deletions
diff --git a/googletest/test/googletest-printers-test.cc b/googletest/test/googletest-printers-test.cc
index 8247d4e..1d35c54 100644
--- a/googletest/test/googletest-printers-test.cc
+++ b/googletest/test/googletest-printers-test.cc
@@ -1589,6 +1589,40 @@ TEST(PrintToStringTest, WorksForCharArrayWithEmbeddedNul) {
"\n As Text: \"From ä — ẑ\"");
}
+#if GTEST_HAS_RTTI
+TEST(PrintToStringTest, IncludesNameWithTypeInfoAndTypeIndex) {
+ // The following lambda tests that both the printed string for the specified
+ // `typeid`, and the one for its `std::type_index` contain the string returned
+ // by its `name()` member function.
+ const auto TestTypeId = [](const ::std::type_info& id) {
+ const auto name = id.name();
+ const auto contains_name = [name](const ::std::string& str) {
+ return str.find(name) != ::std::string::npos;
+ };
+ EXPECT_TRUE(contains_name(PrintToString(id)));
+ EXPECT_TRUE(contains_name(PrintToString(::std::type_index{id})));
+ };
+
+ TestTypeId(typeid(void));
+ TestTypeId(typeid(int));
+ TestTypeId(typeid(const volatile int*));
+
+ struct Base {
+ virtual ~Base() = default;
+ };
+ struct Derived : Base {};
+
+ TestTypeId(typeid(Base));
+ TestTypeId(typeid(Derived));
+
+ Derived derived;
+ Base& base = derived;
+
+ TestTypeId(typeid(base));
+ TestTypeId(typeid(derived));
+}
+#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