diff options
| author | Gennadiy Civil <gennadiycivil@users.noreply.github.com> | 2017-08-24 10:50:17 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-08-24 10:50:17 -0400 |
| commit | eabd5c908d27eed925d81637c99c834489fc84b2 (patch) | |
| tree | f3e91107071d08a0f492d36139ad280229f0a872 /googletest/test | |
| parent | c38baf9858311e2887623465c8be433cfa585d2a (diff) | |
| parent | 87327b12e9b19d37da74f2a8c777befec60f9130 (diff) | |
| download | googletest-eabd5c908d27eed925d81637c99c834489fc84b2.tar.gz googletest-eabd5c908d27eed925d81637c99c834489fc84b2.tar.bz2 googletest-eabd5c908d27eed925d81637c99c834489fc84b2.zip | |
Merge pull request #1186 from Dani-Hub/master
Prevent infinite loops for recursive containers like boost::filesystem::path
Diffstat (limited to 'googletest/test')
| -rw-r--r-- | googletest/test/gtest-printers_test.cc | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/googletest/test/gtest-printers_test.cc b/googletest/test/gtest-printers_test.cc index b0a83410..487d3cb3 100644 --- a/googletest/test/gtest-printers_test.cc +++ b/googletest/test/gtest-printers_test.cc @@ -187,6 +187,29 @@ inline ::std::ostream& operator<<(::std::ostream& os, return os << "StreamableTemplateInFoo: " << x.value(); } +// A user-defined streamable but recursivly-defined container type in +// a user namespace, it mimics therefore std::filesystem::path or +// boost::filesystem::path. +class PathLike { + public: + struct iterator + { + typedef PathLike value_type; + }; + typedef iterator const_iterator; + + PathLike() {} + + iterator begin() const { return iterator(); } + iterator end() const { return iterator(); } + + friend + ::std::ostream& operator<<(::std::ostream& os, const PathLike&) + { + return os << "Streamable-PathLike"; + } +}; + } // namespace foo namespace testing { @@ -1161,6 +1184,15 @@ TEST(PrintStreamableTypeTest, TemplateTypeInUserNamespace) { Print(::foo::StreamableTemplateInFoo<int>())); } +// Tests printing a user-defined recursive container type that has a << +// operator. +TEST(PrintStreamableTypeTest, PathLikeInUserNamespace) { + ::foo::PathLike x; + EXPECT_EQ("Streamable-PathLike", Print(x)); + const ::foo::PathLike cx; + EXPECT_EQ("Streamable-PathLike", Print(cx)); +} + // Tests printing user-defined types that have a PrintTo() function. TEST(PrintPrintableTypeTest, InUserNamespace) { EXPECT_EQ("PrintableViaPrintTo: 0", |
