[clang-tools-extra] bc87a53 - [clangd] Remove clangd's HasValue GMock matcher (#121309)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 1 22:42:24 PST 2025
Author: Nathan Ridge
Date: 2025-01-02T01:42:21-05:00
New Revision: bc87a537d9b8117cfd63d5d9b798d6017a99097f
URL: https://github.com/llvm/llvm-project/commit/bc87a537d9b8117cfd63d5d9b798d6017a99097f
DIFF: https://github.com/llvm/llvm-project/commit/bc87a537d9b8117cfd63d5d9b798d6017a99097f.diff
LOG: [clangd] Remove clangd's HasValue GMock matcher (#121309)
An equivalent matcher under the name Optional has since been added
upstream to GMock.
Fixes https://github.com/llvm/llvm-project/issues/121308
Added:
Modified:
clang-tools-extra/clangd/unittests/Matchers.h
clang-tools-extra/clangd/unittests/TypeHierarchyTests.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clangd/unittests/Matchers.h b/clang-tools-extra/clangd/unittests/Matchers.h
index 0fbd93b2e68825..17d18dd9b85b65 100644
--- a/clang-tools-extra/clangd/unittests/Matchers.h
+++ b/clang-tools-extra/clangd/unittests/Matchers.h
@@ -127,74 +127,6 @@ PolySubsequenceMatcher<Args...> HasSubsequence(Args &&... M) {
llvm::consumeError(ComputedValue.takeError()); \
} while (false)
-// Implements the HasValue(m) matcher for matching an Optional whose
-// value matches matcher m.
-template <typename InnerMatcher> class OptionalMatcher {
-public:
- explicit OptionalMatcher(const InnerMatcher &matcher) : matcher_(matcher) {}
- OptionalMatcher(const OptionalMatcher&) = default;
- OptionalMatcher &operator=(const OptionalMatcher&) = delete;
-
- // This type conversion operator template allows Optional(m) to be
- // used as a matcher for any Optional type whose value type is
- // compatible with the inner matcher.
- //
- // The reason we do this instead of relying on
- // MakePolymorphicMatcher() is that the latter is not flexible
- // enough for implementing the DescribeTo() method of Optional().
- template <typename Optional> operator Matcher<Optional>() const {
- return MakeMatcher(new Impl<Optional>(matcher_));
- }
-
-private:
- // The monomorphic implementation that works for a particular optional type.
- template <typename Optional>
- class Impl : public ::testing::MatcherInterface<Optional> {
- public:
- using Value = typename std::remove_const<
- typename std::remove_reference<Optional>::type>::type::value_type;
-
- explicit Impl(const InnerMatcher &matcher)
- : matcher_(::testing::MatcherCast<const Value &>(matcher)) {}
-
- Impl(const Impl&) = default;
- Impl &operator=(const Impl&) = delete;
-
- virtual void DescribeTo(::std::ostream *os) const {
- *os << "has a value that ";
- matcher_.DescribeTo(os);
- }
-
- virtual void DescribeNegationTo(::std::ostream *os) const {
- *os << "does not have a value that ";
- matcher_.DescribeTo(os);
- }
-
- virtual bool
- MatchAndExplain(Optional optional,
- ::testing::MatchResultListener *listener) const {
- if (!optional)
- return false;
-
- *listener << "which has a value ";
- return MatchPrintAndExplain(*optional, matcher_, listener);
- }
-
- private:
- const Matcher<const Value &> matcher_;
- };
-
- const InnerMatcher matcher_;
-};
-
-// Creates a matcher that matches an Optional that has a value
-// that matches inner_matcher.
-template <typename InnerMatcher>
-inline OptionalMatcher<InnerMatcher>
-HasValue(const InnerMatcher &inner_matcher) {
- return OptionalMatcher<InnerMatcher>(inner_matcher);
-}
-
} // namespace clangd
} // namespace clang
#endif
diff --git a/clang-tools-extra/clangd/unittests/TypeHierarchyTests.cpp b/clang-tools-extra/clangd/unittests/TypeHierarchyTests.cpp
index 15158d8a45ca8b..406a842f5a0081 100644
--- a/clang-tools-extra/clangd/unittests/TypeHierarchyTests.cpp
+++ b/clang-tools-extra/clangd/unittests/TypeHierarchyTests.cpp
@@ -28,6 +28,7 @@ using ::testing::ElementsAre;
using ::testing::Field;
using ::testing::IsEmpty;
using ::testing::Matcher;
+using ::testing::Optional;
using ::testing::SizeIs;
using ::testing::UnorderedElementsAre;
@@ -38,12 +39,12 @@ MATCHER_P(selectionRangeIs, R, "") { return arg.selectionRange == R; }
template <class... ParentMatchers>
::testing::Matcher<TypeHierarchyItem> parents(ParentMatchers... ParentsM) {
return Field(&TypeHierarchyItem::parents,
- HasValue(UnorderedElementsAre(ParentsM...)));
+ Optional(UnorderedElementsAre(ParentsM...)));
}
template <class... ChildMatchers>
::testing::Matcher<TypeHierarchyItem> children(ChildMatchers... ChildrenM) {
return Field(&TypeHierarchyItem::children,
- HasValue(UnorderedElementsAre(ChildrenM...)));
+ Optional(UnorderedElementsAre(ChildrenM...)));
}
// Note: "not resolved" is
diff erent from "resolved but empty"!
MATCHER(parentsNotResolved, "") { return !arg.parents; }
@@ -790,7 +791,7 @@ struct Child : Parent1, Parent2 {};
Children,
UnorderedElementsAre(
AllOf(withName("Child"),
- withResolveParents(HasValue(UnorderedElementsAre(withResolveID(
+ withResolveParents(Optional(UnorderedElementsAre(withResolveID(
getSymbolID(&findDecl(AST, "Parent1")).str())))))));
}
@@ -810,9 +811,9 @@ struct Chil^d : Parent {};
ASSERT_THAT(Result, SizeIs(1));
auto Parents = superTypes(Result.front(), Index.get());
- EXPECT_THAT(Parents, HasValue(UnorderedElementsAre(
+ EXPECT_THAT(Parents, Optional(UnorderedElementsAre(
AllOf(withName("Parent"),
- withResolveParents(HasValue(IsEmpty()))))));
+ withResolveParents(Optional(IsEmpty()))))));
}
} // namespace
} // namespace clangd
More information about the cfe-commits
mailing list