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.
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user