summaryrefslogtreecommitdiffstats
path: root/googlemock
diff options
context:
space:
mode:
authorAbseil Team <absl-team@google.com>2018-09-13 15:27:56 (GMT)
committerGennadiy Civil <misterg@google.com>2018-09-14 15:13:48 (GMT)
commitffc9baeb4cb81a7db250249920a9bd3d5ace760a (patch)
treeb8107cc41ca5928f4ecb525cbf933089fdb725b1 /googlemock
parentcfe0ae867857dad6d14ff72a2f02808086021f35 (diff)
downloadgoogletest-ffc9baeb4cb81a7db250249920a9bd3d5ace760a.zip
googletest-ffc9baeb4cb81a7db250249920a9bd3d5ace760a.tar.gz
googletest-ffc9baeb4cb81a7db250249920a9bd3d5ace760a.tar.bz2
Googletest exportrefs/pull/1837/head
Treat default-constructed string_view same as constructed from "". In the context of string comparison (e.g. HasSubstr, StartsWith, EndsWith, etc.), a default-constructed string_view (nullptr) should be semantically same as a empty string "". PiperOrigin-RevId: 212816839
Diffstat (limited to 'googlemock')
-rw-r--r--googlemock/include/gmock/gmock-matchers.h14
-rw-r--r--googlemock/test/gmock-matchers_test.cc39
2 files changed, 30 insertions, 23 deletions
diff --git a/googlemock/include/gmock/gmock-matchers.h b/googlemock/include/gmock/gmock-matchers.h
index a7bcfc8..fa26bf9 100644
--- a/googlemock/include/gmock/gmock-matchers.h
+++ b/googlemock/include/gmock/gmock-matchers.h
@@ -1307,9 +1307,6 @@ class StrEqualityMatcher {
#if GTEST_HAS_ABSL
bool MatchAndExplain(const absl::string_view& s,
MatchResultListener* listener) const {
- if (s.data() == NULL) {
- return !expect_eq_;
- }
// This should fail to compile if absl::string_view is used with wide
// strings.
const StringType& str = string(s);
@@ -1380,9 +1377,6 @@ class HasSubstrMatcher {
#if GTEST_HAS_ABSL
bool MatchAndExplain(const absl::string_view& s,
MatchResultListener* listener) const {
- if (s.data() == NULL) {
- return false;
- }
// This should fail to compile if absl::string_view is used with wide
// strings.
const StringType& str = string(s);
@@ -1440,9 +1434,6 @@ class StartsWithMatcher {
#if GTEST_HAS_ABSL
bool MatchAndExplain(const absl::string_view& s,
MatchResultListener* listener) const {
- if (s.data() == NULL) {
- return false;
- }
// This should fail to compile if absl::string_view is used with wide
// strings.
const StringType& str = string(s);
@@ -1499,9 +1490,6 @@ class EndsWithMatcher {
#if GTEST_HAS_ABSL
bool MatchAndExplain(const absl::string_view& s,
MatchResultListener* listener) const {
- if (s.data() == NULL) {
- return false;
- }
// This should fail to compile if absl::string_view is used with wide
// strings.
const StringType& str = string(s);
@@ -1558,7 +1546,7 @@ class MatchesRegexMatcher {
#if GTEST_HAS_ABSL
bool MatchAndExplain(const absl::string_view& s,
MatchResultListener* listener) const {
- return s.data() && MatchAndExplain(string(s), listener);
+ return MatchAndExplain(string(s), listener);
}
#endif // GTEST_HAS_ABSL
diff --git a/googlemock/test/gmock-matchers_test.cc b/googlemock/test/gmock-matchers_test.cc
index 4697f0b..79eb552 100644
--- a/googlemock/test/gmock-matchers_test.cc
+++ b/googlemock/test/gmock-matchers_test.cc
@@ -1335,6 +1335,11 @@ TEST(StrEqTest, MatchesEqualString) {
EXPECT_TRUE(m3.Matches(absl::string_view("Hello")));
EXPECT_FALSE(m3.Matches(absl::string_view("hello")));
EXPECT_FALSE(m3.Matches(absl::string_view()));
+
+ Matcher<const absl::string_view&> m_empty = StrEq("");
+ EXPECT_TRUE(m_empty.Matches(absl::string_view("")));
+ EXPECT_TRUE(m_empty.Matches(absl::string_view()));
+ EXPECT_FALSE(m_empty.Matches(absl::string_view("hello")));
#endif // GTEST_HAS_ABSL
}
@@ -1459,6 +1464,10 @@ TEST(HasSubstrTest, WorksForStringClasses) {
const Matcher<const std::string&> m2 = HasSubstr("foo");
EXPECT_TRUE(m2.Matches(std::string("I love food.")));
EXPECT_FALSE(m2.Matches(std::string("tofo")));
+
+ const Matcher<std::string> m_empty = HasSubstr("");
+ EXPECT_TRUE(m_empty.Matches(std::string()));
+ EXPECT_TRUE(m_empty.Matches(std::string("not empty")));
}
// Tests that HasSubstr() works for matching C-string-typed values.
@@ -1472,6 +1481,11 @@ TEST(HasSubstrTest, WorksForCStrings) {
EXPECT_TRUE(m2.Matches("I love food."));
EXPECT_FALSE(m2.Matches("tofo"));
EXPECT_FALSE(m2.Matches(NULL));
+
+ const Matcher<const char*> m_empty = HasSubstr("");
+ EXPECT_TRUE(m_empty.Matches("not empty"));
+ EXPECT_TRUE(m_empty.Matches(""));
+ EXPECT_FALSE(m_empty.Matches(NULL));
}
#if GTEST_HAS_ABSL
@@ -1489,7 +1503,8 @@ TEST(HasSubstrTest, WorksForStringViewClasses) {
const Matcher<const absl::string_view&> m3 = HasSubstr("");
EXPECT_TRUE(m3.Matches(absl::string_view("foo")));
- EXPECT_FALSE(m3.Matches(absl::string_view()));
+ EXPECT_TRUE(m3.Matches(absl::string_view("")));
+ EXPECT_TRUE(m3.Matches(absl::string_view()));
}
#endif // GTEST_HAS_ABSL
@@ -1713,6 +1728,13 @@ TEST(StartsWithTest, MatchesStringWithGivenPrefix) {
EXPECT_TRUE(m2.Matches("High"));
EXPECT_FALSE(m2.Matches("H"));
EXPECT_FALSE(m2.Matches(" Hi"));
+
+#if GTEST_HAS_ABSL
+ const Matcher<absl::string_view> m_empty = StartsWith("");
+ EXPECT_TRUE(m_empty.Matches(absl::string_view()));
+ EXPECT_TRUE(m_empty.Matches(absl::string_view("")));
+ EXPECT_TRUE(m_empty.Matches(absl::string_view("not empty")));
+#endif // GTEST_HAS_ABSL
}
TEST(StartsWithTest, CanDescribeSelf) {
@@ -1748,9 +1770,8 @@ TEST(EndsWithTest, MatchesStringWithGivenSuffix) {
const Matcher<const absl::string_view&> m4 = EndsWith("");
EXPECT_TRUE(m4.Matches("Hi"));
EXPECT_TRUE(m4.Matches(""));
- // Default-constructed absl::string_view should not match anything, in order
- // to distinguish it from an empty string.
- EXPECT_FALSE(m4.Matches(absl::string_view()));
+ EXPECT_TRUE(m4.Matches(absl::string_view()));
+ EXPECT_TRUE(m4.Matches(absl::string_view("")));
#endif // GTEST_HAS_ABSL
}
@@ -1777,11 +1798,10 @@ TEST(MatchesRegexTest, MatchesStringMatchingGivenRegex) {
EXPECT_TRUE(m3.Matches(absl::string_view("az")));
EXPECT_TRUE(m3.Matches(absl::string_view("abcz")));
EXPECT_FALSE(m3.Matches(absl::string_view("1az")));
- // Default-constructed absl::string_view should not match anything, in order
- // to distinguish it from an empty string.
EXPECT_FALSE(m3.Matches(absl::string_view()));
const Matcher<const absl::string_view&> m4 = MatchesRegex("");
- EXPECT_FALSE(m4.Matches(absl::string_view()));
+ EXPECT_TRUE(m4.Matches(absl::string_view("")));
+ EXPECT_TRUE(m4.Matches(absl::string_view()));
#endif // GTEST_HAS_ABSL
}
@@ -1816,11 +1836,10 @@ TEST(ContainsRegexTest, MatchesStringContainingGivenRegex) {
EXPECT_TRUE(m3.Matches(absl::string_view("azbz")));
EXPECT_TRUE(m3.Matches(absl::string_view("az1")));
EXPECT_FALSE(m3.Matches(absl::string_view("1a")));
- // Default-constructed absl::string_view should not match anything, in order
- // to distinguish it from an empty string.
EXPECT_FALSE(m3.Matches(absl::string_view()));
const Matcher<const absl::string_view&> m4 = ContainsRegex("");
- EXPECT_FALSE(m4.Matches(absl::string_view()));
+ EXPECT_TRUE(m4.Matches(absl::string_view("")));
+ EXPECT_TRUE(m4.Matches(absl::string_view()));
#endif // GTEST_HAS_ABSL
}