diff options
author | Abseil Team <absl-team@google.com> | 2021-01-13 15:57:58 (GMT) |
---|---|---|
committer | Derek Mauro <dmauro@google.com> | 2021-01-14 01:59:36 (GMT) |
commit | 6b2e74905e9a7e70c7d1017ee0dfe5a8e88a1300 (patch) | |
tree | 2bc58b9f9d515a9c6e70fc33ce75001f10d49598 /googletest/test | |
parent | 50ce52016139a4346a94df71249c14c5d286e000 (diff) | |
download | googletest-6b2e74905e9a7e70c7d1017ee0dfe5a8e88a1300.zip googletest-6b2e74905e9a7e70c7d1017ee0dfe5a8e88a1300.tar.gz googletest-6b2e74905e9a7e70c7d1017ee0dfe5a8e88a1300.tar.bz2 |
Googletest export
Print unique_ptr/shared_ptr recursively.
Given that they are smart pointers, it is unlikely that the inner object is
invalid.
PiperOrigin-RevId: 351586888
Diffstat (limited to 'googletest/test')
-rw-r--r-- | googletest/test/googletest-printers-test.cc | 55 |
1 files changed, 53 insertions, 2 deletions
diff --git a/googletest/test/googletest-printers-test.cc b/googletest/test/googletest-printers-test.cc index 24ec230..0653d9e 100644 --- a/googletest/test/googletest-printers-test.cc +++ b/googletest/test/googletest-printers-test.cc @@ -32,15 +32,16 @@ // // This file tests the universal value printer. -#include <ctype.h> -#include <string.h> #include <algorithm> +#include <cctype> #include <cstdint> +#include <cstring> #include <deque> #include <forward_list> #include <limits> #include <list> #include <map> +#include <memory> #include <set> #include <sstream> #include <string> @@ -1702,6 +1703,56 @@ TEST(UniversalPrintTest, IncompleteType) { PrintToString(reinterpret_cast<Incomplete&>(some_object))); } +TEST(UniversalPrintTest, SmartPointers) { + EXPECT_EQ("(nullptr)", PrintToString(std::unique_ptr<int>())); + std::unique_ptr<int> p(new int(17)); + EXPECT_EQ("(ptr = " + PrintPointer(p.get()) + ", value = 17)", + PrintToString(p)); + std::unique_ptr<int[]> p2(new int[2]); + EXPECT_EQ("(" + PrintPointer(p2.get()) + ")", PrintToString(p2)); + + EXPECT_EQ("(nullptr)", PrintToString(std::shared_ptr<int>())); + std::shared_ptr<int> p3(new int(1979)); + EXPECT_EQ("(ptr = " + PrintPointer(p3.get()) + ", value = 1979)", + PrintToString(p3)); +#if __cpp_lib_shared_ptr_arrays >= 201611L + std::shared_ptr<int[]> p4(new int[2]); + EXPECT_EQ("(" + PrintPointer(p4.get()) + ")", PrintToString(p4)); +#endif + + // modifiers + EXPECT_EQ("(nullptr)", PrintToString(std::unique_ptr<int>())); + EXPECT_EQ("(nullptr)", PrintToString(std::unique_ptr<const int>())); + EXPECT_EQ("(nullptr)", PrintToString(std::unique_ptr<volatile int>())); + EXPECT_EQ("(nullptr)", PrintToString(std::unique_ptr<volatile const int>())); + EXPECT_EQ("(nullptr)", PrintToString(std::unique_ptr<int[]>())); + EXPECT_EQ("(nullptr)", PrintToString(std::unique_ptr<const int[]>())); + EXPECT_EQ("(nullptr)", PrintToString(std::unique_ptr<volatile int[]>())); + EXPECT_EQ("(nullptr)", + PrintToString(std::unique_ptr<volatile const int[]>())); + EXPECT_EQ("(nullptr)", PrintToString(std::shared_ptr<int>())); + EXPECT_EQ("(nullptr)", PrintToString(std::shared_ptr<const int>())); + EXPECT_EQ("(nullptr)", PrintToString(std::shared_ptr<volatile int>())); + EXPECT_EQ("(nullptr)", PrintToString(std::shared_ptr<volatile const int>())); +#if __cpp_lib_shared_ptr_arrays >= 201611L + EXPECT_EQ("(nullptr)", PrintToString(std::shared_ptr<int[]>())); + EXPECT_EQ("(nullptr)", PrintToString(std::shared_ptr<const int[]>())); + EXPECT_EQ("(nullptr)", PrintToString(std::shared_ptr<volatile int[]>())); + EXPECT_EQ("(nullptr)", + PrintToString(std::shared_ptr<volatile const int[]>())); +#endif + + // void + EXPECT_EQ("(nullptr)", PrintToString(std::unique_ptr<void, void (*)(void*)>( + nullptr, nullptr))); + EXPECT_EQ("(" + PrintPointer(p.get()) + ")", + PrintToString( + std::unique_ptr<void, void (*)(void*)>(p.get(), [](void*) {}))); + EXPECT_EQ("(nullptr)", PrintToString(std::shared_ptr<void>())); + EXPECT_EQ("(" + PrintPointer(p.get()) + ")", + PrintToString(std::shared_ptr<void>(p.get(), [](void*) {}))); +} + TEST(UniversalTersePrintTupleFieldsToStringsTestWithStd, PrintsEmptyTuple) { Strings result = UniversalTersePrintTupleFieldsToStrings(::std::make_tuple()); EXPECT_EQ(0u, result.size()); |