blob: 84e61323ee5de6c27b6e11154e8ac493f14448b7 [file] [log] [blame]
//===--- 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