diff options
| author | Sam McCall <sam.mccall@gmail.com> | 2019-04-29 08:44:01 +0000 |
|---|---|---|
| committer | Sam McCall <sam.mccall@gmail.com> | 2019-04-29 08:44:01 +0000 |
| commit | b804eef09052cf40e79aa2ed8a23f2f39e2dda1b (patch) | |
| tree | 7315d3e6ad44c8898b9952d3fdaeb523ec47bf8b /clang-tools-extra/unittests/clangd/TestFS.cpp | |
| parent | e62915bcc1a1f40e9846f58388c2b32bee76000c (diff) | |
| download | bcm5719-llvm-b804eef09052cf40e79aa2ed8a23f2f39e2dda1b.tar.gz bcm5719-llvm-b804eef09052cf40e79aa2ed8a23f2f39e2dda1b.zip | |
[clangd] Move clangd tests to clangd directory. check-clangd is no longer part of check-clang-tools.
Summary:
Motivation:
- this layout is a pain to work with
- without a common root, it's painful to express things like "disable clangd" (D61122)
- CMake/lit configs are a maintenance hazard, and the more the one-off hacks
for various tools are entangled, the more we see apathy and non-ownership.
This attempts to use the bare-minimum configuration needed (while still
supporting the difficult cases: windows, standalone clang build, dynamic libs).
In particular the lit.cfg.py and lit.site.cfg.py.in are merged into lit.cfg.in.
The logic in these files is now minimal.
(Much of clang-tools-extra's lit configs can probably be cleaned up by reusing
lit.llvm.llvm_config.use_clang(), and every llvm project does its own version of
LDPATH mangling. I haven't attempted to fix any of those).
Docs are still in clang-tools-extra/docs, I don't have any plans to touch those.
Reviewers: gribozavr
Subscribers: mgorny, javed.absar, MaskRay, jkorous, arphaman, kadircet, jfb, cfe-commits, ilya-biryukov, thakis
Tags: #clang
Differential Revision: https://reviews.llvm.org/D61187
llvm-svn: 359424
Diffstat (limited to 'clang-tools-extra/unittests/clangd/TestFS.cpp')
| -rw-r--r-- | clang-tools-extra/unittests/clangd/TestFS.cpp | 129 |
1 files changed, 0 insertions, 129 deletions
diff --git a/clang-tools-extra/unittests/clangd/TestFS.cpp b/clang-tools-extra/unittests/clangd/TestFS.cpp deleted file mode 100644 index c5b2613f759..00000000000 --- a/clang-tools-extra/unittests/clangd/TestFS.cpp +++ /dev/null @@ -1,129 +0,0 @@ -//===-- TestFS.cpp ----------------------------------------------*- 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 "TestFS.h" -#include "URI.h" -#include "llvm/ADT/StringRef.h" -#include "llvm/Support/Errc.h" -#include "llvm/Support/Path.h" - -namespace clang { -namespace clangd { - -llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> -buildTestFS(llvm::StringMap<std::string> const &Files, - llvm::StringMap<time_t> const &Timestamps) { - llvm::IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> MemFS( - new llvm::vfs::InMemoryFileSystem); - MemFS->setCurrentWorkingDirectory(testRoot()); - for (auto &FileAndContents : Files) { - llvm::StringRef File = FileAndContents.first(); - MemFS->addFile( - File, Timestamps.lookup(File), - llvm::MemoryBuffer::getMemBufferCopy(FileAndContents.second, File)); - } - return MemFS; -} - -MockCompilationDatabase::MockCompilationDatabase(llvm::StringRef Directory, - llvm::StringRef RelPathPrefix) - : ExtraClangFlags({"-ffreestanding"}), Directory(Directory), - RelPathPrefix(RelPathPrefix) { - // -ffreestanding avoids implicit stdc-predef.h. -} - -llvm::Optional<tooling::CompileCommand> -MockCompilationDatabase::getCompileCommand(PathRef File, - ProjectInfo *Project) const { - if (ExtraClangFlags.empty()) - return None; - - auto FileName = llvm::sys::path::filename(File); - - // Build the compile command. - auto CommandLine = ExtraClangFlags; - CommandLine.insert(CommandLine.begin(), "clang"); - if (RelPathPrefix.empty()) { - // Use the absolute path in the compile command. - CommandLine.push_back(File); - } else { - // Build a relative path using RelPathPrefix. - llvm::SmallString<32> RelativeFilePath(RelPathPrefix); - llvm::sys::path::append(RelativeFilePath, FileName); - CommandLine.push_back(RelativeFilePath.str()); - } - - if (Project) - Project->SourceRoot = Directory; - return {tooling::CompileCommand(Directory != llvm::StringRef() - ? Directory - : llvm::sys::path::parent_path(File), - FileName, std::move(CommandLine), "")}; -} - -const char *testRoot() { -#ifdef _WIN32 - return "C:\\clangd-test"; -#else - return "/clangd-test"; -#endif -} - -std::string testPath(PathRef File) { - assert(llvm::sys::path::is_relative(File) && "FileName should be relative"); - - llvm::SmallString<32> NativeFile = File; - llvm::sys::path::native(NativeFile); - llvm::SmallString<32> Path; - llvm::sys::path::append(Path, testRoot(), NativeFile); - return Path.str(); -} - -/// unittest: is a scheme that refers to files relative to testRoot(). -/// URI body is a path relative to testRoot() e.g. unittest:///x.h for -/// /clangd-test/x.h. -class TestScheme : public URIScheme { -public: - static const char *Scheme; - - llvm::Expected<std::string> - getAbsolutePath(llvm::StringRef /*Authority*/, llvm::StringRef Body, - llvm::StringRef HintPath) const override { - if (!HintPath.startswith(testRoot())) - return llvm::make_error<llvm::StringError>( - "Hint path doesn't start with test root: " + HintPath, - llvm::inconvertibleErrorCode()); - if (!Body.consume_front("/")) - return llvm::make_error<llvm::StringError>( - "Body of an unittest: URI must start with '/'", - llvm::inconvertibleErrorCode()); - llvm::SmallString<16> Path(Body.begin(), Body.end()); - llvm::sys::path::native(Path); - return testPath(Path); - } - - llvm::Expected<URI> - uriFromAbsolutePath(llvm::StringRef AbsolutePath) const override { - llvm::StringRef Body = AbsolutePath; - if (!Body.consume_front(testRoot())) - return llvm::make_error<llvm::StringError>( - AbsolutePath + "does not start with " + testRoot(), - llvm::inconvertibleErrorCode()); - - return URI(Scheme, /*Authority=*/"", - llvm::sys::path::convert_to_slash(Body)); - } -}; - -const char *TestScheme::Scheme = "unittest"; - -static URISchemeRegistry::Add<TestScheme> X(TestScheme::Scheme, "Test schema"); - -volatile int UnittestSchemeAnchorSource = 0; - -} // namespace clangd -} // namespace clang |

