Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/google/googletest.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDino Radakovic <dinor@google.com>2022-07-26 00:37:44 +0300
committerCopybara-Service <copybara-worker@google.com>2022-07-26 00:38:26 +0300
commitb1e9b6323a17002b8359fef338c57bc0437caf57 (patch)
tree09166083100b0f3bf853d9e7e74de71daf523cc6 /googlemock
parent7735334a46da480a749945c0f645155d90d73855 (diff)
Add IsEmpty overload for C-style strings
Fixes #3937 PiperOrigin-RevId: 463180144 Change-Id: I21b528acc4c3f3aba4234642be01fcead7fe7f00
Diffstat (limited to 'googlemock')
-rw-r--r--googlemock/include/gmock/gmock-more-matchers.h45
-rw-r--r--googlemock/test/gmock-matchers-comparisons_test.cc26
2 files changed, 64 insertions, 7 deletions
diff --git a/googlemock/include/gmock/gmock-more-matchers.h b/googlemock/include/gmock/gmock-more-matchers.h
index 47aaf984..d9a92107 100644
--- a/googlemock/include/gmock/gmock-more-matchers.h
+++ b/googlemock/include/gmock/gmock-more-matchers.h
@@ -40,6 +40,9 @@
#ifndef GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_MORE_MATCHERS_H_
#define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_MORE_MATCHERS_H_
+#include <ostream>
+#include <string>
+
#include "gmock/gmock-matchers.h"
namespace testing {
@@ -56,14 +59,42 @@ namespace testing {
#endif
#endif
-// Defines a matcher that matches an empty container. The container must
-// support both size() and empty(), which all STL-like containers provide.
-MATCHER(IsEmpty, negation ? "isn't empty" : "is empty") {
- if (arg.empty()) {
- return true;
+namespace internal {
+
+// Implements the polymorphic IsEmpty matcher, which
+// can be used as a Matcher<T> as long as T is either a container that defines
+// empty() and size() (e.g. std::vector or std::string), or a C-style string.
+class IsEmptyMatcher {
+ public:
+ // Matches anything that defines empty() and size().
+ template <typename MatcheeContainerType>
+ bool MatchAndExplain(const MatcheeContainerType& c,
+ MatchResultListener* listener) const {
+ if (c.empty()) {
+ return true;
+ }
+ *listener << "whose size is " << c.size();
+ return false;
+ }
+
+ // Matches C-style strings.
+ bool MatchAndExplain(const char* s, MatchResultListener* listener) const {
+ return MatchAndExplain(std::string(s), listener);
}
- *result_listener << "whose size is " << arg.size();
- return false;
+
+ // Describes what this matcher matches.
+ void DescribeTo(std::ostream* os) const { *os << "is empty"; }
+
+ void DescribeNegationTo(std::ostream* os) const { *os << "isn't empty"; }
+};
+
+} // namespace internal
+
+// Creates a polymorphic matcher that matches an empty container or C-style
+// string. The container must support both size() and empty(), which all
+// STL-like containers provide.
+inline PolymorphicMatcher<internal::IsEmptyMatcher> IsEmpty() {
+ return MakePolymorphicMatcher(internal::IsEmptyMatcher());
}
// Define a matcher that matches a value that evaluates in boolean
diff --git a/googlemock/test/gmock-matchers-comparisons_test.cc b/googlemock/test/gmock-matchers-comparisons_test.cc
index eb8f3f63..c90b0b4e 100644
--- a/googlemock/test/gmock-matchers-comparisons_test.cc
+++ b/googlemock/test/gmock-matchers-comparisons_test.cc
@@ -39,6 +39,8 @@
#pragma warning(disable : 4100)
#endif
+#include <vector>
+
#include "test/gmock-matchers_test.h"
namespace testing {
@@ -983,6 +985,30 @@ TEST(ComparisonBaseTest, WorksWithMoveOnly) {
helper.Call(MoveOnly(1));
}
+TEST(IsEmptyTest, MatchesContainer) {
+ const Matcher<std::vector<int>> m = IsEmpty();
+ std::vector<int> a = {};
+ std::vector<int> b = {1};
+ EXPECT_TRUE(m.Matches(a));
+ EXPECT_FALSE(m.Matches(b));
+}
+
+TEST(IsEmptyTest, MatchesStdString) {
+ const Matcher<std::string> m = IsEmpty();
+ std::string a = "z";
+ std::string b = "";
+ EXPECT_FALSE(m.Matches(a));
+ EXPECT_TRUE(m.Matches(b));
+}
+
+TEST(IsEmptyTest, MatchesCString) {
+ const Matcher<const char*> m = IsEmpty();
+ const char a[] = "";
+ const char b[] = "x";
+ EXPECT_TRUE(m.Matches(a));
+ EXPECT_FALSE(m.Matches(b));
+}
+
// Tests that IsNull() matches any NULL pointer of any type.
TEST(IsNullTest, MatchesNullPointer) {
Matcher<int*> m1 = IsNull();