13#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_UNITTESTS_MATCHERS_H
14#define LLVM_CLANG_TOOLS_EXTRA_CLANGD_UNITTESTS_MATCHERS_H
16#include "gmock/gmock.h"
20using ::testing::Matcher;
24#define EXPECT_IFF(condition, value, matcher) \
27 EXPECT_THAT(value, matcher); \
29 EXPECT_THAT(value, ::testing::Not(matcher)); \
38 :
public ::testing::MatcherInterface<const std::vector<T> &> {
39 std::vector<Matcher<T>> Matchers;
45 *
OS <<
"Contains the subsequence [";
47 for (
const auto &
M : Matchers) {
56 ::testing::MatchResultListener *L)
const override {
57 std::vector<int> Matches(Matchers.size());
59 for (
size_t J = 0; I < Matchers.size() && J < V.size(); ++J)
60 if (Matchers[I].Matches(V[J]))
62 if (I == Matchers.size())
64 if (L->IsInterested()) {
66 for (
size_t K = 0;
K < I; ++
K) {
68 Matchers[
K].DescribeTo(L->stream());
69 *L <<
" ==> " << ::testing::PrintToString(V[Matches[
K]]);
72 Matchers[I].DescribeTo(L->stream());
73 *L <<
" ==> no subsequent match";
84 std::tuple<
M...> Matchers;
88 : Matchers(std::make_tuple(std::forward<
M>(
Args)...)) {}
90 template <
typename T>
operator Matcher<const std::vector<T> &>()
const {
92 TypedMatchers<T>(std::index_sequence_for<M...>{})));
96 template <
typename T,
size_t... I>
97 std::vector<Matcher<T>> TypedMatchers(std::index_sequence<I...>)
const {
98 return {std::get<I>(Matchers)...};
105template <
typename...
Args>
113#error "Refusing to redefine EXPECT_ERROR"
118#define EXPECT_ERROR(expectedValue) \
120 auto &&ComputedValue = (expectedValue); \
121 if (ComputedValue) { \
122 ADD_FAILURE() << "expected an error from " << #expectedValue \
124 << ::testing::PrintToString(*ComputedValue); \
127 llvm::consumeError(ComputedValue.takeError()); \
const google::protobuf::Message & M
PolySubsequenceMatcher(M &&... Args)
SubsequenceMatcher(std::vector< Matcher< T > > M)
bool MatchAndExplain(const std::vector< T > &V, ::testing::MatchResultListener *L) const override
void DescribeTo(std::ostream *OS) const override
PolySubsequenceMatcher< Args... > HasSubsequence(Args &&... M)
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//