summaryrefslogtreecommitdiffstats
path: root/googletest/include/gtest/gtest-printers.h
diff options
context:
space:
mode:
authorNiels Dekker <N.Dekker@lumc.nl>2020-12-24 13:42:39 +0100
committerNiels Dekker <N.Dekker@lumc.nl>2021-02-25 13:23:52 +0100
commitac3c2a8d0496893787015014a5abd397b766cce2 (patch)
treeb3502f10ab4a4745fb764f162a9501f39bdcadc0 /googletest/include/gtest/gtest-printers.h
parent1de637fbdd4ab0051229707f855eee76f5a3d5da (diff)
downloadgoogletest-ac3c2a8d0496893787015014a5abd397b766cce2.tar.gz
googletest-ac3c2a8d0496893787015014a5abd397b766cce2.zip
overload PrintTo for std::type_info and std::type_index
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/include/gtest/gtest-printers.h')
-rw-r--r--googletest/include/gtest/gtest-printers.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/googletest/include/gtest/gtest-printers.h b/googletest/include/gtest/gtest-printers.h
index cd094949..aa9ca48c 100644
--- a/googletest/include/gtest/gtest-printers.h
+++ b/googletest/include/gtest/gtest-printers.h
@@ -113,6 +113,11 @@
#include "gtest/internal/gtest-internal.h"
#include "gtest/internal/gtest-port.h"
+#if GTEST_HAS_RTTI
+#include <typeindex>
+#include <typeinfo>
+#endif // GTEST_HAS_RTTI
+
namespace testing {
// Definitions in the internal* namespaces are subject to change without notice.
@@ -650,6 +655,24 @@ void PrintTo(const ::std::pair<T1, T2>& value, ::std::ostream* os) {
*os << ')';
}
+template <typename T>
+void PrintWithNameTo(const T& value, ::std::ostream* os) {
+ internal::PrintTo<T>(value, os);
+ *os << " (\"" << value.name() << "\")";
+}
+
+#if GTEST_HAS_RTTI
+
+inline void PrintTo(const ::std::type_info& value, ::std::ostream* os) {
+ internal::PrintWithNameTo(value, os);
+}
+
+inline void PrintTo(const ::std::type_index& value, ::std::ostream* os) {
+ internal::PrintWithNameTo(value, os);
+}
+
+#endif // GTEST_HAS_RTTI
+
// Implements printing a non-reference type T by letting the compiler
// pick the right overload of PrintTo() for T.
template <typename T>
OpenPOWER on IntegriCloud