mirror of
https://github.com/google/googletest.git
synced 2025-03-10 17:36:10 +00:00
Adds special support for matching StringPiece. Pulls in gtest r646.
This commit is contained in:
parent
2eab17b76d
commit
1f122a06e6
@ -318,6 +318,51 @@ class GTEST_API_ Matcher<internal::string>
|
|||||||
Matcher(const char* s); // NOLINT
|
Matcher(const char* s); // NOLINT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if GTEST_HAS_STRING_PIECE_
|
||||||
|
// The following two specializations allow the user to write str
|
||||||
|
// instead of Eq(str) and "foo" instead of Eq("foo") when a StringPiece
|
||||||
|
// matcher is expected.
|
||||||
|
template <>
|
||||||
|
class GTEST_API_ Matcher<const StringPiece&>
|
||||||
|
: public internal::MatcherBase<const StringPiece&> {
|
||||||
|
public:
|
||||||
|
Matcher() {}
|
||||||
|
|
||||||
|
explicit Matcher(const MatcherInterface<const StringPiece&>* impl)
|
||||||
|
: internal::MatcherBase<const StringPiece&>(impl) {}
|
||||||
|
|
||||||
|
// Allows the user to write str instead of Eq(str) sometimes, where
|
||||||
|
// str is a string object.
|
||||||
|
Matcher(const internal::string& s); // NOLINT
|
||||||
|
|
||||||
|
// Allows the user to write "foo" instead of Eq("foo") sometimes.
|
||||||
|
Matcher(const char* s); // NOLINT
|
||||||
|
|
||||||
|
// Allows the user to pass StringPieces directly.
|
||||||
|
Matcher(StringPiece s); // NOLINT
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
class GTEST_API_ Matcher<StringPiece>
|
||||||
|
: public internal::MatcherBase<StringPiece> {
|
||||||
|
public:
|
||||||
|
Matcher() {}
|
||||||
|
|
||||||
|
explicit Matcher(const MatcherInterface<StringPiece>* impl)
|
||||||
|
: internal::MatcherBase<StringPiece>(impl) {}
|
||||||
|
|
||||||
|
// Allows the user to write str instead of Eq(str) sometimes, where
|
||||||
|
// str is a string object.
|
||||||
|
Matcher(const internal::string& s); // NOLINT
|
||||||
|
|
||||||
|
// Allows the user to write "foo" instead of Eq("foo") sometimes.
|
||||||
|
Matcher(const char* s); // NOLINT
|
||||||
|
|
||||||
|
// Allows the user to pass StringPieces directly.
|
||||||
|
Matcher(StringPiece s); // NOLINT
|
||||||
|
};
|
||||||
|
#endif // GTEST_HAS_STRING_PIECE_
|
||||||
|
|
||||||
// The PolymorphicMatcher class template makes it easy to implement a
|
// The PolymorphicMatcher class template makes it easy to implement a
|
||||||
// polymorphic matcher (i.e. a matcher that can match values of more
|
// polymorphic matcher (i.e. a matcher that can match values of more
|
||||||
// than one type, e.g. Eq(n) and NotNull()).
|
// than one type, e.g. Eq(n) and NotNull()).
|
||||||
|
@ -63,6 +63,41 @@ Matcher<internal::string>::Matcher(const char* s) {
|
|||||||
*this = Eq(internal::string(s));
|
*this = Eq(internal::string(s));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if GTEST_HAS_STRING_PIECE_
|
||||||
|
// Constructs a matcher that matches a const StringPiece& whose value is
|
||||||
|
// equal to s.
|
||||||
|
Matcher<const StringPiece&>::Matcher(const internal::string& s) {
|
||||||
|
*this = Eq(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Constructs a matcher that matches a const StringPiece& whose value is
|
||||||
|
// equal to s.
|
||||||
|
Matcher<const StringPiece&>::Matcher(const char* s) {
|
||||||
|
*this = Eq(internal::string(s));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Constructs a matcher that matches a const StringPiece& whose value is
|
||||||
|
// equal to s.
|
||||||
|
Matcher<const StringPiece&>::Matcher(StringPiece s) {
|
||||||
|
*this = Eq(s.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Constructs a matcher that matches a StringPiece whose value is equal to s.
|
||||||
|
Matcher<StringPiece>::Matcher(const internal::string& s) {
|
||||||
|
*this = Eq(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Constructs a matcher that matches a StringPiece whose value is equal to s.
|
||||||
|
Matcher<StringPiece>::Matcher(const char* s) {
|
||||||
|
*this = Eq(internal::string(s));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Constructs a matcher that matches a StringPiece whose value is equal to s.
|
||||||
|
Matcher<StringPiece>::Matcher(StringPiece s) {
|
||||||
|
*this = Eq(s.ToString());
|
||||||
|
}
|
||||||
|
#endif // GTEST_HAS_STRING_PIECE_
|
||||||
|
|
||||||
namespace internal {
|
namespace internal {
|
||||||
|
|
||||||
// Joins a vector of strings as if they are fields of a tuple; returns
|
// Joins a vector of strings as if they are fields of a tuple; returns
|
||||||
|
@ -364,6 +364,44 @@ TEST(StringMatcherTest, CanBeImplicitlyConstructedFromString) {
|
|||||||
EXPECT_FALSE(m2.Matches("hello"));
|
EXPECT_FALSE(m2.Matches("hello"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if GTEST_HAS_STRING_PIECE_
|
||||||
|
// Tests that a C-string literal can be implicitly converted to a
|
||||||
|
// Matcher<StringPiece> or Matcher<const StringPiece&>.
|
||||||
|
TEST(StringPieceMatcherTest, CanBeImplicitlyConstructedFromCStringLiteral) {
|
||||||
|
Matcher<StringPiece> m1 = "cats";
|
||||||
|
EXPECT_TRUE(m1.Matches("cats"));
|
||||||
|
EXPECT_FALSE(m1.Matches("dogs"));
|
||||||
|
|
||||||
|
Matcher<const StringPiece&> m2 = "cats";
|
||||||
|
EXPECT_TRUE(m2.Matches("cats"));
|
||||||
|
EXPECT_FALSE(m2.Matches("dogs"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that a string object can be implicitly converted to a
|
||||||
|
// Matcher<StringPiece> or Matcher<const StringPiece&>.
|
||||||
|
TEST(StringPieceMatcherTest, CanBeImplicitlyConstructedFromString) {
|
||||||
|
Matcher<StringPiece> m1 = string("cats");
|
||||||
|
EXPECT_TRUE(m1.Matches("cats"));
|
||||||
|
EXPECT_FALSE(m1.Matches("dogs"));
|
||||||
|
|
||||||
|
Matcher<const StringPiece&> m2 = string("cats");
|
||||||
|
EXPECT_TRUE(m2.Matches("cats"));
|
||||||
|
EXPECT_FALSE(m2.Matches("dogs"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tests that a StringPiece object can be implicitly converted to a
|
||||||
|
// Matcher<StringPiece> or Matcher<const StringPiece&>.
|
||||||
|
TEST(StringPieceMatcherTest, CanBeImplicitlyConstructedFromStringPiece) {
|
||||||
|
Matcher<StringPiece> m1 = StringPiece("cats");
|
||||||
|
EXPECT_TRUE(m1.Matches("cats"));
|
||||||
|
EXPECT_FALSE(m1.Matches("dogs"));
|
||||||
|
|
||||||
|
Matcher<const StringPiece&> m2 = StringPiece("cats");
|
||||||
|
EXPECT_TRUE(m2.Matches("cats"));
|
||||||
|
EXPECT_FALSE(m2.Matches("dogs"));
|
||||||
|
}
|
||||||
|
#endif // GTEST_HAS_STRING_PIECE_
|
||||||
|
|
||||||
// Tests that MakeMatcher() constructs a Matcher<T> from a
|
// Tests that MakeMatcher() constructs a Matcher<T> from a
|
||||||
// MatcherInterface* without requiring the user to explicitly
|
// MatcherInterface* without requiring the user to explicitly
|
||||||
// write the type.
|
// write the type.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user