| //===--- TestWorkspace.cpp - Utility for writing multi-file tests -*- C++-*===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "TestWorkspace.h" |
| #include "gtest/gtest.h" |
| |
| namespace clang { |
| namespace clangd { |
| |
| std::unique_ptr<SymbolIndex> TestWorkspace::index() { |
| auto Index = std::make_unique<FileIndex>(); |
| for (const auto &Input : Inputs) { |
| if (!Input.second.IsMainFile) |
| continue; |
| TU.Code = Input.second.Code; |
| TU.Filename = Input.first().str(); |
| TU.preamble([&](ASTContext &Ctx, std::shared_ptr<clang::Preprocessor> PP, |
| const CanonicalIncludes &CanonIncludes) { |
| Index->updatePreamble(testPath(Input.first()), "null", Ctx, PP, |
| CanonIncludes); |
| }); |
| ParsedAST MainAST = TU.build(); |
| Index->updateMain(testPath(Input.first()), MainAST); |
| } |
| return Index; |
| } |
| |
| Optional<ParsedAST> TestWorkspace::openFile(llvm::StringRef Filename) { |
| auto It = Inputs.find(Filename); |
| if (It == Inputs.end()) { |
| ADD_FAILURE() << "Accessing non-existing file: " << Filename; |
| return llvm::None; |
| } |
| TU.Code = It->second.Code; |
| TU.Filename = It->first().str(); |
| return TU.build(); |
| } |
| |
| void TestWorkspace::addInput(llvm::StringRef Filename, |
| const SourceFile &Input) { |
| Inputs.insert(std::make_pair(Filename, Input)); |
| TU.AdditionalFiles.insert(std::make_pair(Filename, Input.Code)); |
| } |
| } // namespace clangd |
| } // namespace clang |