brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · eadf03b Raw
85 lines · cpp
1//===-- ProjectAwareIndexTests.cpp  -------------------*- C++ -*-----------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "Config.h"10#include "TestIndex.h"11#include "index/Index.h"12#include "index/MemIndex.h"13#include "index/ProjectAware.h"14#include "index/Ref.h"15#include "index/Relation.h"16#include "support/Context.h"17#include "support/Threading.h"18#include "llvm/ADT/StringRef.h"19#include "gmock/gmock.h"20#include "gtest/gtest.h"21#include <memory>22#include <utility>23 24namespace clang {25namespace clangd {26using testing::ElementsAre;27using testing::IsEmpty;28 29std::unique_ptr<SymbolIndex> createIndex() {30  SymbolSlab::Builder Builder;31  Builder.insert(symbol("1"));32  return MemIndex::build(std::move(Builder).build(), RefSlab(), RelationSlab());33}34 35TEST(ProjectAware, Test) {36  IndexFactory Gen = [](const Config::ExternalIndexSpec &, AsyncTaskRunner *) {37    return createIndex();38  };39 40  auto Idx = createProjectAwareIndex(std::move(Gen), true);41  FuzzyFindRequest Req;42  Req.Query = "1";43  Req.AnyScope = true;44 45  EXPECT_THAT(match(*Idx, Req), IsEmpty());46 47  Config C;48  C.Index.External.Kind = Config::ExternalIndexSpec::File;49  C.Index.External.Location = "test";50  WithContextValue With(Config::Key, std::move(C));51  EXPECT_THAT(match(*Idx, Req), ElementsAre("1"));52}53 54TEST(ProjectAware, CreatedOnce) {55  unsigned InvocationCount = 0;56  IndexFactory Gen = [&](const Config::ExternalIndexSpec &, AsyncTaskRunner *) {57    ++InvocationCount;58    return createIndex();59  };60 61  auto Idx = createProjectAwareIndex(std::move(Gen), true);62  // No invocation at start.63  EXPECT_EQ(InvocationCount, 0U);64  FuzzyFindRequest Req;65  Req.Query = "1";66  Req.AnyScope = true;67 68  // Cannot invoke without proper config.69  match(*Idx, Req);70  EXPECT_EQ(InvocationCount, 0U);71 72  Config C;73  C.Index.External.Kind = Config::ExternalIndexSpec::File;74  C.Index.External.Location = "test";75  WithContextValue With(Config::Key, std::move(C));76  match(*Idx, Req);77  // Now it should be created.78  EXPECT_EQ(InvocationCount, 1U);79  match(*Idx, Req);80  // It is cached afterwards.81  EXPECT_EQ(InvocationCount, 1U);82}83} // namespace clangd84} // namespace clang85