59 lines · c
1//===--- TestWorkspace.h - Utility for writing multi-file tests --*- 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// TestWorkspace builds on TestTU to provide a way to write tests involving10// several related files with inclusion relationships between them.11//12// The tests can exercise both index and AST based operations.13//14//===---------------------------------------------------------------------===//15 16#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_UNITTESTS_TESTWORKSPACE_H17#define LLVM_CLANG_TOOLS_EXTRA_CLANGD_UNITTESTS_TESTWORKSPACE_H18 19#include "TestTU.h"20#include "index/Index.h"21#include "llvm/ADT/StringRef.h"22#include <optional>23#include <string>24#include <vector>25 26namespace clang {27namespace clangd {28 29class TestWorkspace {30public:31 // The difference between addSource() and addMainFile() is that only main32 // files will be indexed.33 void addSource(llvm::StringRef Filename, llvm::StringRef Code) {34 addInput(Filename.str(), {Code.str(), /*IsMainFile=*/false});35 }36 void addMainFile(llvm::StringRef Filename, llvm::StringRef Code) {37 addInput(Filename.str(), {Code.str(), /*IsMainFile=*/true});38 }39 40 std::unique_ptr<SymbolIndex> index();41 42 std::optional<ParsedAST> openFile(llvm::StringRef Filename);43 44private:45 struct SourceFile {46 std::string Code;47 bool IsMainFile = false;48 };49 llvm::StringMap<SourceFile> Inputs;50 TestTU TU;51 52 void addInput(llvm::StringRef Filename, const SourceFile &Input);53};54 55} // namespace clangd56} // namespace clang57 58#endif // LLVM_CLANG_TOOLS_EXTRA_CLANGD_UNITTESTS_TESTWORKSPACE_H59