aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDino Radakovic <dinor@google.com>2023-10-23 10:10:45 -0700
committerCopybara-Service <copybara-worker@google.com>2023-10-23 10:11:36 -0700
commit518387203b573f35477fa6872dd54620e70d2bdb (patch)
tree1467fb70814f5e312352febca9e4c49bd7d7186b
parent116b7e55281c4200151524b093ecc03757a4ffda (diff)
downloadgoogletest-518387203b573f35477fa6872dd54620e70d2bdb.tar.gz
StartsWith: Explicitly construct matcher-typed strings from matchee parameter
The current implementation breaks for absl::string_view on gcc, c++14: https://godbolt.org/z/Tzd3q1fqx Closes #4391 PiperOrigin-RevId: 575853981 Change-Id: I7b782598add480eb69d4ca27ea4a4bf5f758f6a3
-rw-r--r--googlemock/include/gmock/gmock-matchers.h4
-rw-r--r--googlemock/test/gmock-matchers-comparisons_test.cc9
2 files changed, 11 insertions, 2 deletions
diff --git a/googlemock/include/gmock/gmock-matchers.h b/googlemock/include/gmock/gmock-matchers.h
index 0f677137..8052c74a 100644
--- a/googlemock/include/gmock/gmock-matchers.h
+++ b/googlemock/include/gmock/gmock-matchers.h
@@ -1048,7 +1048,7 @@ class StartsWithMatcher {
template <typename MatcheeStringType>
bool MatchAndExplain(const MatcheeStringType& s,
MatchResultListener* /* listener */) const {
- const StringType& s2(s);
+ const StringType s2(s);
return s2.length() >= prefix_.length() &&
s2.substr(0, prefix_.length()) == prefix_;
}
@@ -1102,7 +1102,7 @@ class EndsWithMatcher {
template <typename MatcheeStringType>
bool MatchAndExplain(const MatcheeStringType& s,
MatchResultListener* /* listener */) const {
- const StringType& s2(s);
+ const StringType s2(s);
return s2.length() >= suffix_.length() &&
s2.substr(s2.length() - suffix_.length()) == suffix_;
}
diff --git a/googlemock/test/gmock-matchers-comparisons_test.cc b/googlemock/test/gmock-matchers-comparisons_test.cc
index b2ce99e1..5b75b457 100644
--- a/googlemock/test/gmock-matchers-comparisons_test.cc
+++ b/googlemock/test/gmock-matchers-comparisons_test.cc
@@ -1769,6 +1769,15 @@ TEST(StartsWithTest, CanDescribeSelf) {
EXPECT_EQ("starts with \"Hi\"", Describe(m));
}
+TEST(StartsWithTest, WorksWithStringMatcherOnStringViewMatchee) {
+#if GTEST_INTERNAL_HAS_STRING_VIEW
+ EXPECT_THAT(internal::StringView("talk to me goose"),
+ StartsWith(std::string("talk")));
+#else
+ GTEST_SKIP() << "Not applicable without internal::StringView.";
+#endif // GTEST_INTERNAL_HAS_STRING_VIEW
+}
+
// Tests EndsWith(s).
TEST(EndsWithTest, MatchesStringWithGivenSuffix) {