//===-- TestFS.h ------------------------------------------------*- 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 // //===----------------------------------------------------------------------===// // // Allows setting up fake filesystem environments for tests. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_UNITTESTS_TESTFS_H #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_UNITTESTS_TESTFS_H #include "GlobalCompilationDatabase.h" #include "support/Path.h" #include "support/ThreadsafeFS.h" #include "llvm/ADT/IntrusiveRefCntPtr.h" #include "llvm/Support/Path.h" #include "llvm/Support/VirtualFileSystem.h" #include <optional> namespace clang { namespace clangd { // Builds a VFS that provides access to the provided files, plus temporary // directories. llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> buildTestFS(llvm::StringMap<std::string> const &Files, llvm::StringMap<time_t> const &Timestamps = { … }; // A VFS provider that returns TestFSes containing a provided set of files. class MockFS : public ThreadsafeFS { … }; // A Compilation database that returns a fixed set of compile flags. class MockCompilationDatabase : public GlobalCompilationDatabase { … }; // Returns an absolute (fake) test directory for this OS. const char *testRoot(); // Returns a suitable absolute path for this OS. std::string testPath(PathRef File, llvm::sys::path::Style = llvm::sys::path::Style::native); // unittest: is a scheme that refers to files relative to testRoot() // This anchor is used to force the linker to link in the generated object file // and thus register unittest: URI scheme plugin. extern volatile int UnittestSchemeAnchorSource; } // namespace clangd } // namespace clang #endif