[clang-tools-extra] r359424 - [clangd] Move clangd tests to clangd directory. check-clangd is no longer part of check-clang-tools.

Sam McCall via cfe-commits cfe-commits at lists.llvm.org
Mon Apr 29 01:44:02 PDT 2019


Author: sammccall
Date: Mon Apr 29 01:44:01 2019
New Revision: 359424

URL: http://llvm.org/viewvc/llvm-project?rev=359424&view=rev
Log:
[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

Added:
    clang-tools-extra/trunk/clangd/test/
    clang-tools-extra/trunk/clangd/test/CMakeLists.txt
    clang-tools-extra/trunk/clangd/test/Inputs/
    clang-tools-extra/trunk/clangd/test/Inputs/BenchmarkHeader.h
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/Inputs/BenchmarkHeader.h
    clang-tools-extra/trunk/clangd/test/Inputs/BenchmarkSource.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/Inputs/BenchmarkSource.cpp
    clang-tools-extra/trunk/clangd/test/Inputs/background-index/
    clang-tools-extra/trunk/clangd/test/Inputs/background-index/compile_commands.json
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/Inputs/background-index/compile_commands.json
    clang-tools-extra/trunk/clangd/test/Inputs/background-index/definition.jsonrpc
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/Inputs/background-index/definition.jsonrpc
    clang-tools-extra/trunk/clangd/test/Inputs/background-index/foo.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/Inputs/background-index/foo.cpp
    clang-tools-extra/trunk/clangd/test/Inputs/background-index/foo.h
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/Inputs/background-index/foo.h
    clang-tools-extra/trunk/clangd/test/Inputs/requests.json
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/Inputs/requests.json
    clang-tools-extra/trunk/clangd/test/Inputs/symbols.test.yaml
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/Inputs/symbols.test.yaml
    clang-tools-extra/trunk/clangd/test/background-index.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/background-index.test
    clang-tools-extra/trunk/clangd/test/compile-commands-path-in-initialize.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/compile-commands-path-in-initialize.test
    clang-tools-extra/trunk/clangd/test/completion-auto-trigger.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/completion-auto-trigger.test
    clang-tools-extra/trunk/clangd/test/completion-snippets.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/completion-snippets.test
    clang-tools-extra/trunk/clangd/test/completion.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/completion.test
    clang-tools-extra/trunk/clangd/test/crash-non-added-files.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/crash-non-added-files.test
    clang-tools-extra/trunk/clangd/test/delimited-input-comment-at-the-end.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/delimited-input-comment-at-the-end.test
    clang-tools-extra/trunk/clangd/test/diagnostic-category.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/diagnostic-category.test
    clang-tools-extra/trunk/clangd/test/diagnostics-notes.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/diagnostics-notes.test
    clang-tools-extra/trunk/clangd/test/diagnostics.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/diagnostics.test
    clang-tools-extra/trunk/clangd/test/did-change-configuration-params.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/did-change-configuration-params.test
    clang-tools-extra/trunk/clangd/test/execute-command.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/execute-command.test
    clang-tools-extra/trunk/clangd/test/exit-with-shutdown.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/exit-with-shutdown.test
    clang-tools-extra/trunk/clangd/test/exit-without-shutdown.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/exit-without-shutdown.test
    clang-tools-extra/trunk/clangd/test/filestatus.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/filestatus.test
    clang-tools-extra/trunk/clangd/test/fixits-codeaction.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/fixits-codeaction.test
    clang-tools-extra/trunk/clangd/test/fixits-command.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/fixits-command.test
    clang-tools-extra/trunk/clangd/test/fixits-embed-in-diagnostic.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/fixits-embed-in-diagnostic.test
    clang-tools-extra/trunk/clangd/test/formatting.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/formatting.test
    clang-tools-extra/trunk/clangd/test/hover.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/hover.test
    clang-tools-extra/trunk/clangd/test/index-tools.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/index-tools.test
    clang-tools-extra/trunk/clangd/test/initialize-params-invalid.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/initialize-params-invalid.test
    clang-tools-extra/trunk/clangd/test/initialize-params.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/initialize-params.test
    clang-tools-extra/trunk/clangd/test/initialize-sequence.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/initialize-sequence.test
    clang-tools-extra/trunk/clangd/test/input-mirror.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/input-mirror.test
    clang-tools-extra/trunk/clangd/test/lit.cfg.in
    clang-tools-extra/trunk/clangd/test/lit.local.cfg
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/lit.local.cfg
    clang-tools-extra/trunk/clangd/test/protocol.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/protocol.test
    clang-tools-extra/trunk/clangd/test/references.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/references.test
    clang-tools-extra/trunk/clangd/test/rename.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/rename.test
    clang-tools-extra/trunk/clangd/test/signature-help.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/signature-help.test
    clang-tools-extra/trunk/clangd/test/spaces-in-delimited-input.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/spaces-in-delimited-input.test
    clang-tools-extra/trunk/clangd/test/symbol-info.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/symbol-info.test
    clang-tools-extra/trunk/clangd/test/symbols.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/symbols.test
    clang-tools-extra/trunk/clangd/test/test-uri-posix.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/test-uri-posix.test
    clang-tools-extra/trunk/clangd/test/test-uri-windows.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/test-uri-windows.test
    clang-tools-extra/trunk/clangd/test/textdocument-didchange-fail.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/textdocument-didchange-fail.test
    clang-tools-extra/trunk/clangd/test/too_large.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/too_large.test
    clang-tools-extra/trunk/clangd/test/trace.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/trace.test
    clang-tools-extra/trunk/clangd/test/tweaks-format.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/tweaks-format.test
    clang-tools-extra/trunk/clangd/test/type-hierarchy.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/type-hierarchy.test
    clang-tools-extra/trunk/clangd/test/unsupported-method.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/unsupported-method.test
    clang-tools-extra/trunk/clangd/test/utf8.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/utf8.test
    clang-tools-extra/trunk/clangd/test/xpc/
    clang-tools-extra/trunk/clangd/test/xpc/initialize.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/xpc/initialize.test
    clang-tools-extra/trunk/clangd/test/xrefs.test
      - copied, changed from r359329, clang-tools-extra/trunk/test/clangd/xrefs.test
    clang-tools-extra/trunk/clangd/unittests/
    clang-tools-extra/trunk/clangd/unittests/Annotations.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/Annotations.cpp
    clang-tools-extra/trunk/clangd/unittests/Annotations.h
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/Annotations.h
    clang-tools-extra/trunk/clangd/unittests/BackgroundIndexTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/BackgroundIndexTests.cpp
    clang-tools-extra/trunk/clangd/unittests/CMakeLists.txt
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/CMakeLists.txt
    clang-tools-extra/trunk/clangd/unittests/CancellationTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/CancellationTests.cpp
    clang-tools-extra/trunk/clangd/unittests/ClangdTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/ClangdTests.cpp
    clang-tools-extra/trunk/clangd/unittests/ClangdUnitTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/ClangdUnitTests.cpp
    clang-tools-extra/trunk/clangd/unittests/CodeCompleteTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp
    clang-tools-extra/trunk/clangd/unittests/CodeCompletionStringsTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/CodeCompletionStringsTests.cpp
    clang-tools-extra/trunk/clangd/unittests/ContextTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/ContextTests.cpp
    clang-tools-extra/trunk/clangd/unittests/DexTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/DexTests.cpp
    clang-tools-extra/trunk/clangd/unittests/DiagnosticsTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/DiagnosticsTests.cpp
    clang-tools-extra/trunk/clangd/unittests/DraftStoreTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/DraftStoreTests.cpp
    clang-tools-extra/trunk/clangd/unittests/ExpectedTypeTest.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/ExpectedTypeTest.cpp
    clang-tools-extra/trunk/clangd/unittests/FSTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/FSTests.cpp
    clang-tools-extra/trunk/clangd/unittests/FileDistanceTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/FileDistanceTests.cpp
    clang-tools-extra/trunk/clangd/unittests/FileIndexTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/FileIndexTests.cpp
    clang-tools-extra/trunk/clangd/unittests/FindSymbolsTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/FindSymbolsTests.cpp
    clang-tools-extra/trunk/clangd/unittests/FunctionTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/FunctionTests.cpp
    clang-tools-extra/trunk/clangd/unittests/FuzzyMatchTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/FuzzyMatchTests.cpp
    clang-tools-extra/trunk/clangd/unittests/GlobalCompilationDatabaseTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/GlobalCompilationDatabaseTests.cpp
    clang-tools-extra/trunk/clangd/unittests/HeadersTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/HeadersTests.cpp
    clang-tools-extra/trunk/clangd/unittests/IndexActionTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/IndexActionTests.cpp
    clang-tools-extra/trunk/clangd/unittests/IndexTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/IndexTests.cpp
    clang-tools-extra/trunk/clangd/unittests/JSONTransportTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/JSONTransportTests.cpp
    clang-tools-extra/trunk/clangd/unittests/Matchers.h
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/Matchers.h
    clang-tools-extra/trunk/clangd/unittests/PrintASTTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/PrintASTTests.cpp
    clang-tools-extra/trunk/clangd/unittests/QualityTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/QualityTests.cpp
    clang-tools-extra/trunk/clangd/unittests/RIFFTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/RIFFTests.cpp
    clang-tools-extra/trunk/clangd/unittests/SelectionTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/SelectionTests.cpp
    clang-tools-extra/trunk/clangd/unittests/SerializationTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/SerializationTests.cpp
    clang-tools-extra/trunk/clangd/unittests/SourceCodeTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/SourceCodeTests.cpp
    clang-tools-extra/trunk/clangd/unittests/SymbolCollectorTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/SymbolCollectorTests.cpp
    clang-tools-extra/trunk/clangd/unittests/SymbolInfoTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/SymbolInfoTests.cpp
    clang-tools-extra/trunk/clangd/unittests/SyncAPI.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/SyncAPI.cpp
    clang-tools-extra/trunk/clangd/unittests/SyncAPI.h
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/SyncAPI.h
    clang-tools-extra/trunk/clangd/unittests/TUSchedulerTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/TUSchedulerTests.cpp
    clang-tools-extra/trunk/clangd/unittests/TestFS.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/TestFS.cpp
    clang-tools-extra/trunk/clangd/unittests/TestFS.h
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/TestFS.h
    clang-tools-extra/trunk/clangd/unittests/TestIndex.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/TestIndex.cpp
    clang-tools-extra/trunk/clangd/unittests/TestIndex.h
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/TestIndex.h
    clang-tools-extra/trunk/clangd/unittests/TestScheme.h
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/TestScheme.h
    clang-tools-extra/trunk/clangd/unittests/TestTU.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/TestTU.cpp
    clang-tools-extra/trunk/clangd/unittests/TestTU.h
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/TestTU.h
    clang-tools-extra/trunk/clangd/unittests/ThreadingTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/ThreadingTests.cpp
    clang-tools-extra/trunk/clangd/unittests/TraceTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/TraceTests.cpp
    clang-tools-extra/trunk/clangd/unittests/TweakTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/TweakTests.cpp
    clang-tools-extra/trunk/clangd/unittests/TypeHierarchyTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/TypeHierarchyTests.cpp
    clang-tools-extra/trunk/clangd/unittests/URITests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/URITests.cpp
    clang-tools-extra/trunk/clangd/unittests/XRefsTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/XRefsTests.cpp
    clang-tools-extra/trunk/clangd/unittests/lit.cfg.in
    clang-tools-extra/trunk/clangd/unittests/xpc/
    clang-tools-extra/trunk/clangd/unittests/xpc/CMakeLists.txt
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/xpc/CMakeLists.txt
    clang-tools-extra/trunk/clangd/unittests/xpc/ConversionTests.cpp
      - copied, changed from r359329, clang-tools-extra/trunk/unittests/clangd/xpc/ConversionTests.cpp
    clang-tools-extra/trunk/test/clangd/Unit/
    clang-tools-extra/trunk/test/clangd/Unit/lit.site.cfg.py.in
Removed:
    clang-tools-extra/trunk/test/clangd/Inputs/BenchmarkHeader.h
    clang-tools-extra/trunk/test/clangd/Inputs/BenchmarkSource.cpp
    clang-tools-extra/trunk/test/clangd/Inputs/background-index/compile_commands.json
    clang-tools-extra/trunk/test/clangd/Inputs/background-index/definition.jsonrpc
    clang-tools-extra/trunk/test/clangd/Inputs/background-index/foo.cpp
    clang-tools-extra/trunk/test/clangd/Inputs/background-index/foo.h
    clang-tools-extra/trunk/test/clangd/Inputs/requests.json
    clang-tools-extra/trunk/test/clangd/Inputs/symbols.test.yaml
    clang-tools-extra/trunk/test/clangd/background-index.test
    clang-tools-extra/trunk/test/clangd/compile-commands-path-in-initialize.test
    clang-tools-extra/trunk/test/clangd/completion-auto-trigger.test
    clang-tools-extra/trunk/test/clangd/completion-snippets.test
    clang-tools-extra/trunk/test/clangd/completion.test
    clang-tools-extra/trunk/test/clangd/crash-non-added-files.test
    clang-tools-extra/trunk/test/clangd/delimited-input-comment-at-the-end.test
    clang-tools-extra/trunk/test/clangd/diagnostic-category.test
    clang-tools-extra/trunk/test/clangd/diagnostics-notes.test
    clang-tools-extra/trunk/test/clangd/diagnostics.test
    clang-tools-extra/trunk/test/clangd/did-change-configuration-params.test
    clang-tools-extra/trunk/test/clangd/execute-command.test
    clang-tools-extra/trunk/test/clangd/exit-with-shutdown.test
    clang-tools-extra/trunk/test/clangd/exit-without-shutdown.test
    clang-tools-extra/trunk/test/clangd/filestatus.test
    clang-tools-extra/trunk/test/clangd/fixits-codeaction.test
    clang-tools-extra/trunk/test/clangd/fixits-command.test
    clang-tools-extra/trunk/test/clangd/fixits-embed-in-diagnostic.test
    clang-tools-extra/trunk/test/clangd/formatting.test
    clang-tools-extra/trunk/test/clangd/hover.test
    clang-tools-extra/trunk/test/clangd/index-tools.test
    clang-tools-extra/trunk/test/clangd/initialize-params-invalid.test
    clang-tools-extra/trunk/test/clangd/initialize-params.test
    clang-tools-extra/trunk/test/clangd/initialize-sequence.test
    clang-tools-extra/trunk/test/clangd/input-mirror.test
    clang-tools-extra/trunk/test/clangd/lit.local.cfg
    clang-tools-extra/trunk/test/clangd/protocol.test
    clang-tools-extra/trunk/test/clangd/references.test
    clang-tools-extra/trunk/test/clangd/rename.test
    clang-tools-extra/trunk/test/clangd/signature-help.test
    clang-tools-extra/trunk/test/clangd/spaces-in-delimited-input.test
    clang-tools-extra/trunk/test/clangd/symbol-info.test
    clang-tools-extra/trunk/test/clangd/symbols.test
    clang-tools-extra/trunk/test/clangd/test-uri-posix.test
    clang-tools-extra/trunk/test/clangd/test-uri-windows.test
    clang-tools-extra/trunk/test/clangd/textdocument-didchange-fail.test
    clang-tools-extra/trunk/test/clangd/too_large.test
    clang-tools-extra/trunk/test/clangd/trace.test
    clang-tools-extra/trunk/test/clangd/tweaks-format.test
    clang-tools-extra/trunk/test/clangd/type-hierarchy.test
    clang-tools-extra/trunk/test/clangd/unsupported-method.test
    clang-tools-extra/trunk/test/clangd/utf8.test
    clang-tools-extra/trunk/test/clangd/xpc/initialize.test
    clang-tools-extra/trunk/test/clangd/xrefs.test
    clang-tools-extra/trunk/unittests/clangd/Annotations.cpp
    clang-tools-extra/trunk/unittests/clangd/Annotations.h
    clang-tools-extra/trunk/unittests/clangd/BackgroundIndexTests.cpp
    clang-tools-extra/trunk/unittests/clangd/CMakeLists.txt
    clang-tools-extra/trunk/unittests/clangd/CancellationTests.cpp
    clang-tools-extra/trunk/unittests/clangd/ClangdTests.cpp
    clang-tools-extra/trunk/unittests/clangd/ClangdUnitTests.cpp
    clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp
    clang-tools-extra/trunk/unittests/clangd/CodeCompletionStringsTests.cpp
    clang-tools-extra/trunk/unittests/clangd/ContextTests.cpp
    clang-tools-extra/trunk/unittests/clangd/DexTests.cpp
    clang-tools-extra/trunk/unittests/clangd/DiagnosticsTests.cpp
    clang-tools-extra/trunk/unittests/clangd/DraftStoreTests.cpp
    clang-tools-extra/trunk/unittests/clangd/ExpectedTypeTest.cpp
    clang-tools-extra/trunk/unittests/clangd/FSTests.cpp
    clang-tools-extra/trunk/unittests/clangd/FileDistanceTests.cpp
    clang-tools-extra/trunk/unittests/clangd/FileIndexTests.cpp
    clang-tools-extra/trunk/unittests/clangd/FindSymbolsTests.cpp
    clang-tools-extra/trunk/unittests/clangd/FunctionTests.cpp
    clang-tools-extra/trunk/unittests/clangd/FuzzyMatchTests.cpp
    clang-tools-extra/trunk/unittests/clangd/GlobalCompilationDatabaseTests.cpp
    clang-tools-extra/trunk/unittests/clangd/HeadersTests.cpp
    clang-tools-extra/trunk/unittests/clangd/IndexActionTests.cpp
    clang-tools-extra/trunk/unittests/clangd/IndexTests.cpp
    clang-tools-extra/trunk/unittests/clangd/JSONTransportTests.cpp
    clang-tools-extra/trunk/unittests/clangd/Matchers.h
    clang-tools-extra/trunk/unittests/clangd/PrintASTTests.cpp
    clang-tools-extra/trunk/unittests/clangd/QualityTests.cpp
    clang-tools-extra/trunk/unittests/clangd/RIFFTests.cpp
    clang-tools-extra/trunk/unittests/clangd/SelectionTests.cpp
    clang-tools-extra/trunk/unittests/clangd/SerializationTests.cpp
    clang-tools-extra/trunk/unittests/clangd/SourceCodeTests.cpp
    clang-tools-extra/trunk/unittests/clangd/SymbolCollectorTests.cpp
    clang-tools-extra/trunk/unittests/clangd/SymbolInfoTests.cpp
    clang-tools-extra/trunk/unittests/clangd/SyncAPI.cpp
    clang-tools-extra/trunk/unittests/clangd/SyncAPI.h
    clang-tools-extra/trunk/unittests/clangd/TUSchedulerTests.cpp
    clang-tools-extra/trunk/unittests/clangd/TestFS.cpp
    clang-tools-extra/trunk/unittests/clangd/TestFS.h
    clang-tools-extra/trunk/unittests/clangd/TestIndex.cpp
    clang-tools-extra/trunk/unittests/clangd/TestIndex.h
    clang-tools-extra/trunk/unittests/clangd/TestScheme.h
    clang-tools-extra/trunk/unittests/clangd/TestTU.cpp
    clang-tools-extra/trunk/unittests/clangd/TestTU.h
    clang-tools-extra/trunk/unittests/clangd/ThreadingTests.cpp
    clang-tools-extra/trunk/unittests/clangd/TraceTests.cpp
    clang-tools-extra/trunk/unittests/clangd/TweakTests.cpp
    clang-tools-extra/trunk/unittests/clangd/TypeHierarchyTests.cpp
    clang-tools-extra/trunk/unittests/clangd/URITests.cpp
    clang-tools-extra/trunk/unittests/clangd/XRefsTests.cpp
    clang-tools-extra/trunk/unittests/clangd/xpc/CMakeLists.txt
    clang-tools-extra/trunk/unittests/clangd/xpc/ConversionTests.cpp
Modified:
    clang-tools-extra/trunk/CMakeLists.txt
    clang-tools-extra/trunk/clangd/CMakeLists.txt
    clang-tools-extra/trunk/test/CMakeLists.txt
    clang-tools-extra/trunk/unittests/CMakeLists.txt

Modified: clang-tools-extra/trunk/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/CMakeLists.txt?rev=359424&r1=359423&r2=359424&view=diff
==============================================================================
--- clang-tools-extra/trunk/CMakeLists.txt (original)
+++ clang-tools-extra/trunk/CMakeLists.txt Mon Apr 29 01:44:01 2019
@@ -1,15 +1,3 @@
-if (NOT DEFINED CLANGD_BUILD_XPC)
-  if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
-    set(CLANGD_BUILD_XPC_DEFAULT ON)
-  else ()
-    set(CLANGD_BUILD_XPC_DEFAULT OFF)
-  endif ()
-
-  set(CLANGD_BUILD_XPC ${CLANGD_BUILD_XPC_DEFAULT} CACHE BOOL "Build XPC Support For Clangd." FORCE)
-
-  unset(CLANGD_BUILD_XPC_DEFAULT)
-endif ()
-
 add_subdirectory(clang-apply-replacements)
 add_subdirectory(clang-reorder-fields)
 add_subdirectory(modularize)

Modified: clang-tools-extra/trunk/clangd/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/CMakeLists.txt?rev=359424&r1=359423&r2=359424&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/CMakeLists.txt (original)
+++ clang-tools-extra/trunk/clangd/CMakeLists.txt Mon Apr 29 01:44:01 2019
@@ -1,6 +1,17 @@
 # Configure the Features.inc file.
-llvm_canonicalize_cmake_booleans(
-  CLANGD_BUILD_XPC)
+if (NOT DEFINED CLANGD_BUILD_XPC)
+  if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+    set(CLANGD_BUILD_XPC_DEFAULT ON)
+  else ()
+    set(CLANGD_BUILD_XPC_DEFAULT OFF)
+  endif ()
+
+  set(CLANGD_BUILD_XPC ${CLANGD_BUILD_XPC_DEFAULT} CACHE BOOL "Build XPC Support For Clangd." FORCE)
+  unset(CLANGD_BUILD_XPC_DEFAULT)
+endif ()
+
+llvm_canonicalize_cmake_booleans(CLANGD_BUILD_XPC)
+
 configure_file(
   ${CMAKE_CURRENT_SOURCE_DIR}/Features.inc.in
   ${CMAKE_CURRENT_BINARY_DIR}/Features.inc
@@ -130,3 +141,8 @@ endif()
 if ( CLANGD_BUILD_XPC )
   add_subdirectory(xpc)
 endif ()
+
+if(CLANG_INCLUDE_TESTS)
+add_subdirectory(test)
+add_subdirectory(unittests)
+endif()

Added: clang-tools-extra/trunk/clangd/test/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/CMakeLists.txt?rev=359424&view=auto
==============================================================================
--- clang-tools-extra/trunk/clangd/test/CMakeLists.txt (added)
+++ clang-tools-extra/trunk/clangd/test/CMakeLists.txt Mon Apr 29 01:44:01 2019
@@ -0,0 +1,28 @@
+set(CLANGD_TEST_DEPS
+  clangd
+  ClangdTests
+  # No tests for these, but we should still make sure they build.
+  clangd-indexer
+  dexp
+  )
+
+if(CLANGD_BUILD_XPC)
+  list(APPEND CLANGD_TEST_DEPS clangd-xpc-test-client)
+endif()
+
+foreach(dep FileCheck count not)
+  if(TARGET ${dep})
+    list(APPEND CLANGD_TEST_DEPS ${dep})
+  endif()
+endforeach()
+
+configure_lit_site_cfg(
+  ${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.in
+  ${CMAKE_CURRENT_BINARY_DIR}/lit.cfg)
+configure_lit_site_cfg(
+  ${CMAKE_CURRENT_SOURCE_DIR}/../unittests/lit.cfg.in
+  ${CMAKE_CURRENT_BINARY_DIR}/../unittests/lit.cfg)
+
+add_lit_testsuite(check-clangd "Running the Clangd regression tests"
+  ${CMAKE_CURRENT_BINARY_DIR}/Unit;${CMAKE_CURRENT_BINARY_DIR}
+  DEPENDS ${CLANGD_TEST_DEPS})

Copied: clang-tools-extra/trunk/clangd/test/Inputs/BenchmarkHeader.h (from r359329, clang-tools-extra/trunk/test/clangd/Inputs/BenchmarkHeader.h)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/Inputs/BenchmarkHeader.h?p2=clang-tools-extra/trunk/clangd/test/Inputs/BenchmarkHeader.h&p1=clang-tools-extra/trunk/test/clangd/Inputs/BenchmarkHeader.h&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/Inputs/BenchmarkSource.cpp (from r359329, clang-tools-extra/trunk/test/clangd/Inputs/BenchmarkSource.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/Inputs/BenchmarkSource.cpp?p2=clang-tools-extra/trunk/clangd/test/Inputs/BenchmarkSource.cpp&p1=clang-tools-extra/trunk/test/clangd/Inputs/BenchmarkSource.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/Inputs/background-index/compile_commands.json (from r359329, clang-tools-extra/trunk/test/clangd/Inputs/background-index/compile_commands.json)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/Inputs/background-index/compile_commands.json?p2=clang-tools-extra/trunk/clangd/test/Inputs/background-index/compile_commands.json&p1=clang-tools-extra/trunk/test/clangd/Inputs/background-index/compile_commands.json&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/Inputs/background-index/definition.jsonrpc (from r359329, clang-tools-extra/trunk/test/clangd/Inputs/background-index/definition.jsonrpc)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/Inputs/background-index/definition.jsonrpc?p2=clang-tools-extra/trunk/clangd/test/Inputs/background-index/definition.jsonrpc&p1=clang-tools-extra/trunk/test/clangd/Inputs/background-index/definition.jsonrpc&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/Inputs/background-index/foo.cpp (from r359329, clang-tools-extra/trunk/test/clangd/Inputs/background-index/foo.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/Inputs/background-index/foo.cpp?p2=clang-tools-extra/trunk/clangd/test/Inputs/background-index/foo.cpp&p1=clang-tools-extra/trunk/test/clangd/Inputs/background-index/foo.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/Inputs/background-index/foo.h (from r359329, clang-tools-extra/trunk/test/clangd/Inputs/background-index/foo.h)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/Inputs/background-index/foo.h?p2=clang-tools-extra/trunk/clangd/test/Inputs/background-index/foo.h&p1=clang-tools-extra/trunk/test/clangd/Inputs/background-index/foo.h&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/Inputs/requests.json (from r359329, clang-tools-extra/trunk/test/clangd/Inputs/requests.json)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/Inputs/requests.json?p2=clang-tools-extra/trunk/clangd/test/Inputs/requests.json&p1=clang-tools-extra/trunk/test/clangd/Inputs/requests.json&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/Inputs/symbols.test.yaml (from r359329, clang-tools-extra/trunk/test/clangd/Inputs/symbols.test.yaml)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/Inputs/symbols.test.yaml?p2=clang-tools-extra/trunk/clangd/test/Inputs/symbols.test.yaml&p1=clang-tools-extra/trunk/test/clangd/Inputs/symbols.test.yaml&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/background-index.test (from r359329, clang-tools-extra/trunk/test/clangd/background-index.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/background-index.test?p2=clang-tools-extra/trunk/clangd/test/background-index.test&p1=clang-tools-extra/trunk/test/clangd/background-index.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/compile-commands-path-in-initialize.test (from r359329, clang-tools-extra/trunk/test/clangd/compile-commands-path-in-initialize.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/compile-commands-path-in-initialize.test?p2=clang-tools-extra/trunk/clangd/test/compile-commands-path-in-initialize.test&p1=clang-tools-extra/trunk/test/clangd/compile-commands-path-in-initialize.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/completion-auto-trigger.test (from r359329, clang-tools-extra/trunk/test/clangd/completion-auto-trigger.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/completion-auto-trigger.test?p2=clang-tools-extra/trunk/clangd/test/completion-auto-trigger.test&p1=clang-tools-extra/trunk/test/clangd/completion-auto-trigger.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/completion-snippets.test (from r359329, clang-tools-extra/trunk/test/clangd/completion-snippets.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/completion-snippets.test?p2=clang-tools-extra/trunk/clangd/test/completion-snippets.test&p1=clang-tools-extra/trunk/test/clangd/completion-snippets.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/completion.test (from r359329, clang-tools-extra/trunk/test/clangd/completion.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/completion.test?p2=clang-tools-extra/trunk/clangd/test/completion.test&p1=clang-tools-extra/trunk/test/clangd/completion.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/crash-non-added-files.test (from r359329, clang-tools-extra/trunk/test/clangd/crash-non-added-files.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/crash-non-added-files.test?p2=clang-tools-extra/trunk/clangd/test/crash-non-added-files.test&p1=clang-tools-extra/trunk/test/clangd/crash-non-added-files.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/delimited-input-comment-at-the-end.test (from r359329, clang-tools-extra/trunk/test/clangd/delimited-input-comment-at-the-end.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/delimited-input-comment-at-the-end.test?p2=clang-tools-extra/trunk/clangd/test/delimited-input-comment-at-the-end.test&p1=clang-tools-extra/trunk/test/clangd/delimited-input-comment-at-the-end.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/diagnostic-category.test (from r359329, clang-tools-extra/trunk/test/clangd/diagnostic-category.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/diagnostic-category.test?p2=clang-tools-extra/trunk/clangd/test/diagnostic-category.test&p1=clang-tools-extra/trunk/test/clangd/diagnostic-category.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/diagnostics-notes.test (from r359329, clang-tools-extra/trunk/test/clangd/diagnostics-notes.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/diagnostics-notes.test?p2=clang-tools-extra/trunk/clangd/test/diagnostics-notes.test&p1=clang-tools-extra/trunk/test/clangd/diagnostics-notes.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/diagnostics.test (from r359329, clang-tools-extra/trunk/test/clangd/diagnostics.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/diagnostics.test?p2=clang-tools-extra/trunk/clangd/test/diagnostics.test&p1=clang-tools-extra/trunk/test/clangd/diagnostics.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/did-change-configuration-params.test (from r359329, clang-tools-extra/trunk/test/clangd/did-change-configuration-params.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/did-change-configuration-params.test?p2=clang-tools-extra/trunk/clangd/test/did-change-configuration-params.test&p1=clang-tools-extra/trunk/test/clangd/did-change-configuration-params.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/execute-command.test (from r359329, clang-tools-extra/trunk/test/clangd/execute-command.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/execute-command.test?p2=clang-tools-extra/trunk/clangd/test/execute-command.test&p1=clang-tools-extra/trunk/test/clangd/execute-command.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/exit-with-shutdown.test (from r359329, clang-tools-extra/trunk/test/clangd/exit-with-shutdown.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/exit-with-shutdown.test?p2=clang-tools-extra/trunk/clangd/test/exit-with-shutdown.test&p1=clang-tools-extra/trunk/test/clangd/exit-with-shutdown.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/exit-without-shutdown.test (from r359329, clang-tools-extra/trunk/test/clangd/exit-without-shutdown.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/exit-without-shutdown.test?p2=clang-tools-extra/trunk/clangd/test/exit-without-shutdown.test&p1=clang-tools-extra/trunk/test/clangd/exit-without-shutdown.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/filestatus.test (from r359329, clang-tools-extra/trunk/test/clangd/filestatus.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/filestatus.test?p2=clang-tools-extra/trunk/clangd/test/filestatus.test&p1=clang-tools-extra/trunk/test/clangd/filestatus.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/fixits-codeaction.test (from r359329, clang-tools-extra/trunk/test/clangd/fixits-codeaction.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/fixits-codeaction.test?p2=clang-tools-extra/trunk/clangd/test/fixits-codeaction.test&p1=clang-tools-extra/trunk/test/clangd/fixits-codeaction.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/fixits-command.test (from r359329, clang-tools-extra/trunk/test/clangd/fixits-command.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/fixits-command.test?p2=clang-tools-extra/trunk/clangd/test/fixits-command.test&p1=clang-tools-extra/trunk/test/clangd/fixits-command.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/fixits-embed-in-diagnostic.test (from r359329, clang-tools-extra/trunk/test/clangd/fixits-embed-in-diagnostic.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/fixits-embed-in-diagnostic.test?p2=clang-tools-extra/trunk/clangd/test/fixits-embed-in-diagnostic.test&p1=clang-tools-extra/trunk/test/clangd/fixits-embed-in-diagnostic.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/formatting.test (from r359329, clang-tools-extra/trunk/test/clangd/formatting.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/formatting.test?p2=clang-tools-extra/trunk/clangd/test/formatting.test&p1=clang-tools-extra/trunk/test/clangd/formatting.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/hover.test (from r359329, clang-tools-extra/trunk/test/clangd/hover.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/hover.test?p2=clang-tools-extra/trunk/clangd/test/hover.test&p1=clang-tools-extra/trunk/test/clangd/hover.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/index-tools.test (from r359329, clang-tools-extra/trunk/test/clangd/index-tools.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/index-tools.test?p2=clang-tools-extra/trunk/clangd/test/index-tools.test&p1=clang-tools-extra/trunk/test/clangd/index-tools.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/initialize-params-invalid.test (from r359329, clang-tools-extra/trunk/test/clangd/initialize-params-invalid.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/initialize-params-invalid.test?p2=clang-tools-extra/trunk/clangd/test/initialize-params-invalid.test&p1=clang-tools-extra/trunk/test/clangd/initialize-params-invalid.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/initialize-params.test (from r359329, clang-tools-extra/trunk/test/clangd/initialize-params.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/initialize-params.test?p2=clang-tools-extra/trunk/clangd/test/initialize-params.test&p1=clang-tools-extra/trunk/test/clangd/initialize-params.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/initialize-sequence.test (from r359329, clang-tools-extra/trunk/test/clangd/initialize-sequence.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/initialize-sequence.test?p2=clang-tools-extra/trunk/clangd/test/initialize-sequence.test&p1=clang-tools-extra/trunk/test/clangd/initialize-sequence.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/input-mirror.test (from r359329, clang-tools-extra/trunk/test/clangd/input-mirror.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/input-mirror.test?p2=clang-tools-extra/trunk/clangd/test/input-mirror.test&p1=clang-tools-extra/trunk/test/clangd/input-mirror.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Added: clang-tools-extra/trunk/clangd/test/lit.cfg.in
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/lit.cfg.in?rev=359424&view=auto
==============================================================================
--- clang-tools-extra/trunk/clangd/test/lit.cfg.in (added)
+++ clang-tools-extra/trunk/clangd/test/lit.cfg.in Mon Apr 29 01:44:01 2019
@@ -0,0 +1,29 @@
+ at LIT_SITE_CFG_IN_HEADER@
+
+import lit.llvm
+import lit.formats
+
+# Reuse clang configuration (PATH setup, etc).
+config.clang_tools_dir = "@CLANG_TOOLS_DIR@"
+config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
+config.clang_libs_dir = "@CLANG_LIBS_DIR@"
+config.llvm_libs_dir = "@LLVM_LIBS_DIR@"
+config.target_triple = "@TARGET_TRIPLE@"
+config.host_triple = "@LLVM_HOST_TRIPLE@"
+lit.llvm.initialize(lit_config, config)
+lit.llvm.llvm_config.use_clang()
+
+config.name = 'Clangd'
+config.suffixes = ['.test']
+config.excludes = ['Inputs']
+config.test_format = lit.formats.ShTest(not lit.llvm.llvm_config.use_lit_shell)
+config.test_source_root = "@CMAKE_CURRENT_SOURCE_DIR@"
+config.test_exec_root = "@CMAKE_CURRENT_BINARY_DIR@"
+
+# Clangd-specific lit environment.
+config.substitutions.append(('%clangd-benchmark-dir',
+                             "@CMAKE_CURRENT_BINARY_DIR@/../benchmarks"))
+
+if @CLANGD_BUILD_XPC@:
+  config.available_features.add('clangd-xpc-support')
+

Copied: clang-tools-extra/trunk/clangd/test/lit.local.cfg (from r359329, clang-tools-extra/trunk/test/clangd/lit.local.cfg)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/lit.local.cfg?p2=clang-tools-extra/trunk/clangd/test/lit.local.cfg&p1=clang-tools-extra/trunk/test/clangd/lit.local.cfg&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/protocol.test (from r359329, clang-tools-extra/trunk/test/clangd/protocol.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/protocol.test?p2=clang-tools-extra/trunk/clangd/test/protocol.test&p1=clang-tools-extra/trunk/test/clangd/protocol.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/references.test (from r359329, clang-tools-extra/trunk/test/clangd/references.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/references.test?p2=clang-tools-extra/trunk/clangd/test/references.test&p1=clang-tools-extra/trunk/test/clangd/references.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/rename.test (from r359329, clang-tools-extra/trunk/test/clangd/rename.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/rename.test?p2=clang-tools-extra/trunk/clangd/test/rename.test&p1=clang-tools-extra/trunk/test/clangd/rename.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/signature-help.test (from r359329, clang-tools-extra/trunk/test/clangd/signature-help.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/signature-help.test?p2=clang-tools-extra/trunk/clangd/test/signature-help.test&p1=clang-tools-extra/trunk/test/clangd/signature-help.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/spaces-in-delimited-input.test (from r359329, clang-tools-extra/trunk/test/clangd/spaces-in-delimited-input.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/spaces-in-delimited-input.test?p2=clang-tools-extra/trunk/clangd/test/spaces-in-delimited-input.test&p1=clang-tools-extra/trunk/test/clangd/spaces-in-delimited-input.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/symbol-info.test (from r359329, clang-tools-extra/trunk/test/clangd/symbol-info.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/symbol-info.test?p2=clang-tools-extra/trunk/clangd/test/symbol-info.test&p1=clang-tools-extra/trunk/test/clangd/symbol-info.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/symbols.test (from r359329, clang-tools-extra/trunk/test/clangd/symbols.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/symbols.test?p2=clang-tools-extra/trunk/clangd/test/symbols.test&p1=clang-tools-extra/trunk/test/clangd/symbols.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/test-uri-posix.test (from r359329, clang-tools-extra/trunk/test/clangd/test-uri-posix.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/test-uri-posix.test?p2=clang-tools-extra/trunk/clangd/test/test-uri-posix.test&p1=clang-tools-extra/trunk/test/clangd/test-uri-posix.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/test-uri-windows.test (from r359329, clang-tools-extra/trunk/test/clangd/test-uri-windows.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/test-uri-windows.test?p2=clang-tools-extra/trunk/clangd/test/test-uri-windows.test&p1=clang-tools-extra/trunk/test/clangd/test-uri-windows.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/textdocument-didchange-fail.test (from r359329, clang-tools-extra/trunk/test/clangd/textdocument-didchange-fail.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/textdocument-didchange-fail.test?p2=clang-tools-extra/trunk/clangd/test/textdocument-didchange-fail.test&p1=clang-tools-extra/trunk/test/clangd/textdocument-didchange-fail.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/too_large.test (from r359329, clang-tools-extra/trunk/test/clangd/too_large.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/too_large.test?p2=clang-tools-extra/trunk/clangd/test/too_large.test&p1=clang-tools-extra/trunk/test/clangd/too_large.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/trace.test (from r359329, clang-tools-extra/trunk/test/clangd/trace.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/trace.test?p2=clang-tools-extra/trunk/clangd/test/trace.test&p1=clang-tools-extra/trunk/test/clangd/trace.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/tweaks-format.test (from r359329, clang-tools-extra/trunk/test/clangd/tweaks-format.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/tweaks-format.test?p2=clang-tools-extra/trunk/clangd/test/tweaks-format.test&p1=clang-tools-extra/trunk/test/clangd/tweaks-format.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/type-hierarchy.test (from r359329, clang-tools-extra/trunk/test/clangd/type-hierarchy.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/type-hierarchy.test?p2=clang-tools-extra/trunk/clangd/test/type-hierarchy.test&p1=clang-tools-extra/trunk/test/clangd/type-hierarchy.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/unsupported-method.test (from r359329, clang-tools-extra/trunk/test/clangd/unsupported-method.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/unsupported-method.test?p2=clang-tools-extra/trunk/clangd/test/unsupported-method.test&p1=clang-tools-extra/trunk/test/clangd/unsupported-method.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/utf8.test (from r359329, clang-tools-extra/trunk/test/clangd/utf8.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/utf8.test?p2=clang-tools-extra/trunk/clangd/test/utf8.test&p1=clang-tools-extra/trunk/test/clangd/utf8.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/xpc/initialize.test (from r359329, clang-tools-extra/trunk/test/clangd/xpc/initialize.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/xpc/initialize.test?p2=clang-tools-extra/trunk/clangd/test/xpc/initialize.test&p1=clang-tools-extra/trunk/test/clangd/xpc/initialize.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/test/xrefs.test (from r359329, clang-tools-extra/trunk/test/clangd/xrefs.test)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/test/xrefs.test?p2=clang-tools-extra/trunk/clangd/test/xrefs.test&p1=clang-tools-extra/trunk/test/clangd/xrefs.test&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/Annotations.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/Annotations.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/Annotations.cpp?p2=clang-tools-extra/trunk/clangd/unittests/Annotations.cpp&p1=clang-tools-extra/trunk/unittests/clangd/Annotations.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/Annotations.h (from r359329, clang-tools-extra/trunk/unittests/clangd/Annotations.h)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/Annotations.h?p2=clang-tools-extra/trunk/clangd/unittests/Annotations.h&p1=clang-tools-extra/trunk/unittests/clangd/Annotations.h&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/BackgroundIndexTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/BackgroundIndexTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/BackgroundIndexTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/BackgroundIndexTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/BackgroundIndexTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/CMakeLists.txt (from r359329, clang-tools-extra/trunk/unittests/clangd/CMakeLists.txt)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/CMakeLists.txt?p2=clang-tools-extra/trunk/clangd/unittests/CMakeLists.txt&p1=clang-tools-extra/trunk/unittests/clangd/CMakeLists.txt&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/CMakeLists.txt (original)
+++ clang-tools-extra/trunk/clangd/unittests/CMakeLists.txt Mon Apr 29 01:44:01 2019
@@ -11,7 +11,17 @@ include_directories(
   ${CLANGD_BINARY_DIR}
   )
 
-add_extra_unittest(ClangdTests
+if(CLANG_BUILT_STANDALONE)
+  # LLVMTestingSupport library is needed for clangd tests.
+  if (EXISTS ${LLVM_MAIN_SRC_DIR}/lib/Testing/Support
+      AND NOT TARGET LLVMTestingSupport)
+    add_subdirectory(${LLVM_MAIN_SRC_DIR}/lib/Testing/Support
+      lib/Testing/Support)
+  endif()
+endif()
+
+add_custom_target(ClangdUnitTests)
+add_unittest(ClangdUnitTests ClangdTests
   Annotations.cpp
   BackgroundIndexTests.cpp
   CancellationTests.cpp

Copied: clang-tools-extra/trunk/clangd/unittests/CancellationTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/CancellationTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/CancellationTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/CancellationTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/CancellationTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/ClangdTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/ClangdTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/ClangdTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/ClangdTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/ClangdTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/ClangdUnitTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/ClangdUnitTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/ClangdUnitTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/ClangdUnitTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/ClangdUnitTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/CodeCompleteTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/CodeCompleteTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/CodeCompleteTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/CodeCompletionStringsTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/CodeCompletionStringsTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/CodeCompletionStringsTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/CodeCompletionStringsTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/CodeCompletionStringsTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/ContextTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/ContextTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/ContextTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/ContextTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/ContextTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/DexTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/DexTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/DexTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/DexTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/DexTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/DiagnosticsTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/DiagnosticsTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/DiagnosticsTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/DiagnosticsTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/DiagnosticsTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/DraftStoreTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/DraftStoreTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/DraftStoreTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/DraftStoreTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/DraftStoreTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/ExpectedTypeTest.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/ExpectedTypeTest.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/ExpectedTypeTest.cpp?p2=clang-tools-extra/trunk/clangd/unittests/ExpectedTypeTest.cpp&p1=clang-tools-extra/trunk/unittests/clangd/ExpectedTypeTest.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/FSTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/FSTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/FSTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/FSTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/FSTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/FileDistanceTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/FileDistanceTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/FileDistanceTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/FileDistanceTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/FileDistanceTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/FileIndexTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/FileIndexTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/FileIndexTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/FileIndexTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/FileIndexTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/FindSymbolsTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/FindSymbolsTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/FindSymbolsTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/FindSymbolsTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/FindSymbolsTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/FunctionTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/FunctionTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/FunctionTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/FunctionTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/FunctionTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/FuzzyMatchTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/FuzzyMatchTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/FuzzyMatchTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/FuzzyMatchTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/FuzzyMatchTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/GlobalCompilationDatabaseTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/GlobalCompilationDatabaseTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/GlobalCompilationDatabaseTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/GlobalCompilationDatabaseTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/GlobalCompilationDatabaseTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/HeadersTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/HeadersTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/HeadersTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/HeadersTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/HeadersTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/IndexActionTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/IndexActionTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/IndexActionTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/IndexActionTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/IndexActionTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/IndexTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/IndexTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/IndexTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/IndexTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/IndexTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/JSONTransportTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/JSONTransportTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/JSONTransportTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/JSONTransportTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/JSONTransportTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/Matchers.h (from r359329, clang-tools-extra/trunk/unittests/clangd/Matchers.h)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/Matchers.h?p2=clang-tools-extra/trunk/clangd/unittests/Matchers.h&p1=clang-tools-extra/trunk/unittests/clangd/Matchers.h&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/PrintASTTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/PrintASTTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/PrintASTTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/PrintASTTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/PrintASTTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/QualityTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/QualityTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/QualityTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/QualityTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/QualityTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/RIFFTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/RIFFTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/RIFFTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/RIFFTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/RIFFTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/SelectionTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/SelectionTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/SelectionTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/SelectionTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/SelectionTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/SerializationTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/SerializationTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/SerializationTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/SerializationTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/SerializationTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/SourceCodeTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/SourceCodeTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/SourceCodeTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/SourceCodeTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/SourceCodeTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/SymbolCollectorTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/SymbolCollectorTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/SymbolCollectorTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/SymbolCollectorTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/SymbolCollectorTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/SymbolInfoTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/SymbolInfoTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/SymbolInfoTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/SymbolInfoTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/SymbolInfoTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/SyncAPI.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/SyncAPI.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/SyncAPI.cpp?p2=clang-tools-extra/trunk/clangd/unittests/SyncAPI.cpp&p1=clang-tools-extra/trunk/unittests/clangd/SyncAPI.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/SyncAPI.h (from r359329, clang-tools-extra/trunk/unittests/clangd/SyncAPI.h)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/SyncAPI.h?p2=clang-tools-extra/trunk/clangd/unittests/SyncAPI.h&p1=clang-tools-extra/trunk/unittests/clangd/SyncAPI.h&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/TUSchedulerTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/TUSchedulerTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/TUSchedulerTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/TUSchedulerTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/TUSchedulerTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/TestFS.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/TestFS.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/TestFS.cpp?p2=clang-tools-extra/trunk/clangd/unittests/TestFS.cpp&p1=clang-tools-extra/trunk/unittests/clangd/TestFS.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/TestFS.h (from r359329, clang-tools-extra/trunk/unittests/clangd/TestFS.h)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/TestFS.h?p2=clang-tools-extra/trunk/clangd/unittests/TestFS.h&p1=clang-tools-extra/trunk/unittests/clangd/TestFS.h&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/TestIndex.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/TestIndex.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/TestIndex.cpp?p2=clang-tools-extra/trunk/clangd/unittests/TestIndex.cpp&p1=clang-tools-extra/trunk/unittests/clangd/TestIndex.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/TestIndex.h (from r359329, clang-tools-extra/trunk/unittests/clangd/TestIndex.h)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/TestIndex.h?p2=clang-tools-extra/trunk/clangd/unittests/TestIndex.h&p1=clang-tools-extra/trunk/unittests/clangd/TestIndex.h&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/TestScheme.h (from r359329, clang-tools-extra/trunk/unittests/clangd/TestScheme.h)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/TestScheme.h?p2=clang-tools-extra/trunk/clangd/unittests/TestScheme.h&p1=clang-tools-extra/trunk/unittests/clangd/TestScheme.h&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/TestTU.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/TestTU.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/TestTU.cpp?p2=clang-tools-extra/trunk/clangd/unittests/TestTU.cpp&p1=clang-tools-extra/trunk/unittests/clangd/TestTU.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/TestTU.h (from r359329, clang-tools-extra/trunk/unittests/clangd/TestTU.h)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/TestTU.h?p2=clang-tools-extra/trunk/clangd/unittests/TestTU.h&p1=clang-tools-extra/trunk/unittests/clangd/TestTU.h&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/ThreadingTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/ThreadingTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/ThreadingTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/ThreadingTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/ThreadingTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/TraceTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/TraceTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/TraceTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/TraceTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/TraceTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/TweakTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/TweakTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/TweakTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/TweakTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/TweakTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/TypeHierarchyTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/TypeHierarchyTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/TypeHierarchyTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/TypeHierarchyTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/TypeHierarchyTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/URITests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/URITests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/URITests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/URITests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/URITests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/XRefsTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/XRefsTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/XRefsTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/XRefsTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/XRefsTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Added: clang-tools-extra/trunk/clangd/unittests/lit.cfg.in
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/lit.cfg.in?rev=359424&view=auto
==============================================================================
--- clang-tools-extra/trunk/clangd/unittests/lit.cfg.in (added)
+++ clang-tools-extra/trunk/clangd/unittests/lit.cfg.in Mon Apr 29 01:44:01 2019
@@ -0,0 +1,23 @@
+ at LIT_SITE_CFG_IN_HEADER@
+# This is a shim to run the gtest unittests in ../unittests using lit.
+
+import lit.formats
+config.name = "Clangd Unit Tests"
+config.test_format = lit.formats.GoogleTest('.', 'Tests')
+config.test_source_root = "@CMAKE_CURRENT_BINARY_DIR@"
+config.test_exec_root = "@CMAKE_CURRENT_BINARY_DIR@"
+
+# Point the dynamic loader at dynamic libraries in 'lib'.
+# XXX: it seems every project has a copy of this logic. Move it somewhere.
+import platform
+if platform.system() == 'Darwin':
+    shlibpath_var = 'DYLD_LIBRARY_PATH'
+elif platform.system() == 'Windows':
+    shlibpath_var = 'PATH'
+else:
+    shlibpath_var = 'LD_LIBRARY_PATH'
+config.environment[shlibpath_var] = os.path.pathsep.join((
+    "@SHLIBDIR@", "@LLVM_LIBS_DIR@",
+    config.environment.get(shlibpath_var,'')))
+
+

Copied: clang-tools-extra/trunk/clangd/unittests/xpc/CMakeLists.txt (from r359329, clang-tools-extra/trunk/unittests/clangd/xpc/CMakeLists.txt)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/xpc/CMakeLists.txt?p2=clang-tools-extra/trunk/clangd/unittests/xpc/CMakeLists.txt&p1=clang-tools-extra/trunk/unittests/clangd/xpc/CMakeLists.txt&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Copied: clang-tools-extra/trunk/clangd/unittests/xpc/ConversionTests.cpp (from r359329, clang-tools-extra/trunk/unittests/clangd/xpc/ConversionTests.cpp)
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/xpc/ConversionTests.cpp?p2=clang-tools-extra/trunk/clangd/unittests/xpc/ConversionTests.cpp&p1=clang-tools-extra/trunk/unittests/clangd/xpc/ConversionTests.cpp&r1=359329&r2=359424&rev=359424&view=diff
==============================================================================
    (empty)

Modified: clang-tools-extra/trunk/test/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/CMakeLists.txt?rev=359424&r1=359423&r2=359424&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/CMakeLists.txt (original)
+++ clang-tools-extra/trunk/test/CMakeLists.txt Mon Apr 29 01:44:01 2019
@@ -15,9 +15,7 @@ endif ()
 
 string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} CLANG_TOOLS_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR})
 
-llvm_canonicalize_cmake_booleans(
-  CLANG_ENABLE_STATIC_ANALYZER
-  CLANGD_BUILD_XPC)
+llvm_canonicalize_cmake_booleans(CLANG_ENABLE_STATIC_ANALYZER)
 
 configure_lit_site_cfg(
   ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
@@ -70,19 +68,6 @@ set(CLANG_TOOLS_TEST_DEPS
   clang
 )
 
-if(CLANGD_BUILD_XPC)
-  list(APPEND CLANG_TOOLS_TEST_DEPS clangd-xpc-test-client)
-endif()
-
-set(CLANGD_TEST_DEPS
-  clangd
-  ClangdTests
-  # clangd-related tools which don't have tests, add them to the test to make
-  # sure we don't introduce new changes that break their compilations.
-  clangd-indexer
-  dexp
-  )
-
 # Add lit test dependencies.
 set(LLVM_UTILS_DEPS
   FileCheck count not
@@ -93,11 +78,6 @@ foreach(dep ${LLVM_UTILS_DEPS})
   endif()
 endforeach()
 
-foreach(clangd_dep ${CLANGD_TEST_DEPS})
-  list(APPEND CLANG_TOOLS_TEST_DEPS
-       ${clangd_dep})
-endforeach()
-
 add_lit_testsuite(check-clang-tools "Running the Clang extra tools' regression tests"
   ${CMAKE_CURRENT_BINARY_DIR}
   DEPENDS ${CLANG_TOOLS_TEST_DEPS}
@@ -105,15 +85,3 @@ add_lit_testsuite(check-clang-tools "Run
   )
 
 set_target_properties(check-clang-tools PROPERTIES FOLDER "Clang extra tools' tests")
-
-# Setup an individual test for building and testing clangd-only stuff.
-# Note: all clangd tests have been covered in check-clang-tools, this is a
-# convenient target for clangd developers.
-# Exclude check-clangd from check-all.
-set(EXCLUDE_FROM_ALL ON)
-add_lit_testsuite(check-clangd "Running the Clangd regression tests"
-  ${CMAKE_CURRENT_BINARY_DIR}/Unit/clangd;${CMAKE_CURRENT_BINARY_DIR}/clangd
-  DEPENDS ${CLANGD_TEST_DEPS}
-)
-set_target_properties(check-clangd PROPERTIES FOLDER "Clangd tests")
-set(EXCLUDE_FROM_ALL OFF)

Removed: clang-tools-extra/trunk/test/clangd/Inputs/BenchmarkHeader.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/Inputs/BenchmarkHeader.h?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/Inputs/BenchmarkHeader.h (original)
+++ clang-tools-extra/trunk/test/clangd/Inputs/BenchmarkHeader.h (removed)
@@ -1,19 +0,0 @@
-namespace clang {
-namespace clangd {
-namespace dex {
-class Dex;
-} // namespace dex
-} // namespace clangd
-} // namespace clang
-
-namespace llvm {
-namespace sys {
-
-int getHostNumPhysicalCores();
-
-} // namespace sys
-} // namespace llvm
-
-namespace {
-int Variable;
-} // namespace

Removed: clang-tools-extra/trunk/test/clangd/Inputs/BenchmarkSource.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/Inputs/BenchmarkSource.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/Inputs/BenchmarkSource.cpp (original)
+++ clang-tools-extra/trunk/test/clangd/Inputs/BenchmarkSource.cpp (removed)
@@ -1 +0,0 @@
-#include "BenchmarkHeader.h"

Removed: clang-tools-extra/trunk/test/clangd/Inputs/background-index/compile_commands.json
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/Inputs/background-index/compile_commands.json?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/Inputs/background-index/compile_commands.json (original)
+++ clang-tools-extra/trunk/test/clangd/Inputs/background-index/compile_commands.json (removed)
@@ -1,5 +0,0 @@
-[{
-  "directory": "DIRECTORY",
-  "command": "clang foo.cpp",
-  "file": "DIRECTORY/foo.cpp"
-}]

Removed: clang-tools-extra/trunk/test/clangd/Inputs/background-index/definition.jsonrpc
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/Inputs/background-index/definition.jsonrpc?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/Inputs/background-index/definition.jsonrpc (original)
+++ clang-tools-extra/trunk/test/clangd/Inputs/background-index/definition.jsonrpc (removed)
@@ -1,51 +0,0 @@
-{
-  "jsonrpc": "2.0",
-  "id": 0,
-  "method": "initialize",
-  "params": {
-    "processId": 123,
-    "rootPath": "clangd",
-    "capabilities": {},
-    "trace": "off"
-  }
-}
----
-{
-  "jsonrpc": "2.0",
-  "method": "textDocument/didOpen",
-  "params": {
-    "textDocument": {
-      "uri": "file://DIRECTORY/bar.cpp",
-      "languageId": "cpp",
-      "version": 1,
-      "text": "#include \"foo.h\"\nint main(){\nreturn foo();\n}"
-    }
-  }
-}
----
-{
-  "jsonrpc": "2.0",
-  "id": 1,
-  "method": "sync",
-  "params": null
-}
----
-{
-  "jsonrpc": "2.0",
-  "id": 2,
-  "method": "textDocument/definition",
-  "params": {
-    "textDocument": {
-      "uri": "file://DIRECTORY/bar.cpp"
-    },
-    "position": {
-      "line": 2,
-      "character": 8
-    }
-  }
-}
-# CHECK: "uri": "file://{{.*}}/foo.cpp"
----
-{"jsonrpc":"2.0","id":3,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/Inputs/background-index/foo.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/Inputs/background-index/foo.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/Inputs/background-index/foo.cpp (original)
+++ clang-tools-extra/trunk/test/clangd/Inputs/background-index/foo.cpp (removed)
@@ -1,2 +0,0 @@
-#include "foo.h"
-int foo() { return 42; }

Removed: clang-tools-extra/trunk/test/clangd/Inputs/background-index/foo.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/Inputs/background-index/foo.h?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/Inputs/background-index/foo.h (original)
+++ clang-tools-extra/trunk/test/clangd/Inputs/background-index/foo.h (removed)
@@ -1,4 +0,0 @@
-#ifndef FOO_H
-#define FOO_H
-int foo();
-#endif

Removed: clang-tools-extra/trunk/test/clangd/Inputs/requests.json
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/Inputs/requests.json?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/Inputs/requests.json (original)
+++ clang-tools-extra/trunk/test/clangd/Inputs/requests.json (removed)
@@ -1,7 +0,0 @@
-[{"Limit":100,"ProximityPaths":["/usr/home/user/clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp"],"Query":"OMP","RestrictForCodeCompletion":true,"Scopes":["clang::"], "AnyScope":false},
-{"Limit":100,"ProximityPaths":[],"Query":"s","RestrictForCodeCompletion":true,"Scopes":["llvm::", ""], "AnyScope":false},
-{"Limit":100,"ProximityPaths":[],"Query":"sy","RestrictForCodeCompletion":true,"Scopes":["llvm::", ""], "AnyScope":false},
-{"Limit":100,"ProximityPaths":[],"Query":"sys","RestrictForCodeCompletion":true,"Scopes":["llvm::", ""], "AnyScope":false},
-{"Limit":100,"ProximityPaths":[],"Query":"sys","RestrictForCodeCompletion":true,"Scopes":["llvm::", ""], "AnyScope":false},
-{"Limit":100,"ProximityPaths":[],"Query":"Dex","RestrictForCodeCompletion":true,"Scopes":["clang::clangd::", "clang::", "clang::clangd::dex::"],"AnyScope":false},
-{"Limit":100,"ProximityPaths":[],"Query":"Variable","RestrictForCodeCompletion":true,"Scopes":[""], "AnyScope":false}]

Removed: clang-tools-extra/trunk/test/clangd/Inputs/symbols.test.yaml
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/Inputs/symbols.test.yaml?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/Inputs/symbols.test.yaml (original)
+++ clang-tools-extra/trunk/test/clangd/Inputs/symbols.test.yaml (removed)
@@ -1,17 +0,0 @@
----
-!Symbol
-ID:              057557CEBF6E6B2D
-Name:            'vector'
-Scope:           'std::'
-SymInfo:         
-  Kind:            Class
-  Lang:            Cpp
-CanonicalDeclaration: 
-  FileURI:         'file:///vector.h'
-  Start:           
-    Line:            215
-    Column:          10
-  End:             
-    Line:            215
-    Column:          16
-...

Added: clang-tools-extra/trunk/test/clangd/Unit/lit.site.cfg.py.in
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/Unit/lit.site.cfg.py.in?rev=359424&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/Unit/lit.site.cfg.py.in (added)
+++ clang-tools-extra/trunk/test/clangd/Unit/lit.site.cfg.py.in Mon Apr 29 01:44:01 2019
@@ -0,0 +1,9 @@
+ at LIT_SITE_CFG_IN_HEADER@
+
+config.extra_tools_obj_dir = "@CLANG_TOOLS_BINARY_DIR@/unittests"
+config.extra_tools_src_dir = "@CLANG_TOOLS_SOURCE_DIR@/unittests"
+config.llvm_libs_dir = "@LLVM_LIBS_DIR@"
+config.shlibdir = "@SHLIBDIR@"
+config.target_triple = "@TARGET_TRIPLE@"
+
+lit_config.load_config(config, "@CLANG_TOOLS_SOURCE_DIR@/test/Unit/lit.cfg.py")

Removed: clang-tools-extra/trunk/test/clangd/background-index.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/background-index.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/background-index.test (original)
+++ clang-tools-extra/trunk/test/clangd/background-index.test (removed)
@@ -1,20 +0,0 @@
-# We need to splice paths into file:// URIs for this test.
-# UNSUPPORTED: win32
-
-# Use a copy of inputs, as we'll mutate it (as will the background index).
-# RUN: rm -rf %t
-# RUN: cp -r %S/Inputs/background-index %t
-# Need to embed the correct temp path in the actual JSON-RPC requests.
-# RUN: sed -i -e "s|DIRECTORY|%t|" %t/*
-
-# We're editing bar.cpp, which includes foo.h.
-# foo() is declared in foo.h and defined in foo.cpp.
-# The background index should allow us to go-to-definition on foo().
-# RUN: clangd -background-index -background-index-rebuild-period=0 -lit-test < %t/definition.jsonrpc | FileCheck %t/definition.jsonrpc
-
-# Test that the index is writing files in the expected location.
-# RUN: ls %t/.clangd/index/foo.cpp.*.idx
-
-# Test the index is read from disk: delete code and restart clangd.
-# RUN: rm %t/foo.cpp
-# RUN: clangd -background-index -lit-test < %t/definition.jsonrpc | FileCheck %t/definition.jsonrpc

Removed: clang-tools-extra/trunk/test/clangd/compile-commands-path-in-initialize.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/compile-commands-path-in-initialize.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/compile-commands-path-in-initialize.test (original)
+++ clang-tools-extra/trunk/test/clangd/compile-commands-path-in-initialize.test (removed)
@@ -1,29 +0,0 @@
-# Test that we can set choose a configuration/build directly in the initialize
-# request.
-
-# RUN: rm -rf %t.dir/* && mkdir -p %t.dir
-# RUN: mkdir %t.dir/build-1
-# RUN: echo '[{"directory": "%/t.dir", "command": "c++ the-file.cpp", "file": "the-file.cpp"}]' > %t.dir/compile_commands.json
-# RUN: echo '[{"directory": "%/t.dir/build-1", "command": "c++ -DMACRO=1 the-file.cpp", "file": "../the-file.cpp"}]' > %t.dir/build-1/compile_commands.json
-
-# RUN: sed -e "s|INPUT_DIR|%/t.dir|g" %s > %t.test.1
-
-# On Windows, we need the URI in didOpen to look like "uri":"file:///C:/..."
-# (with the extra slash in the front), so we add it here.
-# RUN: sed -e "s|file://\([A-Z]\):/|file:///\1:/|g" %t.test.1 > %t.test
-
-# RUN: clangd -lit-test < %t.test | FileCheck -strict-whitespace %t.test
-
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"initializationOptions":{"compilationDatabasePath":"INPUT_DIR/build-1"}}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"file://INPUT_DIR/the-file.cpp","languageId":"cpp","version":1,"text":"#if !defined(MACRO)\n#pragma message (\"MACRO is not defined\")\n#elif MACRO == 1\n#pragma message (\"MACRO is one\")\n#else\n#pragma message (\"woops\")\n#endif\nint main() {}\n"}}}
-# CHECK:   "method": "textDocument/publishDiagnostics",
-# CHECK-NEXT:   "params": {
-# CHECK-NEXT:     "diagnostics": [
-# CHECK-NEXT:       {
-# CHECK-NEXT:         "code": "-W#pragma-messages",
-# CHECK-NEXT:         "message": "MACRO is one",
----
-{"jsonrpc":"2.0","id":10000,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/completion-auto-trigger.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/completion-auto-trigger.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/completion-auto-trigger.test (original)
+++ clang-tools-extra/trunk/test/clangd/completion-auto-trigger.test (removed)
@@ -1,106 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///main.cpp","languageId":"cpp","version":1,"text":"namespace ns { int ns_member; } struct vector { int size; static int default_capacity; };\nvoid test(vector *a, vector *b) {\n  if (a > b) {} \n  a->size = 10;\n\n  a ? a : b;\n  ns::ns_member = 10;\n}"}}}
----
-{"jsonrpc":"2.0","id":1,"method":"textDocument/completion","params":{"textDocument":{"uri":"test:///main.cpp"},"position":{"line":2,"character":9},"context":{"triggerKind":2,"triggerCharacter":">"}}}
-#      CHECK:  "error": {
-# CHECK-NEXT:    "code": -32001,
-# CHECK-NEXT:    "message": "ignored auto-triggered completion, preceding char did not match"
-# CHECK-NEXT:  },
-# CHECK-NEXT:  "id": 1,
----
-{"jsonrpc":"2.0","id":2,"method":"textDocument/completion","params":{"textDocument":{"uri":"test:///main.cpp"},"position":{"line":3,"character":5},"context":{"triggerKind":2,"triggerCharacter":">"}}}
-#      CHECK:  "id": 2,
-# CHECK-NEXT:  "jsonrpc": "2.0"
-# CHECK-NEXT:  "result": {
-# CHECK-NEXT:    "isIncomplete": false,
-# CHECK-NEXT:    "items": [
-# CHECK-NEXT:       {
-# CHECK-NEXT:        "detail": "int",
-# CHECK-NEXT:        "filterText": "size",
-# CHECK-NEXT:        "insertText": "size",
-# CHECK-NEXT:        "insertTextFormat": 1,
-# CHECK-NEXT:        "kind": 5,
-# CHECK-NEXT:        "label": " size",
-# CHECK-NEXT:        "sortText": "3eacccccsize",
-# CHECK-NEXT:        "textEdit": {
-# CHECK-NEXT:          "newText": "size",
-# CHECK-NEXT:          "range": {
-# CHECK-NEXT:            "end": {
-# CHECK-NEXT:              "character": 5,
-# CHECK-NEXT:              "line": 3
-# CHECK-NEXT:            },
-# CHECK-NEXT:            "start": {
-# CHECK-NEXT:              "character": 5,
-# CHECK-NEXT:              "line": 3
-# CHECK-NEXT:            }
-# CHECK-NEXT:          }
-# CHECK-NEXT:        }
-# CHECK-NEXT:      },
-# CHECK-NEXT:      {
-# CHECK-NEXT:         "detail": "int",
-# CHECK-NEXT:         "filterText": "default_capacity",
-# CHECK-NEXT:         "insertText": "default_capacity",
-# CHECK-NEXT:         "insertTextFormat": 1,
-# CHECK-NEXT:         "kind": 10,
-# CHECK-NEXT:         "label": " default_capacity",
-# CHECK-NEXT:         "sortText": "3fd70a3ddefault_capacity",
-# CHECK-NEXT:         "textEdit": {
-# CHECK-NEXT:           "newText": "default_capacity",
-# CHECK-NEXT:           "range": {
-# CHECK-NEXT:             "end": {
-# CHECK-NEXT:               "character": 5,
-# CHECK-NEXT:               "line": 3
-# CHECK-NEXT:             },
-# CHECK-NEXT:             "start": {
-# CHECK-NEXT:               "character": 5,
-# CHECK-NEXT:               "line": 3
-# CHECK-NEXT:             }
-# CHECK-NEXT:           }
-# CHECK-NEXT:         }
-# CHECK-NEXT:       }
-# CHECK-NEXT:     ]
-# CHECK-NEXT:   }
----
-{"jsonrpc":"2.0","id":3,"method":"textDocument/completion","params":{"textDocument":{"uri":"test:///main.cpp"},"position":{"line":5,"character":9},"context":{"triggerKind":2,"triggerCharacter":":"}}}
-#      CHECK:  "error": {
-# CHECK-NEXT:    "code": -32001,
-# CHECK-NEXT:    "message": "ignored auto-triggered completion, preceding char did not match"
-# CHECK-NEXT:  },
-# CHECK-NEXT:  "id": 3,
----
-{"jsonrpc":"2.0","id":4,"method":"textDocument/completion","params":{"textDocument":{"uri":"test:///main.cpp"},"position":{"line":6,"character":6},"context":{"triggerKind":2,"triggerCharacter":":"}}}
----
-#      CHECK:  "id": 4,
-# CHECK-NEXT:  "jsonrpc": "2.0"
-# CHECK-NEXT:  "result": {
-# CHECK-NEXT:    "isIncomplete": false,
-# CHECK-NEXT:    "items": [
-# CHECK-NEXT:      {
-# CHECK-NEXT:        "detail": "int",
-# CHECK-NEXT:        "filterText": "ns_member",
-# CHECK-NEXT:        "insertText": "ns_member",
-# CHECK-NEXT:        "insertTextFormat": 1,
-# CHECK-NEXT:        "kind": 6,
-# CHECK-NEXT:        "label": " ns_member",
-# CHECK-NEXT:        "sortText": "3f2cccccns_member",
-# CHECK-NEXT:        "textEdit": {
-# CHECK-NEXT:          "newText": "ns_member",
-# CHECK-NEXT:          "range": {
-# CHECK-NEXT:            "end": {
-# CHECK-NEXT:              "character": 6,
-# CHECK-NEXT:              "line": 6
-# CHECK-NEXT:            },
-# CHECK-NEXT:            "start": {
-# CHECK-NEXT:              "character": 6,
-# CHECK-NEXT:              "line": 6
-# CHECK-NEXT:            }
-# CHECK-NEXT:          }
-# CHECK-NEXT:        }
-# CHECK-NEXT:      }
-# CHECK-NEXT:    ]
-# CHECK-NEXT:  }
-{"jsonrpc":"2.0","id":5,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/completion-snippets.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/completion-snippets.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/completion-snippets.test (original)
+++ clang-tools-extra/trunk/test/clangd/completion-snippets.test (removed)
@@ -1,56 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-# RUN: clangd -lit-test -pch-storage=memory < %s | FileCheck -strict-whitespace %s
-{
-  "jsonrpc": "2.0",
-  "id": 0,
-  "method": "initialize",
-  "params": {
-    "processId": 123,
-    "rootPath": "clangd",
-    "capabilities": {
-      "textDocument": {
-        "completion": {
-          "completionItem": {
-            "snippetSupport": true
-          }
-        }
-      }
-    },
-    "trace": "off"
-  }
-}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///main.cpp","languageId":"cpp","version":1,"text":"int func_with_args(int a, int b);\nint main() {\nfunc_with\n}"}}}
----
-{"jsonrpc":"2.0","id":1,"method":"textDocument/completion","params":{"textDocument":{"uri":"test:///main.cpp"},"position":{"line":2,"character":7}}}
-#      CHECK:  "id": 1
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": {
-# CHECK-NEXT:    "isIncomplete": {{.*}}
-# CHECK-NEXT:    "items": [
-# CHECK:           "filterText": "func_with_args",
-# CHECK-NEXT:      "insertText": "func_with_args(${1:int a}, ${2:int b})",
-# CHECK-NEXT:      "insertTextFormat": 2,
-# CHECK-NEXT:      "kind": 3,
-# CHECK-NEXT:      "label": " func_with_args(int a, int b)",
-# CHECK-NEXT:      "sortText": "{{.*}}func_with_args"
-# CHECK-NEXT:      "textEdit": {
-# CHECK-NEXT:        "newText": "func_with_args(${1:int a}, ${2:int b})",
-# CHECK-NEXT:        "range": {
-# CHECK-NEXT:          "end": {
-# CHECK-NEXT:            "character": 7,
-# CHECK-NEXT:            "line": 2
-# CHECK-NEXT:          }
-# CHECK-NEXT:          "start": {
-# CHECK-NEXT:            "character": 0,
-# CHECK-NEXT:            "line": 2
-# CHECK-NEXT:          }
-# CHECK-NEXT:        }
-# CHECK-NEXT:      }
-# CHECK-NEXT:    }
-# CHECK-NEXT:    ]
-# CHECK-NEXT:  }
----
-{"jsonrpc":"2.0","id":4,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/completion.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/completion.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/completion.test (original)
+++ clang-tools-extra/trunk/test/clangd/completion.test (removed)
@@ -1,72 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-# RUN: clangd -lit-test -pch-storage=memory < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///main.cpp","languageId":"cpp","version":1,"text":"struct S { int a; };\nint main() {\nS().\n}"}}}
----
-{"jsonrpc":"2.0","id":1,"method":"textDocument/completion","params":{"textDocument":{"uri":"test:///main.cpp"},"position":{"line":2,"character":4}}}
-#      CHECK:  "id": 1
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": {
-# CHECK-NEXT:    "isIncomplete": false,
-# CHECK-NEXT:    "items": [
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "detail": "int",
-# CHECK-NEXT:      "filterText": "a",
-# CHECK-NEXT:      "insertText": "a",
-# CHECK-NEXT:      "insertTextFormat": 1,
-# CHECK-NEXT:      "kind": 5,
-# CHECK-NEXT:      "label": " a",
-# CHECK-NEXT:      "sortText": "{{.*}}a"
-# CHECK-NEXT:      "textEdit": {
-# CHECK-NEXT:        "newText": "a",
-# CHECK-NEXT:        "range": {
-# CHECK-NEXT:          "end": {
-# CHECK-NEXT:            "character": 4,
-# CHECK-NEXT:            "line": 2
-# CHECK-NEXT:          }
-# CHECK-NEXT:          "start": {
-# CHECK-NEXT:            "character": 4,
-# CHECK-NEXT:            "line": 2
-# CHECK-NEXT:          }
-# CHECK-NEXT:        }
-# CHECK-NEXT:      }
-# CHECK-NEXT:    }
-# CHECK-NEXT:  ]
----
-# Update the source file and check for completions again.
-{"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"test:///main.cpp","version":2},"contentChanges":[{"text":"struct S { int b; };\nint main() {\nS().\n}"}]}}
----
-{"jsonrpc":"2.0","id":3,"method":"textDocument/completion","params":{"textDocument":{"uri":"test:///main.cpp"},"position":{"line":2,"character":4}}}
-#      CHECK:  "id": 3,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": {
-# CHECK-NEXT:    "isIncomplete": false,
-# CHECK-NEXT:    "items": [
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "detail": "int",
-# CHECK-NEXT:      "filterText": "b",
-# CHECK-NEXT:      "insertText": "b",
-# CHECK-NEXT:      "insertTextFormat": 1,
-# CHECK-NEXT:      "kind": 5,
-# CHECK-NEXT:      "label": " b",
-# CHECK-NEXT:      "sortText": "{{.*}}b"
-# CHECK-NEXT:      "textEdit": {
-# CHECK-NEXT:        "newText": "b",
-# CHECK-NEXT:        "range": {
-# CHECK-NEXT:          "end": {
-# CHECK-NEXT:            "character": 4,
-# CHECK-NEXT:            "line": 2
-# CHECK-NEXT:          }
-# CHECK-NEXT:          "start": {
-# CHECK-NEXT:            "character": 4,
-# CHECK-NEXT:            "line": 2
-# CHECK-NEXT:          }
-# CHECK-NEXT:        }
-# CHECK-NEXT:      }
-# CHECK-NEXT:    }
-# CHECK-NEXT:  ]
----
-{"jsonrpc":"2.0","id":4,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/crash-non-added-files.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/crash-non-added-files.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/crash-non-added-files.test (original)
+++ clang-tools-extra/trunk/test/clangd/crash-non-added-files.test (removed)
@@ -1,34 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","id":2,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"test:///foo.c"},"range":{"start":{"line":104,"character":13},"end":{"line":0,"character":35}},"context":{"diagnostics":[{"range":{"start": {"line": 0, "character": 32}, "end": {"line": 0, "character": 37}},"severity":2,"message":"using the result of an assignment as a condition without parentheses"},{"range":{"start": {"line": 0, "character": 34}, "end": {"line": 0, "character": 35}},"severity":3,"message":"place parentheses around the assignment to silence this warning"},{"range":{"start": {"line": 0, "character": 34}, "end": {"line": 0, "character": 35}},"severity":3,"message":"use '==' to turn this assignment into an equality comparison"}]}}}
-#      CHECK:  "error": {
-# CHECK-NEXT:    "code": -32602
-# CHECK-NEXT:    "message": "onCodeAction called for non-added file"
-# CHECK-NEXT:  },
-# CHECK-NEXT:  "id": 2,
----
-{"jsonrpc":"2.0","id":3,"method":"textDocument/rangeFormatting","params":{"textDocument":{"uri":"test:///foo.c"},"range":{"start":{"line":1,"character":4},"end":{"line":1,"character":12}},"options":{"tabSize":4,"insertSpaces":true}}}
-#      CHECK:  "error": {
-# CHECK-NEXT:    "code": -32602
-# CHECK-NEXT:    "message": "onDocumentRangeFormatting called for non-added file"
-# CHECK-NEXT:  },
-# CHECK-NEXT:  "id": 3,
----
-{"jsonrpc":"2.0","id":4,"method":"textDocument/formatting","params":{"textDocument":{"uri":"test:///foo.c"},"options":{"tabSize":4,"insertSpaces":true}}}
-#      CHECK:  "error": {
-# CHECK-NEXT:    "code": -32602
-# CHECK-NEXT:    "message": "onDocumentFormatting called for non-added file"
-# CHECK-NEXT:  },
-# CHECK-NEXT:  "id": 4,
----
-{"jsonrpc":"2.0","id":5,"method":"textDocument/onTypeFormatting","params":{"textDocument":{"uri":"test:///foo.c"},"position":{"line":3,"character":1},"ch":"}","options":{"tabSize":4,"insertSpaces":true}}}
-#      CHECK:  "error": {
-# CHECK-NEXT:    "code": -32602
-# CHECK-NEXT:    "message": "onDocumentOnTypeFormatting called for non-added file"
-# CHECK-NEXT:  },
-# CHECK-NEXT:  "id": 5,
----
-{"jsonrpc":"2.0","id":6,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/delimited-input-comment-at-the-end.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/delimited-input-comment-at-the-end.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/delimited-input-comment-at-the-end.test (original)
+++ clang-tools-extra/trunk/test/clangd/delimited-input-comment-at-the-end.test (removed)
@@ -1,11 +0,0 @@
-# RUN: clangd -input-style=delimited -run-synchronously -input-mirror-file %t < %s
-# RUN: grep '{"jsonrpc":"2.0","id":3,"method":"exit"}' %t
-#
-# RUN: clangd -lit-test -input-mirror-file %t < %s
-# RUN: grep '{"jsonrpc":"2.0","id":3,"method":"exit"}' %t
-#
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","id":3,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/diagnostic-category.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/diagnostic-category.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/diagnostic-category.test (original)
+++ clang-tools-extra/trunk/test/clangd/diagnostic-category.test (removed)
@@ -1,45 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{"textDocument":{"publishDiagnostics":{"categorySupport":true}}},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo.c","languageId":"c","version":1,"text":"struct Point {}; union Point p;"}}}
-#      CHECK:    "method": "textDocument/publishDiagnostics",
-# CHECK-NEXT:    "params": {
-# CHECK-NEXT:     "diagnostics": [
-# CHECK-NEXT:      {
-# CHECK-NEXT:        "category": "Semantic Issue",
-# CHECK-NEXT:        "code": "use_with_wrong_tag",
-# CHECK-NEXT:        "message": "Use of 'Point' with tag type that does not match previous declaration (fix available)\n\nfoo.c:1:8: note: previous use is here",
-# CHECK-NEXT:        "range": {
-# CHECK-NEXT:          "end": {
-# CHECK-NEXT:            "character": 22,
-# CHECK-NEXT:            "line": 0
-# CHECK-NEXT:          },
-# CHECK-NEXT:          "start": {
-# CHECK-NEXT:            "character": 17,
-# CHECK-NEXT:            "line": 0
-# CHECK-NEXT:          }
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "severity": 1,
-# CHECK-NEXT:        "source": "clang"
-# CHECK-NEXT:      },
-# CHECK-NEXT:      {
-# CHECK-NEXT:        "message": "Previous use is here\n\nfoo.c:1:18: error: use of 'Point' with tag type that does not match previous declaration",
-# CHECK-NEXT:        "range": {
-# CHECK-NEXT:          "end": {
-# CHECK-NEXT:            "character": 12,
-# CHECK-NEXT:            "line": 0
-# CHECK-NEXT:          },
-# CHECK-NEXT:          "start": {
-# CHECK-NEXT:            "character": 7,
-# CHECK-NEXT:            "line": 0
-# CHECK-NEXT:          }
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "severity": 3
-# CHECK-NEXT:      }
-# CHECK-NEXT:    ],
-# CHECK-NEXT:    "uri": "file://{{.*}}/foo.c"
-# CHECK-NEXT:  }
----
-{"jsonrpc":"2.0","id":4,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/diagnostics-notes.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/diagnostics-notes.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/diagnostics-notes.test (original)
+++ clang-tools-extra/trunk/test/clangd/diagnostics-notes.test (removed)
@@ -1,48 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{"textDocument":{"publishDiagnostics":{"relatedInformation":true}}},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo.cc","languageId":"cpp","version":1,"text":"int x;\nint x;"}}}
-#      CHECK:  "method": "textDocument/publishDiagnostics",
-# CHECK-NEXT:  "params": {
-# CHECK-NEXT:    "diagnostics": [
-# CHECK-NEXT:      {
-# CHECK-NEXT:        "code": "redefinition",
-# CHECK-NEXT:        "message": "Redefinition of 'x'",
-# CHECK-NEXT:        "range": {
-# CHECK-NEXT:          "end": {
-# CHECK-NEXT:            "character": 5,
-# CHECK-NEXT:            "line": 1
-# CHECK-NEXT:          },
-# CHECK-NEXT:          "start": {
-# CHECK-NEXT:            "character": 4,
-# CHECK-NEXT:            "line": 1
-# CHECK-NEXT:          }
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "relatedInformation": [
-# CHECK-NEXT:          {
-# CHECK-NEXT:            "location": {
-# CHECK-NEXT:              "range": {
-# CHECK-NEXT:                "end": {
-# CHECK-NEXT:                  "character": 5,
-# CHECK-NEXT:                  "line": 0
-# CHECK-NEXT:                },
-# CHECK-NEXT:                "start": {
-# CHECK-NEXT:                  "character": 4,
-# CHECK-NEXT:                  "line": 0
-# CHECK-NEXT:                }
-# CHECK-NEXT:              },
-# CHECK-NEXT:              "uri": "{{.*}}foo.cc"
-# CHECK-NEXT:            },
-# CHECK-NEXT:            "message": "Previous definition is here"
-# CHECK-NEXT:          }
-# CHECK-NEXT:        ],
-# CHECK-NEXT:        "severity": 1,
-# CHECK-NEXT:        "source": "clang"
-# CHECK-NEXT:      }
-# CHECK-NEXT:    ],
-# CHECK-NEXT:    "uri": "file://{{.*}}/foo.cc"
-# CHECK-NEXT:  }
----
-{"jsonrpc":"2.0","id":5,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/diagnostics.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/diagnostics.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/diagnostics.test (original)
+++ clang-tools-extra/trunk/test/clangd/diagnostics.test (removed)
@@ -1,55 +0,0 @@
-# RUN: clangd -lit-test -clang-tidy-checks=bugprone-sizeof-expression < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo.c","languageId":"c","version":1,"text":"void main() {\n(void)sizeof(42);\n}"}}}
-#      CHECK:  "method": "textDocument/publishDiagnostics",
-# CHECK-NEXT:  "params": {
-# CHECK-NEXT:    "diagnostics": [
-# CHECK-NEXT:      {
-# CHECK-NEXT:        "code": "-Wmain-return-type",
-# CHECK-NEXT:        "message": "Return type of 'main' is not 'int' (fix available)",
-# CHECK-NEXT:        "range": {
-# CHECK-NEXT:          "end": {
-# CHECK-NEXT:            "character": 4,
-# CHECK-NEXT:            "line": 0
-# CHECK-NEXT:          },
-# CHECK-NEXT:          "start": {
-# CHECK-NEXT:            "character": 0,
-# CHECK-NEXT:            "line": 0
-# CHECK-NEXT:          }
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "severity": 2,
-# CHECK-NEXT:        "source": "clang"
-# CHECK-NEXT:      },
-# CHECK-NEXT:      {
-# CHECK-NEXT:        "code": "bugprone-sizeof-expression",
-# CHECK-NEXT:        "message": "Suspicious usage of 'sizeof(K)'; did you mean 'K'?",
-# CHECK-NEXT:        "range": {
-# CHECK-NEXT:          "end": {
-# CHECK-NEXT:            "character": 12,
-# CHECK-NEXT:            "line": 1
-# CHECK-NEXT:          },
-# CHECK-NEXT:          "start": {
-# CHECK-NEXT:            "character": 6,
-# CHECK-NEXT:            "line": 1
-# CHECK-NEXT:          }
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "severity": 2,
-# CHECK-NEXT:        "source": "clang-tidy"
-# CHECK-NEXT:      }
-# CHECK-NEXT:    ],
-# CHECK-NEXT:    "uri": "file://{{.*}}/foo.c"
-# CHECK-NEXT:  }
----
-{"jsonrpc":"2.0","id":2,"method":"sync","params":null}
----
-{"jsonrpc":"2.0","method":"textDocument/didClose","params":{"textDocument":{"uri":"test:///foo.c"}}}
-#      CHECK:  "method": "textDocument/publishDiagnostics",
-# CHECK-NEXT:  "params": {
-# CHECK-NEXT:    "diagnostics": [],
-# CHECK-NEXT:    "uri": "file://{{.*}}/foo.c"
-# CHECK-NEXT:  }
----
-{"jsonrpc":"2.0","id":5,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/did-change-configuration-params.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/did-change-configuration-params.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/did-change-configuration-params.test (original)
+++ clang-tools-extra/trunk/test/clangd/did-change-configuration-params.test (removed)
@@ -1,56 +0,0 @@
-# RUN: clangd -compile_args_from=lsp -lit-test < %s 2> %t | FileCheck -strict-whitespace %s
-# RUN: cat %t | FileCheck --check-prefix=ERR %s
-# UNSUPPORTED: windows-gnu,windows-msvc
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"workspace/didChangeConfiguration","params":{"settings":{"compilationDatabaseChanges":{"/clangd-test/foo.c": {"workingDirectory":"/clangd-test", "compilationCommand": ["clang", "-c", "foo.c"]}}}}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo.c","languageId":"c","version":1,"text":"int main() { int i; return i; }"}}}
-#      CHECK:  "method": "textDocument/publishDiagnostics",
-# CHECK-NEXT:  "params": {
-# CHECK-NEXT:    "diagnostics": [],
-# CHECK-NEXT:    "uri": "file://{{.*}}/foo.c"
-# CHECK-NEXT:  }
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///bar.c","languageId":"c","version":1,"text":"int main() { int i; return i; }"}}}
-#      CHECK:  "method": "textDocument/publishDiagnostics",
-# CHECK-NEXT:  "params": {
-# CHECK-NEXT:    "diagnostics": [],
-# CHECK-NEXT:    "uri": "file://{{.*}}/bar.c"
-# CHECK-NEXT:  }
----
-{"jsonrpc":"2.0","method":"workspace/didChangeConfiguration","params":{"settings":{"compilationDatabaseChanges":{"/clangd-test/foo.c": {"workingDirectory":"/clangd-test2", "compilationCommand": ["clang", "-c", "foo.c", "-Wall", "-Werror"]}}}}}
-#      CHECK:  "method": "textDocument/publishDiagnostics",
-# CHECK-NEXT:  "params": {
-# CHECK-NEXT:    "diagnostics": [
-# CHECK-NEXT:      {
-# CHECK-NEXT:        "code": "-Wuninitialized",
-# CHECK-NEXT:        "message": "Variable 'i' is uninitialized when used here (fix available)",
-# CHECK-NEXT:        "range": {
-# CHECK-NEXT:          "end": {
-# CHECK-NEXT:            "character": 28,
-# CHECK-NEXT:            "line": 0
-# CHECK-NEXT:          },
-# CHECK-NEXT:          "start": {
-# CHECK-NEXT:            "character": 27,
-# CHECK-NEXT:            "line": 0
-# CHECK-NEXT:          }
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "severity": 1,
-# CHECK-NEXT:        "source": "clang"
-# CHECK-NEXT:      }
-# CHECK-NEXT:    ],
-# CHECK-NEXT:    "uri": "file://{{.*}}/foo.c"
-# CHECK-NEXT:  }
-#
-# ERR: Updating file {{.*}}foo.c with command
-# ERR: [{{.*}}clangd-test2]
-# ERR: clang -c foo.c -Wall -Werror
-# Don't reparse the second file:
-# ERR: Skipping rebuild of the AST for {{.*}}bar.c
----
-{"jsonrpc":"2.0","id":5,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}
-
-

Removed: clang-tools-extra/trunk/test/clangd/execute-command.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/execute-command.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/execute-command.test (original)
+++ clang-tools-extra/trunk/test/clangd/execute-command.test (removed)
@@ -1,68 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo.c","languageId":"c","version":1,"text":"int main(int i, char **a) { if (i = 2) {}}"}}}
-#      CHECK:  "method": "textDocument/publishDiagnostics",
-# CHECK-NEXT:  "params": {
-# CHECK-NEXT:    "diagnostics": [
-# CHECK-NEXT:      {
-# CHECK-NEXT:        "code": "-Wparentheses",
-# CHECK-NEXT:        "message": "Using the result of an assignment as a condition without parentheses (fixes available)",
-# CHECK-NEXT:        "range": {
-# CHECK-NEXT:          "end": {
-# CHECK-NEXT:            "character": 37,
-# CHECK-NEXT:            "line": 0
-# CHECK-NEXT:          },
-# CHECK-NEXT:          "start": {
-# CHECK-NEXT:            "character": 32,
-# CHECK-NEXT:            "line": 0
-# CHECK-NEXT:          }
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "severity": 2,
-# CHECK-NEXT:        "source": "clang"
-# CHECK-NEXT:      }
-# CHECK-NEXT:    ],
-# CHECK-NEXT:    "uri": "file://{{.*}}/foo.c"
-# CHECK-NEXT:  }
----
-# No command name
-{"jsonrpc":"2.0","id":3,"method":"workspace/executeCommand","params":{}}
----
-# Invalid, non-scalar command name
-{"jsonrpc":"2.0","id":4,"method":"workspace/executeCommand","params":{"command": {}}}
----
-{"jsonrpc":"2.0","id":5,"method":"workspace/executeCommand","params":{"command":"clangd.applyFix","custom":"foo", "arguments":[{"changes":{"test:///foo.c":[{"range":{"start":{"line":0,"character":32},"end":{"line":0,"character":32}},"newText":"("},{"range":{"start":{"line":0,"character":37},"end":{"line":0,"character":37}},"newText":")"}]}}]}}
----
-# Arguments not a sequence.
-{"jsonrpc":"2.0","id":6,"method":"workspace/executeCommand","params":{"command":"clangd.applyFix","arguments":"foo"}}
----
-# Unknown command.
-{"jsonrpc":"2.0","id":7,"method":"workspace/executeCommand","params":{"command":"mycommand"}}
----
-# ApplyFix argument not a mapping node.
-{"jsonrpc":"2.0","id":8,"method":"workspace/executeCommand","params":{"command":"clangd.applyFix","custom":"foo", "arguments":[""]}}
----
-# Custom field in WorkspaceEdit
-{"jsonrpc":"2.0","id":9,"method":"workspace/executeCommand","params":{"command":"clangd.applyFix","arguments":[{"custom":"foo", "changes":{"test:///foo.c":[{"range":{"start":{"line":0,"character":32},"end":{"line":0,"character":32}},"newText":"("},{"range":{"start":{"line":0,"character":37},"end":{"line":0,"character":37}},"newText":")"}]}}]}}
----
-# changes in WorkspaceEdit with no mapping node
-{"jsonrpc":"2.0","id":10,"method":"workspace/executeCommand","params":{"command":"clangd.applyFix","arguments":[{"changes":"foo"}]}}
----
-# Custom field in WorkspaceEditChange
-{"jsonrpc":"2.0","id":11,"method":"workspace/executeCommand","params":{"command":"clangd.applyFix","arguments":[{"changes":{"test:///foo.c":[{"range":{"start":{"line":0,"character":32},"end":{"line":0,"character":32}},"newText":"("},{"range":{"start":{"line":0,"character":37},"end":{"line":0,"character":37}},"newText":")"}], "custom":"foo"}}]}}
----
-# No sequence node for TextEdits
-{"jsonrpc":"2.0","id":12,"method":"workspace/executeCommand","params":{"command":"clangd.applyFix","arguments":[{"changes":{"test:///foo.c":"bar"}}]}}
----
-# No mapping node for TextEdit
-{"jsonrpc":"2.0","id":13,"method":"workspace/executeCommand","params":{"command":"clangd.applyFix","arguments":[{"changes":{"test:///foo.c":[""]}}]}}
----
-# TextEdit not decoded
-{"jsonrpc":"2.0","id":14,"method":"workspace/executeCommand","params":{"command":"clangd.applyFix","arguments":[{"changes":{"test:///foo.c":[{"range":{"start":{"line":0,"character":32},"end":{"line":0,"character":32}},"newText":"("},{"range":"","newText":")"}]}}]}}
----
-# Command name after arguments
-{"jsonrpc":"2.0","id":9,"method":"workspace/executeCommand","params":{"arguments":[{"custom":"foo", "changes":{"test:///foo.c":[{"range":{"start":{"line":0,"character":32},"end":{"line":0,"character":32}},"newText":"("},{"range":{"start":{"line":0,"character":37},"end":{"line":0,"character":37}},"newText":")"}]}}],"command":"clangd.applyFix"}}
----
-{"jsonrpc":"2.0","id":3,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/exit-with-shutdown.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/exit-with-shutdown.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/exit-with-shutdown.test (original)
+++ clang-tools-extra/trunk/test/clangd/exit-with-shutdown.test (removed)
@@ -1,6 +0,0 @@
-# RUN: clangd -lit-test < %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","id":3,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/exit-without-shutdown.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/exit-without-shutdown.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/exit-without-shutdown.test (original)
+++ clang-tools-extra/trunk/test/clangd/exit-without-shutdown.test (removed)
@@ -1,4 +0,0 @@
-# RUN: not clangd -lit-test < %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/filestatus.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/filestatus.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/filestatus.test (original)
+++ clang-tools-extra/trunk/test/clangd/filestatus.test (removed)
@@ -1,13 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"initializationOptions":{"clangdFileStatus": true},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///main.cpp","languageId":"cpp","version":1,"text":"int x; int y = x;"}}}
-#      CHECK:  "method": "textDocument/clangd.fileStatus",
-# CHECK-NEXT:  "params": {
-# CHECK-NEXT:    "state": "parsing includes",
-# CHECK-NEXT:    "uri": "{{.*}}/main.cpp"
-# CHECK-NEXT:  }
----
-{"jsonrpc":"2.0","id":3,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/fixits-codeaction.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/fixits-codeaction.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/fixits-codeaction.test (original)
+++ clang-tools-extra/trunk/test/clangd/fixits-codeaction.test (removed)
@@ -1,132 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{"textDocument":{"codeAction":{"codeActionLiteralSupport":{}}}},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo.c","languageId":"c","version":1,"text":"int main(int i, char **a) { if (i = 2) {}}"}}}
-#      CHECK:    "method": "textDocument/publishDiagnostics",
-# CHECK-NEXT:  "params": {
-# CHECK-NEXT:    "diagnostics": [
-# CHECK-NEXT:      {
-# CHECK-NEXT:        "code": "-Wparentheses",
-# CHECK-NEXT:        "message": "Using the result of an assignment as a condition without parentheses (fixes available)",
-# CHECK-NEXT:        "range": {
-# CHECK-NEXT:          "end": {
-# CHECK-NEXT:            "character": 37,
-# CHECK-NEXT:            "line": 0
-# CHECK-NEXT:          },
-# CHECK-NEXT:          "start": {
-# CHECK-NEXT:            "character": 32,
-# CHECK-NEXT:            "line": 0
-# CHECK-NEXT:          }
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "severity": 2,
-# CHECK-NEXT:        "source": "clang"
-# CHECK-NEXT:      }
-# CHECK-NEXT:    ],
-# CHECK-NEXT:    "uri": "file://{{.*}}/foo.c"
-# CHECK-NEXT:  }
----
-{"jsonrpc":"2.0","id":2,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"test:///foo.c"},"range":{"start":{"line":0,"character":13},"end":{"line":0,"character":35}},"context":{"diagnostics":[{"range":{"start": {"line": 0, "character": 32}, "end": {"line": 0, "character": 37}},"severity":2,"message":"Using the result of an assignment as a condition without parentheses (fixes available)", "code": "-Wparentheses", "source": "clang"}]}}}
-#      CHECK:  "id": 2,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": [
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "diagnostics": [
-# CHECK-NEXT:        {
-# CHECK-NEXT:          "code": "-Wparentheses",
-# CHECK-NEXT:          "message": "Using the result of an assignment as a condition without parentheses (fixes available)",
-# CHECK-NEXT:          "range": {
-# CHECK-NEXT:            "end": {
-# CHECK-NEXT:              "character": 37,
-# CHECK-NEXT:              "line": 0
-# CHECK-NEXT:            },
-# CHECK-NEXT:            "start": {
-# CHECK-NEXT:              "character": 32,
-# CHECK-NEXT:              "line": 0
-# CHECK-NEXT:            }
-# CHECK-NEXT:          },
-# CHECK-NEXT:          "severity": 2,
-# CHECK-NEXT:          "source": "clang"
-# CHECK-NEXT:        }
-# CHECK-NEXT:      ],
-# CHECK-NEXT:      "edit": {
-# CHECK-NEXT:        "changes": {
-# CHECK-NEXT:          "file://{{.*}}/foo.c": [
-# CHECK-NEXT:            {
-# CHECK-NEXT:              "newText": "(",
-# CHECK-NEXT:              "range": {
-# CHECK-NEXT:                "end": {
-# CHECK-NEXT:                  "character": 32,
-# CHECK-NEXT:                  "line": 0
-# CHECK-NEXT:                },
-# CHECK-NEXT:                "start": {
-# CHECK-NEXT:                  "character": 32,
-# CHECK-NEXT:                  "line": 0
-# CHECK-NEXT:                }
-# CHECK-NEXT:              }
-# CHECK-NEXT:            },
-# CHECK-NEXT:            {
-# CHECK-NEXT:              "newText": ")",
-# CHECK-NEXT:              "range": {
-# CHECK-NEXT:                "end": {
-# CHECK-NEXT:                  "character": 37,
-# CHECK-NEXT:                  "line": 0
-# CHECK-NEXT:                },
-# CHECK-NEXT:                "start": {
-# CHECK-NEXT:                  "character": 37,
-# CHECK-NEXT:                  "line": 0
-# CHECK-NEXT:                }
-# CHECK-NEXT:              }
-# CHECK-NEXT:            }
-# CHECK-NEXT:          ]
-# CHECK-NEXT:        }
-# CHECK-NEXT:      },
-# CHECK-NEXT:      "kind": "quickfix",
-# CHECK-NEXT:      "title": "place parentheses around the assignment to silence this warning"
-# CHECK-NEXT:    },
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "diagnostics": [
-# CHECK-NEXT:        {
-# CHECK-NEXT:          "code": "-Wparentheses",
-# CHECK-NEXT:          "message": "Using the result of an assignment as a condition without parentheses (fixes available)",
-# CHECK-NEXT:          "range": {
-# CHECK-NEXT:            "end": {
-# CHECK-NEXT:              "character": 37,
-# CHECK-NEXT:              "line": 0
-# CHECK-NEXT:            },
-# CHECK-NEXT:            "start": {
-# CHECK-NEXT:              "character": 32,
-# CHECK-NEXT:              "line": 0
-# CHECK-NEXT:            }
-# CHECK-NEXT:          },
-# CHECK-NEXT:          "severity": 2,
-# CHECK-NEXT:          "source": "clang"
-# CHECK-NEXT:        }
-# CHECK-NEXT:      ],
-# CHECK-NEXT:      "edit": {
-# CHECK-NEXT:        "changes": {
-# CHECK-NEXT:          "file://{{.*}}/foo.c": [
-# CHECK-NEXT:            {
-# CHECK-NEXT:              "newText": "==",
-# CHECK-NEXT:              "range": {
-# CHECK-NEXT:                "end": {
-# CHECK-NEXT:                  "character": 35,
-# CHECK-NEXT:                  "line": 0
-# CHECK-NEXT:                },
-# CHECK-NEXT:                "start": {
-# CHECK-NEXT:                  "character": 34,
-# CHECK-NEXT:                  "line": 0
-# CHECK-NEXT:                }
-# CHECK-NEXT:              }
-# CHECK-NEXT:            }
-# CHECK-NEXT:          ]
-# CHECK-NEXT:        }
-# CHECK-NEXT:      },
-# CHECK-NEXT:      "kind": "quickfix",
-# CHECK-NEXT:      "title": "use '==' to turn this assignment into an equality comparison"
-# CHECK-NEXT:    }
-# CHECK-NEXT:  ]
----
-{"jsonrpc":"2.0","id":4,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}
-

Removed: clang-tools-extra/trunk/test/clangd/fixits-command.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/fixits-command.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/fixits-command.test (original)
+++ clang-tools-extra/trunk/test/clangd/fixits-command.test (removed)
@@ -1,212 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo.c","languageId":"c","version":1,"text":"int main(int i, char **a) { if (i = 2) {}}"}}}
-#      CHECK:    "method": "textDocument/publishDiagnostics",
-# CHECK-NEXT:  "params": {
-# CHECK-NEXT:    "diagnostics": [
-# CHECK-NEXT:      {
-# CHECK-NEXT:        "code": "-Wparentheses",
-# CHECK-NEXT:        "message": "Using the result of an assignment as a condition without parentheses (fixes available)",
-# CHECK-NEXT:        "range": {
-# CHECK-NEXT:          "end": {
-# CHECK-NEXT:            "character": 37,
-# CHECK-NEXT:            "line": 0
-# CHECK-NEXT:          },
-# CHECK-NEXT:          "start": {
-# CHECK-NEXT:            "character": 32,
-# CHECK-NEXT:            "line": 0
-# CHECK-NEXT:          }
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "severity": 2,
-# CHECK-NEXT:        "source": "clang"
-# CHECK-NEXT:      }
-# CHECK-NEXT:    ],
-# CHECK-NEXT:    "uri": "file://{{.*}}/foo.c"
-# CHECK-NEXT:  }
----
-{"jsonrpc":"2.0","id":2,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"test:///foo.c"},"range":{"start":{"line":0,"character":13},"end":{"line":0,"character":35}},"context":{"diagnostics":[{"range":{"start": {"line": 0, "character": 32}, "end": {"line": 0, "character": 37}},"severity":2,"message":"Using the result of an assignment as a condition without parentheses (fixes available)"}]}}}
-#      CHECK:  "id": 2,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": [
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "arguments": [
-# CHECK-NEXT:        {
-# CHECK-NEXT:          "changes": {
-# CHECK-NEXT:            "file://{{.*}}/foo.c": [
-# CHECK-NEXT:              {
-# CHECK-NEXT:                "newText": "(",
-# CHECK-NEXT:                "range": {
-# CHECK-NEXT:                  "end": {
-# CHECK-NEXT:                    "character": 32,
-# CHECK-NEXT:                    "line": 0
-# CHECK-NEXT:                  },
-# CHECK-NEXT:                  "start": {
-# CHECK-NEXT:                    "character": 32,
-# CHECK-NEXT:                    "line": 0
-# CHECK-NEXT:                  }
-# CHECK-NEXT:                }
-# CHECK-NEXT:              },
-# CHECK-NEXT:              {
-# CHECK-NEXT:                "newText": ")",
-# CHECK-NEXT:                "range": {
-# CHECK-NEXT:                  "end": {
-# CHECK-NEXT:                    "character": 37,
-# CHECK-NEXT:                    "line": 0
-# CHECK-NEXT:                  },
-# CHECK-NEXT:                  "start": {
-# CHECK-NEXT:                    "character": 37,
-# CHECK-NEXT:                    "line": 0
-# CHECK-NEXT:                  }
-# CHECK-NEXT:                }
-# CHECK-NEXT:              }
-# CHECK-NEXT:            ]
-# CHECK-NEXT:          }
-# CHECK-NEXT:        }
-# CHECK-NEXT:      ],
-# CHECK-NEXT:      "command": "clangd.applyFix",
-# CHECK-NEXT:      "title": "Apply fix: place parentheses around the assignment to silence this warning"
-# CHECK-NEXT:    },
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "arguments": [
-# CHECK-NEXT:        {
-# CHECK-NEXT:          "changes": {
-# CHECK-NEXT:            "file://{{.*}}/foo.c": [
-# CHECK-NEXT:              {
-# CHECK-NEXT:                "newText": "==",
-# CHECK-NEXT:                "range": {
-# CHECK-NEXT:                  "end": {
-# CHECK-NEXT:                    "character": 35,
-# CHECK-NEXT:                    "line": 0
-# CHECK-NEXT:                  },
-# CHECK-NEXT:                  "start": {
-# CHECK-NEXT:                    "character": 34,
-# CHECK-NEXT:                    "line": 0
-# CHECK-NEXT:                  }
-# CHECK-NEXT:                }
-# CHECK-NEXT:              }
-# CHECK-NEXT:            ]
-# CHECK-NEXT:          }
-# CHECK-NEXT:        }
-# CHECK-NEXT:      ],
-# CHECK-NEXT:      "command": "clangd.applyFix",
-# CHECK-NEXT:      "title": "Apply fix: use '==' to turn this assignment into an equality comparison"
-# CHECK-NEXT:    }
-# CHECK-NEXT:  ]
----
-{"jsonrpc":"2.0","id":3,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"test:///foo.c"},"range":{"start":{"line":0,"character":13},"end":{"line":0,"character":35}},"context":{"diagnostics":[{"range":{"start": {"line": 0, "character": 32}, "end": {"line": 0, "character": 37}},"severity":2,"message":"Using the result of an assignment as a condition without parentheses (fixes available)"}]}}}
-# Make sure unused "code" and "source" fields ignored gracefully
-#      CHECK:  "id": 3,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": [
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "arguments": [
-# CHECK-NEXT:        {
-# CHECK-NEXT:          "changes": {
-# CHECK-NEXT:            "file://{{.*}}/foo.c": [
-# CHECK-NEXT:              {
-# CHECK-NEXT:                "newText": "(",
-# CHECK-NEXT:                "range": {
-# CHECK-NEXT:                  "end": {
-# CHECK-NEXT:                    "character": 32,
-# CHECK-NEXT:                    "line": 0
-# CHECK-NEXT:                  },
-# CHECK-NEXT:                  "start": {
-# CHECK-NEXT:                    "character": 32,
-# CHECK-NEXT:                    "line": 0
-# CHECK-NEXT:                  }
-# CHECK-NEXT:                }
-# CHECK-NEXT:              },
-# CHECK-NEXT:              {
-# CHECK-NEXT:                "newText": ")",
-# CHECK-NEXT:                "range": {
-# CHECK-NEXT:                  "end": {
-# CHECK-NEXT:                    "character": 37,
-# CHECK-NEXT:                    "line": 0
-# CHECK-NEXT:                  },
-# CHECK-NEXT:                  "start": {
-# CHECK-NEXT:                    "character": 37,
-# CHECK-NEXT:                    "line": 0
-# CHECK-NEXT:                  }
-# CHECK-NEXT:                }
-# CHECK-NEXT:              }
-# CHECK-NEXT:            ]
-# CHECK-NEXT:          }
-# CHECK-NEXT:        }
-# CHECK-NEXT:      ],
-# CHECK-NEXT:      "command": "clangd.applyFix",
-# CHECK-NEXT:      "title": "Apply fix: place parentheses around the assignment to silence this warning"
-# CHECK-NEXT:    },
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "arguments": [
-# CHECK-NEXT:        {
-# CHECK-NEXT:          "changes": {
-# CHECK-NEXT:            "file://{{.*}}/foo.c": [
-# CHECK-NEXT:              {
-# CHECK-NEXT:                "newText": "==",
-# CHECK-NEXT:                "range": {
-# CHECK-NEXT:                  "end": {
-# CHECK-NEXT:                    "character": 35,
-# CHECK-NEXT:                    "line": 0
-# CHECK-NEXT:                  },
-# CHECK-NEXT:                  "start": {
-# CHECK-NEXT:                    "character": 34,
-# CHECK-NEXT:                    "line": 0
-# CHECK-NEXT:                  }
-# CHECK-NEXT:                }
-# CHECK-NEXT:              }
-# CHECK-NEXT:            ]
-# CHECK-NEXT:          }
-# CHECK-NEXT:        }
-# CHECK-NEXT:      ],
-# CHECK-NEXT:      "command": "clangd.applyFix",
-# CHECK-NEXT:      "title": "Apply fix: use '==' to turn this assignment into an equality comparison"
-# CHECK-NEXT:    }
-# CHECK-NEXT:  ]
----
-{"jsonrpc":"2.0","id":4,"method":"workspace/executeCommand","params":{"command":"clangd.applyFix","arguments":[{"changes":{"test:///foo.c":[{"range":{"start":{"line":0,"character":32},"end":{"line":0,"character":32}},"newText":"("},{"range":{"start":{"line":0,"character":37},"end":{"line":0,"character":37}},"newText":")"}]}}]}}
-#      CHECK:  "id": 4,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": "Fix applied."
-#
-#      CHECK:  "id": 0,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "method": "workspace/applyEdit",
-# CHECK-NEXT:  "params": {
-# CHECK-NEXT:    "edit": {
-# CHECK-NEXT:      "changes": {
-# CHECK-NEXT:        "{{.*}}/foo.c": [
-# CHECK-NEXT:          {
-# CHECK-NEXT:            "newText": "(",
-# CHECK-NEXT:            "range": {
-# CHECK-NEXT:              "end": {
-# CHECK-NEXT:                "character": 32,
-# CHECK-NEXT:                "line": 0
-# CHECK-NEXT:              },
-# CHECK-NEXT:              "start": {
-# CHECK-NEXT:                "character": 32,
-# CHECK-NEXT:                "line": 0
-# CHECK-NEXT:              }
-# CHECK-NEXT:            }
-# CHECK-NEXT:          },
-# CHECK-NEXT:          {
-# CHECK-NEXT:            "newText": ")",
-# CHECK-NEXT:            "range": {
-# CHECK-NEXT:              "end": {
-# CHECK-NEXT:                "character": 37,
-# CHECK-NEXT:                "line": 0
-# CHECK-NEXT:              },
-# CHECK-NEXT:              "start": {
-# CHECK-NEXT:                "character": 37,
-# CHECK-NEXT:                "line": 0
-# CHECK-NEXT:              }
-# CHECK-NEXT:            }
-# CHECK-NEXT:          }
-# CHECK-NEXT:        ]
-# CHECK-NEXT:      }
-# CHECK-NEXT:    }
-# CHECK-NEXT:  }
----
-{"jsonrpc":"2.0","id":4,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/fixits-embed-in-diagnostic.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/fixits-embed-in-diagnostic.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/fixits-embed-in-diagnostic.test (original)
+++ clang-tools-extra/trunk/test/clangd/fixits-embed-in-diagnostic.test (removed)
@@ -1,69 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{"textDocument":{"publishDiagnostics":{"codeActionsInline":true}}},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo.c","languageId":"c","version":1,"text":"struct Point {}; union Point p;"}}}
-#      CHECK:  "method": "textDocument/publishDiagnostics",
-# CHECK-NEXT:  "params": {
-# CHECK-NEXT:    "diagnostics": [
-# CHECK-NEXT:      {
-# CHECK-NEXT:        "code": "use_with_wrong_tag",
-# CHECK-NEXT:        "codeActions": [
-# CHECK-NEXT:          {
-# CHECK-NEXT:            "edit": {
-# CHECK-NEXT:              "changes": {
-# CHECK-NEXT:                "file://{{.*}}/foo.c": [
-# CHECK-NEXT:                  {
-# CHECK-NEXT:                    "newText": "struct",
-# CHECK-NEXT:                    "range": {
-# CHECK-NEXT:                      "end": {
-# CHECK-NEXT:                        "character": 22,
-# CHECK-NEXT:                        "line": 0
-# CHECK-NEXT:                      },
-# CHECK-NEXT:                      "start": {
-# CHECK-NEXT:                        "character": 17,
-# CHECK-NEXT:                        "line": 0
-# CHECK-NEXT:                      }
-# CHECK-NEXT:                    }
-# CHECK-NEXT:                  }
-# CHECK-NEXT:                ]
-# CHECK-NEXT:              }
-# CHECK-NEXT:            },
-# CHECK-NEXT:            "kind": "quickfix",
-# CHECK-NEXT:            "title": "change 'union' to 'struct'"
-# CHECK-NEXT:          }
-# CHECK-NEXT:        ],
-# CHECK-NEXT:        "message": "Use of 'Point' with tag type that does not match previous declaration (fix available)\n\nfoo.c:1:8: note: previous use is here",
-# CHECK-NEXT:        "range": {
-# CHECK-NEXT:          "end": {
-# CHECK-NEXT:            "character": 22,
-# CHECK-NEXT:            "line": 0
-# CHECK-NEXT:          },
-# CHECK-NEXT:          "start": {
-# CHECK-NEXT:            "character": 17,
-# CHECK-NEXT:            "line": 0
-# CHECK-NEXT:          }
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "severity": 1,
-# CHECK-NEXT:        "source": "clang"
-# CHECK-NEXT:      },
-# CHECK-NEXT:      {
-# CHECK-NEXT:        "message": "Previous use is here\n\nfoo.c:1:18: error: use of 'Point' with tag type that does not match previous declaration",
-# CHECK-NEXT:        "range": {
-# CHECK-NEXT:          "end": {
-# CHECK-NEXT:            "character": 12,
-# CHECK-NEXT:            "line": 0
-# CHECK-NEXT:          },
-# CHECK-NEXT:          "start": {
-# CHECK-NEXT:            "character": 7,
-# CHECK-NEXT:            "line": 0
-# CHECK-NEXT:          }
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "severity": 3
-# CHECK-NEXT:      }
-# CHECK-NEXT:    ],
-# CHECK-NEXT:    "uri": "file://{{.*}}/foo.c"
-# CHECK-NEXT:  }
----
-{"jsonrpc":"2.0","id":4,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/formatting.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/formatting.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/formatting.test (original)
+++ clang-tools-extra/trunk/test/clangd/formatting.test (removed)
@@ -1,187 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo.c","languageId":"c","version":1,"text":"int foo ( int x ) {\n    x = x+1;\n    return x;\n    }"}}}
----
-{"jsonrpc":"2.0","id":1,"method":"textDocument/rangeFormatting","params":{"textDocument":{"uri":"test:///foo.c"},"range":{"start":{"line":1,"character":4},"end":{"line":1,"character":12}},"options":{"tabSize":4,"insertSpaces":true}}}
-#      CHECK:   "id": 1,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": [
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "newText": "\n  ",
-# CHECK-NEXT:      "range": {
-# CHECK-NEXT:        "end": {
-# CHECK-NEXT:          "character": 4,
-# CHECK-NEXT:          "line": 1
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "start": {
-# CHECK-NEXT:          "character": 19,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        }
-# CHECK-NEXT:      }
-# CHECK-NEXT:    },
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "newText": " ",
-# CHECK-NEXT:      "range": {
-# CHECK-NEXT:        "end": {
-# CHECK-NEXT:          "character": 9,
-# CHECK-NEXT:          "line": 1
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "start": {
-# CHECK-NEXT:          "character": 9,
-# CHECK-NEXT:          "line": 1
-# CHECK-NEXT:        }
-# CHECK-NEXT:      }
-# CHECK-NEXT:    },
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "newText": " ",
-# CHECK-NEXT:      "range": {
-# CHECK-NEXT:        "end": {
-# CHECK-NEXT:          "character": 10,
-# CHECK-NEXT:          "line": 1
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "start": {
-# CHECK-NEXT:          "character": 10,
-# CHECK-NEXT:          "line": 1
-# CHECK-NEXT:        }
-# CHECK-NEXT:      }
-# CHECK-NEXT:    },
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "newText": "\n  ",
-# CHECK-NEXT:      "range": {
-# CHECK-NEXT:        "end": {
-# CHECK-NEXT:          "character": 4,
-# CHECK-NEXT:          "line": 2
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "start": {
-# CHECK-NEXT:          "character": 12,
-# CHECK-NEXT:          "line": 1
-# CHECK-NEXT:        }
-# CHECK-NEXT:      }
-# CHECK-NEXT:    }
-# CHECK-NEXT:  ]
----
-{"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"test:///foo.c","version":5},"contentChanges":[{"text":"int foo ( int x ) {\n  x = x + 1;\n  return x;\n    }"}]}}
-#
-#
----
-{"jsonrpc":"2.0","id":2,"method":"textDocument/rangeFormatting","params":{"textDocument":{"uri":"test:///foo.c"},"range":{"start":{"line":1,"character":2},"end":{"line":1,"character":12}},"options":{"tabSize":4,"insertSpaces":true}}}
-#      CHECK:  "id": 2,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": []
----
-{"jsonrpc":"2.0","id":3,"method":"textDocument/formatting","params":{"textDocument":{"uri":"test:///foo.c"},"options":{"tabSize":4,"insertSpaces":true}}}
-#      CHECK:  "id": 3,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": [
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "newText": "",
-# CHECK-NEXT:      "range": {
-# CHECK-NEXT:        "end": {
-# CHECK-NEXT:          "character": 8,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "start": {
-# CHECK-NEXT:          "character": 7,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        }
-# CHECK-NEXT:      }
-# CHECK-NEXT:    },
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "newText": "",
-# CHECK-NEXT:      "range": {
-# CHECK-NEXT:        "end": {
-# CHECK-NEXT:          "character": 10,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "start": {
-# CHECK-NEXT:          "character": 9,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        }
-# CHECK-NEXT:      }
-# CHECK-NEXT:    },
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "newText": "",
-# CHECK-NEXT:      "range": {
-# CHECK-NEXT:        "end": {
-# CHECK-NEXT:          "character": 16,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "start": {
-# CHECK-NEXT:          "character": 15,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        }
-# CHECK-NEXT:      }
-# CHECK-NEXT:    },
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "newText": "\n",
-# CHECK-NEXT:      "range": {
-# CHECK-NEXT:        "end": {
-# CHECK-NEXT:          "character": 4,
-# CHECK-NEXT:          "line": 3
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "start": {
-# CHECK-NEXT:          "character": 11,
-# CHECK-NEXT:          "line": 2
-# CHECK-NEXT:        }
-# CHECK-NEXT:      }
-# CHECK-NEXT:    }
-# CHECK-NEXT:  ]
----
-{"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"test:///foo.c","version":9},"contentChanges":[{"text":"int foo(int x) {\n  x = x + 1;\n  return x;\n}"}]}}
----
-{"jsonrpc":"2.0","id":4,"method":"textDocument/formatting","params":{"textDocument":{"uri":"test:///foo.c"},"options":{"tabSize":4,"insertSpaces":true}}}
-#      CHECK:  "id": 4,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": []
----
-{"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"test:///foo.c","version":5},"contentChanges":[{"text":"int foo ( int x ) {\n  x = x + 1;\n  return x;\n}"}]}}
----
-{"jsonrpc":"2.0","id":5,"method":"textDocument/onTypeFormatting","params":{"textDocument":{"uri":"test:///foo.c"},"position":{"line":3,"character":1},"ch":"}","options":{"tabSize":4,"insertSpaces":true}}}
-#      CHECK:  "id": 5,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": [
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "newText": "",
-# CHECK-NEXT:      "range": {
-# CHECK-NEXT:        "end": {
-# CHECK-NEXT:          "character": 8,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "start": {
-# CHECK-NEXT:          "character": 7,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        }
-# CHECK-NEXT:      }
-# CHECK-NEXT:    },
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "newText": "",
-# CHECK-NEXT:      "range": {
-# CHECK-NEXT:        "end": {
-# CHECK-NEXT:          "character": 10,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "start": {
-# CHECK-NEXT:          "character": 9,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        }
-# CHECK-NEXT:      }
-# CHECK-NEXT:    },
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "newText": "",
-# CHECK-NEXT:      "range": {
-# CHECK-NEXT:        "end": {
-# CHECK-NEXT:          "character": 16,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "start": {
-# CHECK-NEXT:          "character": 15,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        }
-# CHECK-NEXT:      }
-# CHECK-NEXT:    }
-# CHECK-NEXT:  ]
----
-{"jsonrpc":"2.0","id":6,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/hover.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/hover.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/hover.test (original)
+++ clang-tools-extra/trunk/test/clangd/hover.test (removed)
@@ -1,24 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///main.cpp","languageId":"cpp","version":1,"text":"void foo(); int main() { foo(); }\n"}}}
----
-{"jsonrpc":"2.0","id":1,"method":"textDocument/hover","params":{"textDocument":{"uri":"test:///main.cpp"},"position":{"line":0,"character":27}}}
-#      CHECK:  "id": 1,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": {
-# CHECK-NEXT:    "contents": {
-# CHECK-NEXT:      "kind": "plaintext",
-# CHECK-NEXT:      "value": "Declared in global namespace\n\nvoid foo()"
-# CHECK-NEXT:    }
-# CHECK-NEXT:  }
-# CHECK-NEXT:}
----
-{"jsonrpc":"2.0","id":1,"method":"textDocument/hover","params":{"textDocument":{"uri":"test:///main.cpp"},"position":{"line":0,"character":10}}}
-#      CHECK:  "id": 1,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": null
----
-{"jsonrpc":"2.0","id":3,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/index-tools.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/index-tools.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/index-tools.test (original)
+++ clang-tools-extra/trunk/test/clangd/index-tools.test (removed)
@@ -1,6 +0,0 @@
-# RUN: clangd-indexer %p/Inputs/BenchmarkSource.cpp -- -I%p/Inputs > %t.index
-# FIXME: By default, benchmarks are excluded from the list of default targets hence not built. Find a way to depend on benchmarks to run the next command.
-# REQUIRES: shell
-# RUN: if [ -f %clangd-benchmark-dir/IndexBenchmark ]; then %clangd-benchmark-dir/IndexBenchmark %t.index %p/Inputs/requests.json --benchmark_min_time=0.01 ; fi
-# Pass invalid JSON file and check that IndexBenchmark fails to parse it.
-# RUN: if [ -f %clangd-benchmark-dir/IndexBenchmark ]; then not %clangd-benchmark-dir/IndexBenchmark %t.index %t --benchmark_min_time=0.01 ; fi

Removed: clang-tools-extra/trunk/test/clangd/initialize-params-invalid.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/initialize-params-invalid.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/initialize-params-invalid.test (original)
+++ clang-tools-extra/trunk/test/clangd/initialize-params-invalid.test (removed)
@@ -1,12 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-# Test with invalid initialize request parameters
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":"","rootUri":"test:///workspace","capabilities":{},"trace":"off"}}
-#      CHECK:  "id": 0,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": {
-# CHECK-NEXT:    "capabilities": {
-# ...
----
-{"jsonrpc":"2.0","id":3,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/initialize-params.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/initialize-params.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/initialize-params.test (original)
+++ clang-tools-extra/trunk/test/clangd/initialize-params.test (removed)
@@ -1,53 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-# Test initialize request parameters with rootUri
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootUri":"test:///workspace","capabilities":{},"trace":"off"}}
-#      CHECK:  "id": 0,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": {
-# CHECK-NEXT:    "capabilities": {
-# CHECK-NEXT:      "codeActionProvider": true,
-# CHECK-NEXT:      "completionProvider": {
-# CHECK-NEXT:        "resolveProvider": false,
-# CHECK-NEXT:        "triggerCharacters": [
-# CHECK-NEXT:          ".",
-# CHECK-NEXT:          ">",
-# CHECK-NEXT:          ":"
-# CHECK-NEXT:        ]
-# CHECK-NEXT:      },
-# CHECK-NEXT:      "declarationProvider": true,
-# CHECK-NEXT:      "definitionProvider": true,
-# CHECK-NEXT:      "documentFormattingProvider": true,
-# CHECK-NEXT:      "documentHighlightProvider": true,
-# CHECK-NEXT:      "documentOnTypeFormattingProvider": {
-# CHECK-NEXT:        "firstTriggerCharacter": "}",
-# CHECK-NEXT:        "moreTriggerCharacter": []
-# CHECK-NEXT:      },
-# CHECK-NEXT:      "documentRangeFormattingProvider": true,
-# CHECK-NEXT:      "documentSymbolProvider": true,
-# CHECK-NEXT:      "executeCommandProvider": {
-# CHECK-NEXT:        "commands": [
-# CHECK-NEXT:          "clangd.applyFix",
-# CHECK-NEXT:          "clangd.applyTweak"
-# CHECK-NEXT:        ]
-# CHECK-NEXT:      },
-# CHECK-NEXT:      "hoverProvider": true,
-# CHECK-NEXT:      "referencesProvider": true,
-# CHECK-NEXT:      "renameProvider": true,
-# CHECK-NEXT:      "signatureHelpProvider": {
-# CHECK-NEXT:        "triggerCharacters": [
-# CHECK-NEXT:          "(",
-# CHECK-NEXT:          ","
-# CHECK-NEXT:        ]
-# CHECK-NEXT:      },
-# CHECK-NEXT:      "textDocumentSync": 2,
-# CHECK-NEXT:      "typeHierarchyProvider": true
-# CHECK-NEXT:      "workspaceSymbolProvider": true
-# CHECK-NEXT:    }
-# CHECK-NEXT:  }
----
-{"jsonrpc":"2.0","id":3,"method":"shutdown"}
-#      CHECK:  "id": 3,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": null
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/initialize-sequence.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/initialize-sequence.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/initialize-sequence.test (original)
+++ clang-tools-extra/trunk/test/clangd/initialize-sequence.test (removed)
@@ -1,21 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"workspace/symbol","params":{"query":"std::basic_ostringstream"}}
-#      CHECK:  "error": {
-# CHECK-NEXT:    "code": -32002
-# CHECK-NEXT:    "message": "server not initialized"
-# CHECK-NEXT:  },
-# CHECK-NEXT:  "id": 0,
----
-{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","id":2,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
-#      CHECK:  "error": {
-# CHECK-NEXT:    "code": -32600
-# CHECK-NEXT:    "message": "server already initialized"
-# CHECK-NEXT:  },
-# CHECK-NEXT:  "id": 2,
----
-{"jsonrpc":"2.0","id":3,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}
-

Removed: clang-tools-extra/trunk/test/clangd/input-mirror.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/input-mirror.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/input-mirror.test (original)
+++ clang-tools-extra/trunk/test/clangd/input-mirror.test (removed)
@@ -1,17 +0,0 @@
-# RUN: clangd -pretty -run-synchronously -input-mirror-file %t < %s
-# Note that we have to use '-b' as -input-mirror-file does not have a newline at the end of file.
-# RUN: diff -b %t %s
-# It is absolutely vital that this file has CRLF line endings.
-#
-Content-Length: 125
-
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
-Content-Length: 172
-
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///main.cpp","languageId":"cpp","version":1,"text":"int main() {\nint a;\na;\n}\n"}}}
-Content-Length: 44
-
-{"jsonrpc":"2.0","id":3,"method":"shutdown"}
-Content-Length: 33
-
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/lit.local.cfg
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/lit.local.cfg?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/lit.local.cfg (original)
+++ clang-tools-extra/trunk/test/clangd/lit.local.cfg (removed)
@@ -1,6 +0,0 @@
-import re
-# We rely on the default -std being derived from the filetype.
-# PS4 sets a different -std, and many tests break.
-# FIXME: make our tests less brittle instead.
-if re.match(r'.*-scei-ps4', config.target_triple):
-  config.unsupported = True

Removed: clang-tools-extra/trunk/test/clangd/protocol.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/protocol.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/protocol.test (original)
+++ clang-tools-extra/trunk/test/clangd/protocol.test (removed)
@@ -1,110 +0,0 @@
-# RUN: not clangd -pretty -run-synchronously -enable-test-uri-scheme < %s | FileCheck -strict-whitespace %s
-# RUN: not clangd -pretty -run-synchronously -enable-test-uri-scheme < %s 2>&1 | FileCheck -check-prefix=STDERR %s
-# vim: fileformat=dos
-# It is absolutely vital that this file has CRLF line endings.
-#
-# Note that we invert the test because we intent to let clangd exit prematurely.
-#
-# Test protocol parsing
-Content-Length: 125
-Content-Type: application/vscode-jsonrpc; charset-utf-8
-
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
-# Test message with Content-Type after Content-Length
-#
-#      CHECK:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": {
-#      CHECK:  }
-Content-Length: 246
-
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///main.cpp","languageId":"cpp","version":1,"text":"struct fake { int a, bb, ccc; int f(int i, const float f) const; };\nint main() {\n  fake f;\n  f.\n}\n"}}}
-
-Content-Length: 104
-
-{"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"test:///main.cpp"}}}
-
-Content-Type: application/vscode-jsonrpc; charset-utf-8
-Content-Length: 146
-
-{"jsonrpc":"2.0","id":1,"method":"textDocument/completion","params":{"textDocument":{"uri":"test:/main.cpp"},"position":{"line":3,"character":5}}}
-# Test message with Content-Type before Content-Length
-#
-#      CHECK:  "id": 1,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": {
-# CHECK-NEXT:    "isIncomplete": false,
-# CHECK-NEXT:    "items": [
-#      CHECK:        "filterText": "a",
-# CHECK-NEXT:        "insertText": "a",
-# CHECK-NEXT:        "insertTextFormat": 1,
-# CHECK-NEXT:        "kind": 5,
-# CHECK-NEXT:        "label": " a",
-# CHECK-NEXT:        "sortText": "{{.*}}"
-#      CHECK:    ]
-# CHECK-NEXT:  }
-
-X-Test: Testing
-Content-Type: application/vscode-jsonrpc; charset-utf-8
-Content-Length: 146
-Content-Type: application/vscode-jsonrpc; charset-utf-8
-X-Testing: Test
-
-{"jsonrpc":"2.0","id":2,"method":"textDocument/completion","params":{"textDocument":{"uri":"test:/main.cpp"},"position":{"line":3,"character":5}}}
-
-Content-Type: application/vscode-jsonrpc; charset-utf-8
-Content-Length: 10
-Content-Length: 146
-
-{"jsonrpc":"2.0","id":3,"method":"textDocument/completion","params":{"textDocument":{"uri":"test:/main.cpp"},"position":{"line":3,"character":5}}}
-# Test message with duplicate Content-Length headers
-#
-#      CHECK:  "id": 3,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": {
-# CHECK-NEXT:    "isIncomplete": false,
-# CHECK-NEXT:    "items": [
-#      CHECK:        "filterText": "a",
-# CHECK-NEXT:        "insertText": "a",
-# CHECK-NEXT:        "insertTextFormat": 1,
-# CHECK-NEXT:        "kind": 5,
-# CHECK-NEXT:        "label": " a",
-# CHECK-NEXT:        "sortText": "{{.*}}"
-#      CHECK:    ]
-# CHECK-NEXT:  }
-# STDERR: Warning: Duplicate Content-Length header received. The previous value for this message (10) was ignored.
-
-Content-Type: application/vscode-jsonrpc; charset-utf-8
-Content-Length: 10
-
-{"jsonrpc":"2.0","id":4,"method":"textDocument/completion","params":{"textDocument":{"uri":"test:/main.cpp"},"position":{"line":3,"character":5}}}
-# Test message with malformed Content-Length
-#
-# STDERR: JSON parse error
-# Ensure we recover by sending another (valid) message
-
-Content-Length: 146
-
-{"jsonrpc":"2.0","id":5,"method":"textDocument/completion","params":{"textDocument":{"uri":"test:/main.cpp"},"position":{"line":3,"character":5}}}
-# Test message with Content-Type before Content-Length
-#
-#      CHECK:  "id": 5,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": {
-# CHECK-NEXT:    "isIncomplete": false,
-# CHECK-NEXT:    "items": [
-#      CHECK:        "filterText": "a",
-# CHECK-NEXT:        "insertText": "a",
-# CHECK-NEXT:        "insertTextFormat": 1,
-# CHECK-NEXT:        "kind": 5,
-# CHECK-NEXT:        "label": " a",
-# CHECK-NEXT:        "sortText": "{{.*}}"
-#      CHECK:    ]
-# CHECK-NEXT:  }
-Content-Length: 1024
-
-{"jsonrpc":"2.0","id":5,"method":"textDocument/completion","params":{"textDocument":{"uri":"test:/main.cpp"},"position":{"line":3,"character":5}}}
-# Test message which reads beyond the end of the stream.
-#
-# Ensure this is the last test in the file!
-# STDERR: Input was aborted. Read only {{[0-9]+}} bytes of expected {{[0-9]+}}.
-

Removed: clang-tools-extra/trunk/test/clangd/references.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/references.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/references.test (original)
+++ clang-tools-extra/trunk/test/clangd/references.test (removed)
@@ -1,40 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///main.cpp","languageId":"cpp","version":1,"text":"int x; int y = x;"}}}
----
-{"jsonrpc":"2.0","id":1,"method":"textDocument/references","params":{"textDocument":{"uri":"test:///main.cpp"},"position":{"line":0,"character":4}}}
-#      CHECK:  "id": 1
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": [
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "range": {
-# CHECK-NEXT:        "end": {
-# CHECK-NEXT:          "character": 5,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "start": {
-# CHECK-NEXT:          "character": 4,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        }
-# CHECK-NEXT:      },
-# CHECK-NEXT:      "uri": "{{.*}}/main.cpp"
-# CHECK-NEXT:    },
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "range": {
-# CHECK-NEXT:        "end": {
-# CHECK-NEXT:          "character": 16,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "start": {
-# CHECK-NEXT:          "character": 15,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        }
-# CHECK-NEXT:      },
-# CHECK-NEXT:      "uri": "{{.*}}/main.cpp"
-# CHECK-NEXT:    }
-# CHECK-NEXT:  ]
----
-{"jsonrpc":"2.0","id":3,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/rename.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/rename.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/rename.test (original)
+++ clang-tools-extra/trunk/test/clangd/rename.test (removed)
@@ -1,39 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo.cpp","languageId":"cpp","version":1,"text":"int foo;"}}}
----
-{"jsonrpc":"2.0","id":1,"method":"textDocument/rename","params":{"textDocument":{"uri":"test:///foo.cpp"},"position":{"line":0,"character":5},"newName":"bar"}}
-#      CHECK:  "id": 1,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": {
-# CHECK-NEXT:    "changes": {
-# CHECK-NEXT:      "file://{{.*}}/foo.cpp": [
-# CHECK-NEXT:        {
-# CHECK-NEXT:          "newText": "bar",
-# CHECK-NEXT:          "range": {
-# CHECK-NEXT:            "end": {
-# CHECK-NEXT:              "character": 7
-# CHECK-NEXT:              "line": 0
-# CHECK-NEXT:            },
-# CHECK-NEXT:            "start": {
-# CHECK-NEXT:              "character": 4
-# CHECK-NEXT:              "line": 0
-# CHECK-NEXT:            }
-# CHECK-NEXT:          }
-# CHECK-NEXT:        }
-# CHECK-NEXT:      ]
-# CHECK-NEXT:    }
-# CHECK-NEXT:  }
----
-{"jsonrpc":"2.0","id":2,"method":"textDocument/rename","params":{"textDocument":{"uri":"test:///foo.cpp"},"position":{"line":0,"character":2},"newName":"bar"}}
-#      CHECK:  "error": {
-# CHECK-NEXT:    "code": -32001,
-# CHECK-NEXT:    "message": "there is no symbol at the given location"
-# CHECK-NEXT:  },
-# CHECK-NEXT:  "id": 2,
-# CHECK-NEXT:  "jsonrpc": "2.0"
----
-{"jsonrpc":"2.0","id":3,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/signature-help.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/signature-help.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/signature-help.test (original)
+++ clang-tools-extra/trunk/test/clangd/signature-help.test (removed)
@@ -1,27 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-# Start a session.
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///main.cpp","languageId":"cpp","version":1,"text":"void x(int);\nint main(){\nx("}}}
----
-{"jsonrpc":"2.0","id":1,"method":"textDocument/signatureHelp","params":{"textDocument":{"uri":"test:///main.cpp"},"position":{"line":2,"character":2}}}
-#      CHECK: "id": 1,
-# CHECK-NEXT: "jsonrpc": "2.0",
-# CHECK-NEXT: "result": {
-# CHECK-NEXT:   "activeParameter": 0,
-# CHECK-NEXT:   "activeSignature": 0,
-# CHECK-NEXT:   "signatures": [
-# CHECK-NEXT:     {
-# CHECK-NEXT:       "label": "x(int) -> void",
-# CHECK-NEXT:       "parameters": [
-# CHECK-NEXT:         {
-# CHECK-NEXT:           "label": "int"
-# CHECK-NEXT:         }
-# CHECK-NEXT:       ]
-# CHECK-NEXT:     }
-# CHECK-NEXT:   ]
-# CHECK-NEXT: }
----
-{"jsonrpc":"2.0","id":100000,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/spaces-in-delimited-input.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/spaces-in-delimited-input.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/spaces-in-delimited-input.test (original)
+++ clang-tools-extra/trunk/test/clangd/spaces-in-delimited-input.test (removed)
@@ -1,13 +0,0 @@
-# RUN: clangd -input-style=delimited -run-synchronously < %s 2>&1 | FileCheck %s
-# RUN: clangd -lit-test -run-synchronously < %s 2>&1 | FileCheck %s
-#
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
-
----
-
-{"jsonrpc":"2.0","id":3,"method":"shutdown"}
-
----
-
-{"jsonrpc":"2.0","method":"exit"}
-# CHECK-NOT: JSON parse error

Removed: clang-tools-extra/trunk/test/clangd/symbol-info.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/symbol-info.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/symbol-info.test (original)
+++ clang-tools-extra/trunk/test/clangd/symbol-info.test (removed)
@@ -1,14 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///simple.cpp","languageId":"cpp","version":1,"text":"void foo(); int main() { foo(); }\n"}}}
----
-{"jsonrpc":"2.0","id":1,"method":"textDocument/symbolInfo","params":{"textDocument":{"uri":"test:///simple.cpp"},"position":{"line":0,"character":27}}}
-#      CHECK:    "containerName": null,
-# CHECK-NEXT:    "id": "CA2EBE44A1D76D2A",
-# CHECK-NEXT:    "name": "foo",
-# CHECK-NEXT:    "usr": "c:@F at foo#"
----
-{"jsonrpc":"2.0","id":3,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/symbols.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/symbols.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/symbols.test (original)
+++ clang-tools-extra/trunk/test/clangd/symbols.test (removed)
@@ -1,84 +0,0 @@
-# RUN: clangd --index-file=%S/Inputs/symbols.test.yaml -lit-test < %s | FileCheck %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{"workspace":{"symbol":{"symbolKind":{"valueSet": [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]}}}},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///main.cpp","languageId":"cpp","version":1,"text":"void foo(); int main() { foo(); }\n"}}}
----
-{"jsonrpc":"2.0","id":1,"method":"workspace/symbol","params":{"query":"vector"}}
-#      CHECK:  "id": 1,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:    "result": [
-# CHECK-NEXT:      {
-# CHECK-NEXT:        "containerName": "std",
-# CHECK-NEXT:        "kind": 5,
-# CHECK-NEXT:        "location": {
-# CHECK-NEXT:          "range": {
-# CHECK-NEXT:            "end": {
-# CHECK-NEXT:              "character": {{.*}},
-# CHECK-NEXT:              "line": {{.*}}
-# CHECK-NEXT:            },
-# CHECK-NEXT:            "start": {
-# CHECK-NEXT:              "character": {{.*}},
-# CHECK-NEXT:              "line": {{.*}}
-# CHECK-NEXT:            }
-# CHECK-NEXT:          },
-# CHECK-NEXT:          "uri": "file:///vector.h"
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "name": "vector"
-# CHECK-NEXT:      }
-# CHECK-NEXT:    ]
-# CHECK-NEXT:}
----
-{"jsonrpc":"2.0","id":2,"method":"textDocument/documentSymbol","params":{"textDocument":{"uri":"test:///main.cpp"}}}
-#      CHECK:  "id": 2,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:    "result": [
-# CHECK-NEXT:      {
-# CHECK-NEXT:        "containerName": "",
-# CHECK-NEXT:        "kind": 12,
-# CHECK-NEXT:        "location": {
-# CHECK-NEXT:          "range": {
-# CHECK-NEXT:            "end": {
-# CHECK-NEXT:              "character": {{.*}},
-# CHECK-NEXT:              "line": {{.*}}
-# CHECK-NEXT:            },
-# CHECK-NEXT:            "start": {
-# CHECK-NEXT:              "character": {{.*}},
-# CHECK-NEXT:              "line": {{.*}}
-# CHECK-NEXT:            }
-# CHECK-NEXT:          },
-# CHECK-NEXT:          "uri": "file://{{.*}}/main.cpp"
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "name": "foo"
-# CHECK-NEXT:      }
-# CHECK-NEXT:      {
-# CHECK-NEXT:        "containerName": "",
-# CHECK-NEXT:        "kind": 12,
-# CHECK-NEXT:        "location": {
-# CHECK-NEXT:          "range": {
-# CHECK-NEXT:            "end": {
-# CHECK-NEXT:              "character": {{.*}},
-# CHECK-NEXT:              "line": {{.*}}
-# CHECK-NEXT:            },
-# CHECK-NEXT:            "start": {
-# CHECK-NEXT:              "character": {{.*}},
-# CHECK-NEXT:              "line": {{.*}}
-# CHECK-NEXT:            }
-# CHECK-NEXT:          },
-# CHECK-NEXT:          "uri": "file://{{.*}}/main.cpp"
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "name": "main"
-# CHECK-NEXT:      }
-# CHECK-NEXT:    ]
-# CHECK-NEXT:}
----
-{"jsonrpc":"2.0","id":3,"method":"textDocument/documentSymbol","params":{"textDocument":{"uri":"test:///foo.cpp"}}}
-#      CHECK:  "error": {
-# CHECK-NEXT:    "code": -32602,
-# CHECK-NEXT:    "message": "trying to get AST for non-added document"
-# CHECK-NEXT:  },
-# CHECK-NEXT:  "id": 3,
-# CHECK-NEXT:  "jsonrpc": "2.0"
----
-{"jsonrpc":"2.0","id":3,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/test-uri-posix.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/test-uri-posix.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/test-uri-posix.test (original)
+++ clang-tools-extra/trunk/test/clangd/test-uri-posix.test (removed)
@@ -1,11 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-# UNSUPPORTED: windows-gnu,windows-msvc
-# Test authority-less URI
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo.c","languageId":"c","version":1,"text":"void main() {}"}}}
-# CHECK:    "uri": "file:///clangd-test/foo.c"
----
-{"jsonrpc":"2.0","id":5,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/test-uri-windows.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/test-uri-windows.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/test-uri-windows.test (original)
+++ clang-tools-extra/trunk/test/clangd/test-uri-windows.test (removed)
@@ -1,11 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-# REQUIRES: windows-gnu || windows-msvc
-# Test authority-less URI
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo.c","languageId":"c","version":1,"text":"void main() {}"}}}
-# CHECK:    "uri": "file:///C:/clangd-test/foo.c"
----
-{"jsonrpc":"2.0","id":5,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/textdocument-didchange-fail.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/textdocument-didchange-fail.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/textdocument-didchange-fail.test (original)
+++ clang-tools-extra/trunk/test/clangd/textdocument-didchange-fail.test (removed)
@@ -1,39 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-# RUN: clangd -lit-test -pch-storage=memory < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///main.cpp","languageId":"cpp","version":1,"text":"int main() {}\n"}}}
----
-{"jsonrpc":"2.0","id":1,"method":"textDocument/definition","params":{"textDocument":{"uri":"test:///main.cpp"},"position":{"line":0,"character":6}}}
-#      CHECK:  "id": 1,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": [
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "range": {
-# CHECK-NEXT:        "end": {
-# CHECK-NEXT:          "character": 8,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "start": {
-# CHECK-NEXT:          "character": 4,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        }
-# CHECK-NEXT:      },
-# CHECK-NEXT:      "uri": "file://{{.*}}/clangd-test/main.cpp"
-# CHECK-NEXT:    }
-# CHECK-NEXT:  ]
----
-{"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"test:///main.cpp"},"contentChanges":[{"range":{"start":{"line":100,"character":0},"end":{"line":100,"character":0}},"text": "foo"}]}}
----
-{"jsonrpc":"2.0","id":1,"method":"textDocument/definition","params":{"textDocument":{"uri":"test:///main.cpp"},"position":{"line":0,"character":6}}}
-#      CHECK:  "error": {
-# CHECK-NEXT:    "code": -32602,
-# CHECK-NEXT:    "message": "trying to get AST for non-added document"
-# CHECK-NEXT:  },
-# CHECK-NEXT:  "id": 1,
-# CHECK-NEXT:  "jsonrpc": "2.0"
-# CHECK-NEXT:}
----
-{"jsonrpc":"2.0","id":4,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/too_large.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/too_large.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/too_large.test (original)
+++ clang-tools-extra/trunk/test/clangd/too_large.test (removed)
@@ -1,7 +0,0 @@
-# RUN: not clangd -run-synchronously < %s 2>&1 | FileCheck -check-prefix=STDERR %s
-# vim: fileformat=dos
-# It is absolutely vital that this file has CRLF line endings.
-#
-Content-Length: 2147483648
-
-# STDERR: Refusing to read message

Removed: clang-tools-extra/trunk/test/clangd/trace.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/trace.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/trace.test (original)
+++ clang-tools-extra/trunk/test/clangd/trace.test (removed)
@@ -1,28 +0,0 @@
-# RUN: env CLANGD_TRACE=%t clangd -lit-test < %s && FileCheck %s < %t
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo.c","languageId":"c","version":1,"text":"void main() {}"}}}
-# These assertions are a bit loose, to avoid brittleness.
-# CHECK: {
-# CHECK:   "displayTimeUnit": "ns",
-# CHECK:   "traceEvents": [
-# CHECK:     {
-# CHECK:       "ph": "X",
-# CHECK:       "name": "BuildPreamble",
-# CHECK:       "args": {
-# CHECK:         "File": "{{.*(/|\\)}}foo.c"
-# CHECK:       },
-# CHECK:     }
-# CHECK:     {
-# CHECK:       "ph": "X",
-# CHECK:       "name": "BuildAST",
-# CHECK:       "args": {
-# CHECK:         "File": "{{.*(/|\\)}}foo.c"
-# CHECK:       },
-# CHECK:     }
-# CHECK:   ]
-# CHECK: }
----
-{"jsonrpc":"2.0","id":5,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/tweaks-format.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/tweaks-format.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/tweaks-format.test (original)
+++ clang-tools-extra/trunk/test/clangd/tweaks-format.test (removed)
@@ -1,50 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///main.cc","languageId":"cpp","version":1,"text":"int f() { if (true) { return 1; } else {} }"}}}
----
-{"jsonrpc":"2.0","id":5,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"test:///main.cc"},"range":{"start":{"line":0,"character":11},"end":{"line":0,"character":11}},"context":{"diagnostics":[]}}}
----
-{"jsonrpc":"2.0","id":6,"method":"workspace/executeCommand","params":{"command":"clangd.applyTweak","arguments":[{"file":"test:///main.cc","selection":{"end":{"character":11,"line":0},"start":{"character":11,"line":0}},"tweakID":"SwapIfBranches"}]}}
-#      CHECK:    "newText": "\n  ",
-# CHECK-NEXT:    "range": {
-# CHECK-NEXT:      "end": {
-# CHECK-NEXT:        "character": 10,
-# CHECK-NEXT:        "line": 0
-# CHECK-NEXT:      },
-# CHECK-NEXT:      "start": {
-# CHECK-NEXT:        "character": 9,
-# CHECK-NEXT:        "line": 0
-# CHECK-NEXT:      }
-# CHECK-NEXT:    }
-# CHECK-NEXT:  },
-# CHECK-NEXT:  {
-# CHECK-NEXT:    "newText": "{\n  }",
-# CHECK-NEXT:    "range": {
-# CHECK-NEXT:      "end": {
-# CHECK-NEXT:        "character": 33,
-# CHECK-NEXT:        "line": 0
-# CHECK-NEXT:      },
-# CHECK-NEXT:      "start": {
-# CHECK-NEXT:        "character": 20,
-# CHECK-NEXT:        "line": 0
-# CHECK-NEXT:      }
-# CHECK-NEXT:    }
-# CHECK-NEXT:  },
-# CHECK-NEXT:  {
-# CHECK-NEXT:    "newText": "{\n    return 1;\n  }\n",
-# CHECK-NEXT:    "range": {
-# CHECK-NEXT:      "end": {
-# CHECK-NEXT:        "character": 42,
-# CHECK-NEXT:        "line": 0
-# CHECK-NEXT:      },
-# CHECK-NEXT:      "start": {
-# CHECK-NEXT:        "character": 39,
-# CHECK-NEXT:        "line": 0
-# CHECK-NEXT:      }
-# CHECK-NEXT:    }
-# CHECK-NEXT:  }
----
-{"jsonrpc":"2.0","id":3,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/type-hierarchy.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/type-hierarchy.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/type-hierarchy.test (original)
+++ clang-tools-extra/trunk/test/clangd/type-hierarchy.test (removed)
@@ -1,92 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///main.cpp","languageId":"cpp","version":1,"text":"struct Parent {};\nstruct Child1 : Parent {};\nstruct Child2 : Child1 {};"}}}
----
-{"jsonrpc":"2.0","id":1,"method":"textDocument/typeHierarchy","params":{"textDocument":{"uri":"test:///main.cpp"},"position":{"line":2,"character":11},"direction":1,"resolve":1}}
-#      CHECK:  "id": 1
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": {
-# CHECK-NEXT:    "kind": 23,
-# CHECK-NEXT:    "name": "Child2",
-# CHECK-NEXT:    "parents": [
-# CHECK-NEXT:      {
-# CHECK-NEXT:        "kind": 23,
-# CHECK-NEXT:        "name": "Child1",
-# CHECK-NEXT:        "parents": [
-# CHECK-NEXT:          {
-# CHECK-NEXT:            "kind": 23,
-# CHECK-NEXT:            "name": "Parent",
-# CHECK-NEXT:            "parents": [],
-# CHECK-NEXT:            "range": {
-# CHECK-NEXT:              "end": {
-# CHECK-NEXT:                "character": 15,
-# CHECK-NEXT:                "line": 0
-# CHECK-NEXT:              },
-# CHECK-NEXT:              "start": {
-# CHECK-NEXT:                "character": 0,
-# CHECK-NEXT:                "line": 0
-# CHECK-NEXT:              }
-# CHECK-NEXT:            },
-# CHECK-NEXT:            "selectionRange": {
-# CHECK-NEXT:              "end": {
-# CHECK-NEXT:                "character": 13,
-# CHECK-NEXT:                "line": 0
-# CHECK-NEXT:              },
-# CHECK-NEXT:              "start": {
-# CHECK-NEXT:                "character": 7,
-# CHECK-NEXT:                "line": 0
-# CHECK-NEXT:              }
-# CHECK-NEXT:            },
-# CHECK-NEXT:            "uri": "file:///clangd-test/main.cpp"
-# CHECK-NEXT:          }
-# CHECK-NEXT:        ],
-# CHECK-NEXT:        "range": {
-# CHECK-NEXT:          "end": {
-# CHECK-NEXT:            "character": 24,
-# CHECK-NEXT:            "line": 1
-# CHECK-NEXT:          },
-# CHECK-NEXT:          "start": {
-# CHECK-NEXT:            "character": 0,
-# CHECK-NEXT:            "line": 1
-# CHECK-NEXT:          }
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "selectionRange": {
-# CHECK-NEXT:          "end": {
-# CHECK-NEXT:            "character": 13,
-# CHECK-NEXT:            "line": 1
-# CHECK-NEXT:          },
-# CHECK-NEXT:          "start": {
-# CHECK-NEXT:            "character": 7,
-# CHECK-NEXT:            "line": 1
-# CHECK-NEXT:          }
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "uri": "file:///clangd-test/main.cpp"
-# CHECK-NEXT:      }
-# CHECK-NEXT:    ],
-# CHECK-NEXT:    "range": {
-# CHECK-NEXT:      "end": {
-# CHECK-NEXT:        "character": 24,
-# CHECK-NEXT:        "line": 2
-# CHECK-NEXT:      },
-# CHECK-NEXT:      "start": {
-# CHECK-NEXT:        "character": 0,
-# CHECK-NEXT:        "line": 2
-# CHECK-NEXT:      }
-# CHECK-NEXT:    },
-# CHECK-NEXT:    "selectionRange": {
-# CHECK-NEXT:      "end": {
-# CHECK-NEXT:        "character": 13,
-# CHECK-NEXT:        "line": 2
-# CHECK-NEXT:      },
-# CHECK-NEXT:      "start": {
-# CHECK-NEXT:        "character": 7,
-# CHECK-NEXT:        "line": 2
-# CHECK-NEXT:      }
-# CHECK-NEXT:    },
-# CHECK-NEXT:    "uri": "file:///clangd-test/main.cpp"
-# CHECK-NEXT:  }
----
-{"jsonrpc":"2.0","id":2,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/unsupported-method.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/unsupported-method.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/unsupported-method.test (original)
+++ clang-tools-extra/trunk/test/clangd/unsupported-method.test (removed)
@@ -1,16 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///main.cpp","languageId":"cpp","version":1,"text":""}}}
----
-{"jsonrpc":"2.0","id":1,"method":"textDocument/jumpInTheAirLikeYouJustDontCare","params":{}}
-#      CHECK:  "error": {
-# CHECK-NEXT:    "code": -32601,
-# CHECK-NEXT:    "message": "method not found"
-# CHECK-NEXT:  },
-# CHECK-NEXT:  "id": 1,
-# CHECK-NEXT:  "jsonrpc": "2.0"
----
-{"jsonrpc":"2.0","id":2,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/utf8.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/utf8.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/utf8.test (original)
+++ clang-tools-extra/trunk/test/clangd/utf8.test (removed)
@@ -1,32 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-# This test verifies that we can negotiate UTF-8 offsets via protocol extension.
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{"offsetEncoding":["utf-8","utf-16"]},"trace":"off"}}
-# CHECK: "offsetEncoding": "utf-8"
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///main.cpp","languageId":"cpp","version":1,"text":"/*ö*/int x;\nint y=x;"}}}
----
-{"jsonrpc":"2.0","id":1,"method":"textDocument/definition","params":{"textDocument":{"uri":"test:///main.cpp"},"position":{"line":1,"character":6}}}
-# /*ö*/int x;
-# 01234567890
-# x is character (and utf-16) range [9,10) but byte range [10,11).
-#      CHECK:  "id": 1,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": [
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "range": {
-# CHECK-NEXT:        "end": {
-# CHECK-NEXT:          "character": 11,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "start": {
-# CHECK-NEXT:          "character": 10,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        }
-# CHECK-NEXT:      },
-# CHECK-NEXT:      "uri": "file://{{.*}}/main.cpp"
-# CHECK-NEXT:    }
-# CHECK-NEXT:  ]
----
-{"jsonrpc":"2.0","id":10000,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/xpc/initialize.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/xpc/initialize.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/xpc/initialize.test (original)
+++ clang-tools-extra/trunk/test/clangd/xpc/initialize.test (removed)
@@ -1,10 +0,0 @@
-# RUN: clangd-xpc-test-client < %s | FileCheck %s
-# REQUIRES: clangd-xpc-support
-
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootUri":"test:///workspace","capabilities":{},"trace":"off"}}
-# CHECK: {"id":0,"jsonrpc":"2.0","result":{"capabilities"
-
-{"jsonrpc":"2.0","id":3,"method":"shutdown"}
-# CHECK: {"id":3,"jsonrpc":"2.0","result":null}
-
-{"jsonrpc":"2.0","method":"exit"}

Removed: clang-tools-extra/trunk/test/clangd/xrefs.test
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clangd/xrefs.test?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clangd/xrefs.test (original)
+++ clang-tools-extra/trunk/test/clangd/xrefs.test (removed)
@@ -1,92 +0,0 @@
-# RUN: clangd -lit-test < %s | FileCheck -strict-whitespace %s
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
----
-{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///main.cpp","languageId":"cpp","version":1,"text":"extern int x;\nint x = 0;\nint y = x;"}}}
----
-{"jsonrpc":"2.0","id":1,"method":"textDocument/definition","params":{"textDocument":{"uri":"test:///main.cpp"},"position":{"line":2,"character":8}}}
-#      CHECK:  "id": 1,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": [
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "range": {
-# CHECK-NEXT:        "end": {
-# CHECK-NEXT:          "character": 5,
-# CHECK-NEXT:          "line": 1
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "start": {
-# CHECK-NEXT:          "character": 4,
-# CHECK-NEXT:          "line": 1
-# CHECK-NEXT:        }
-# CHECK-NEXT:      },
-# CHECK-NEXT:      "uri": "file://{{.*}}/{{([A-Z]:/)?}}main.cpp"
-# CHECK-NEXT:    }
-# CHECK-NEXT:  ]
----
-# Toggle: we're on the definition, so jump to the declaration.
-{"jsonrpc":"2.0","id":1,"method":"textDocument/definition","params":{"textDocument":{"uri":"test:///main.cpp"},"position":{"line":1,"character":4}}}
-#      CHECK:  "id": 1,
-# CHECK-NEXT:  "jsonrpc": "2.0",
-# CHECK-NEXT:  "result": [
-# CHECK-NEXT:    {
-# CHECK-NEXT:      "range": {
-# CHECK-NEXT:        "end": {
-# CHECK-NEXT:          "character": 12,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        },
-# CHECK-NEXT:        "start": {
-# CHECK-NEXT:          "character": 11,
-# CHECK-NEXT:          "line": 0
-# CHECK-NEXT:        }
-# CHECK-NEXT:      },
-# CHECK-NEXT:      "uri": "file://{{.*}}/{{([A-Z]:/)?}}main.cpp"
-# CHECK-NEXT:    }
-# CHECK-NEXT:  ]
----
-{"jsonrpc":"2.0","id":1,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"test:///main.cpp"},"position":{"line":2,"character":8}}}
-#      CHECK: "id": 1
-# CHECK-NEXT: "jsonrpc": "2.0",
-# CHECK-NEXT: "result": [
-# CHECK-NEXT:   {
-# CHECK-NEXT:     "kind": 1,
-# CHECK-NEXT:     "range": {
-# CHECK-NEXT:       "end": {
-# CHECK-NEXT:         "character": 12,
-# CHECK-NEXT:         "line": 0
-# CHECK-NEXT:       },
-# CHECK-NEXT:       "start": {
-# CHECK-NEXT:         "character": 11,
-# CHECK-NEXT:         "line": 0
-# CHECK-NEXT:       }
-# CHECK-NEXT:     }
-# CHECK-NEXT:   },
-# CHECK-NEXT:   {
-# CHECK-NEXT:     "kind": 1,
-# CHECK-NEXT:     "range": {
-# CHECK-NEXT:       "end": {
-# CHECK-NEXT:         "character": 5,
-# CHECK-NEXT:         "line": 1
-# CHECK-NEXT:       },
-# CHECK-NEXT:       "start": {
-# CHECK-NEXT:         "character": 4,
-# CHECK-NEXT:         "line": 1
-# CHECK-NEXT:       }
-# CHECK-NEXT:     }
-# CHECK-NEXT:   },
-# CHECK-NEXT:   {
-# CHECK-NEXT:     "kind": 2,
-# CHECK-NEXT:     "range": {
-# CHECK-NEXT:       "end": {
-# CHECK-NEXT:         "character": 9,
-# CHECK-NEXT:         "line": 2
-# CHECK-NEXT:       },
-# CHECK-NEXT:       "start": {
-# CHECK-NEXT:         "character": 8,
-# CHECK-NEXT:         "line": 2
-# CHECK-NEXT:       }
-# CHECK-NEXT:     }
-# CHECK-NEXT:   }
-# CHECK-NEXT: ]
----
-{"jsonrpc":"2.0","id":10000,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}

Modified: clang-tools-extra/trunk/unittests/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/CMakeLists.txt?rev=359424&r1=359423&r2=359424&view=diff
==============================================================================
--- clang-tools-extra/trunk/unittests/CMakeLists.txt (original)
+++ clang-tools-extra/trunk/unittests/CMakeLists.txt Mon Apr 29 01:44:01 2019
@@ -5,15 +5,6 @@ function(add_extra_unittest test_dirname
   add_unittest(ExtraToolsUnitTests ${test_dirname} ${ARGN})
 endfunction()
 
-if(CLANG_BUILT_STANDALONE)
-  # LLVMTestingSupport library is needed for clangd tests.
-  if (EXISTS ${LLVM_MAIN_SRC_DIR}/lib/Testing/Support
-      AND NOT TARGET LLVMTestingSupport)
-    add_subdirectory(${LLVM_MAIN_SRC_DIR}/lib/Testing/Support
-      lib/Testing/Support)
-  endif()
-endif()
-
 add_subdirectory(clang-apply-replacements)
 add_subdirectory(clang-change-namespace)
 add_subdirectory(clang-doc)
@@ -21,4 +12,3 @@ add_subdirectory(clang-include-fixer)
 add_subdirectory(clang-move)
 add_subdirectory(clang-query)
 add_subdirectory(clang-tidy)
-add_subdirectory(clangd)

Removed: clang-tools-extra/trunk/unittests/clangd/Annotations.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/Annotations.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/Annotations.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/Annotations.cpp (removed)
@@ -1,53 +0,0 @@
-//===--- Annotations.cpp - Annotated source code for unit 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 "Annotations.h"
-#include "SourceCode.h"
-
-namespace clang {
-namespace clangd {
-
-Position Annotations::point(llvm::StringRef Name) const {
-  return offsetToPosition(code(), Base::point(Name));
-}
-
-std::vector<Position> Annotations::points(llvm::StringRef Name) const {
-  auto Offsets = Base::points(Name);
-
-  std::vector<Position> Ps;
-  Ps.reserve(Offsets.size());
-  for (size_t O : Offsets)
-    Ps.push_back(offsetToPosition(code(), O));
-
-  return Ps;
-}
-
-static clangd::Range toLSPRange(llvm::StringRef Code, Annotations::Range R) {
-  clangd::Range LSPRange;
-  LSPRange.start = offsetToPosition(Code, R.Begin);
-  LSPRange.end = offsetToPosition(Code, R.End);
-  return LSPRange;
-}
-
-clangd::Range Annotations::range(llvm::StringRef Name) const {
-  return toLSPRange(code(), Base::range(Name));
-}
-
-std::vector<clangd::Range> Annotations::ranges(llvm::StringRef Name) const {
-  auto OffsetRanges = Base::ranges(Name);
-
-  std::vector<clangd::Range> Rs;
-  Rs.reserve(OffsetRanges.size());
-  for (Annotations::Range R : OffsetRanges)
-    Rs.push_back(toLSPRange(code(), R));
-
-  return Rs;
-}
-
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/Annotations.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/Annotations.h?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/Annotations.h (original)
+++ clang-tools-extra/trunk/unittests/clangd/Annotations.h (removed)
@@ -1,39 +0,0 @@
-//===--- Annotations.h - Annotated source code for 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
-//
-//===----------------------------------------------------------------------===//
-// A clangd-specific version of llvm/Testing/Support/Annotations.h, replaces
-// offsets and offset-based ranges with types from the LSP protocol.
-//===---------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_TOOLS_EXTRA_UNITTESTS_CLANGD_ANNOTATIONS_H
-#define LLVM_CLANG_TOOLS_EXTRA_UNITTESTS_CLANGD_ANNOTATIONS_H
-
-#include "Protocol.h"
-#include "llvm/Testing/Support/Annotations.h"
-
-namespace clang {
-namespace clangd {
-
-/// Same as llvm::Annotations, but adjusts functions to LSP-specific types for
-/// positions and ranges.
-class Annotations : public llvm::Annotations {
-  using Base = llvm::Annotations;
-
-public:
-  using llvm::Annotations::Annotations;
-
-  Position point(llvm::StringRef Name = "") const;
-  std::vector<Position> points(llvm::StringRef Name = "") const;
-
-  clangd::Range range(llvm::StringRef Name = "") const;
-  std::vector<clangd::Range> ranges(llvm::StringRef Name = "") const;
-};
-
-} // namespace clangd
-} // namespace clang
-
-#endif // LLVM_CLANG_TOOLS_EXTRA_UNITTESTS_CLANGD_ANNOTATIONS_H

Removed: clang-tools-extra/trunk/unittests/clangd/BackgroundIndexTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/BackgroundIndexTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/BackgroundIndexTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/BackgroundIndexTests.cpp (removed)
@@ -1,465 +0,0 @@
-#include "SyncAPI.h"
-#include "TestFS.h"
-#include "index/Background.h"
-#include "llvm/Support/ScopedPrinter.h"
-#include "llvm/Support/Threading.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-#include <thread>
-
-using testing::_;
-using testing::AllOf;
-using testing::Contains;
-using testing::ElementsAre;
-using testing::Not;
-using testing::UnorderedElementsAre;
-
-namespace clang {
-namespace clangd {
-
-MATCHER_P(Named, N, "") { return arg.Name == N; }
-MATCHER(Declared, "") {
-  return !StringRef(arg.CanonicalDeclaration.FileURI).empty();
-}
-MATCHER(Defined, "") { return !StringRef(arg.Definition.FileURI).empty(); }
-MATCHER_P(FileURI, F, "") { return StringRef(arg.Location.FileURI) == F; }
-testing::Matcher<const RefSlab &>
-RefsAre(std::vector<testing::Matcher<Ref>> Matchers) {
-  return ElementsAre(testing::Pair(_, UnorderedElementsAreArray(Matchers)));
-}
-// URI cannot be empty since it references keys in the IncludeGraph.
-MATCHER(EmptyIncludeNode, "") {
-  return !arg.IsTU && !arg.URI.empty() && arg.Digest == FileDigest{{0}} &&
-         arg.DirectIncludes.empty();
-}
-
-class MemoryShardStorage : public BackgroundIndexStorage {
-  mutable std::mutex StorageMu;
-  llvm::StringMap<std::string> &Storage;
-  size_t &CacheHits;
-
-public:
-  MemoryShardStorage(llvm::StringMap<std::string> &Storage, size_t &CacheHits)
-      : Storage(Storage), CacheHits(CacheHits) {}
-  llvm::Error storeShard(llvm::StringRef ShardIdentifier,
-                         IndexFileOut Shard) const override {
-    std::lock_guard<std::mutex> Lock(StorageMu);
-    AccessedPaths.insert(ShardIdentifier);
-    Storage[ShardIdentifier] = llvm::to_string(Shard);
-    return llvm::Error::success();
-  }
-  std::unique_ptr<IndexFileIn>
-  loadShard(llvm::StringRef ShardIdentifier) const override {
-    std::lock_guard<std::mutex> Lock(StorageMu);
-    AccessedPaths.insert(ShardIdentifier);
-    if (Storage.find(ShardIdentifier) == Storage.end()) {
-      return nullptr;
-    }
-    auto IndexFile = readIndexFile(Storage[ShardIdentifier]);
-    if (!IndexFile) {
-      ADD_FAILURE() << "Error while reading " << ShardIdentifier << ':'
-                    << IndexFile.takeError();
-      return nullptr;
-    }
-    CacheHits++;
-    return llvm::make_unique<IndexFileIn>(std::move(*IndexFile));
-  }
-
-  mutable llvm::StringSet<> AccessedPaths;
-};
-
-class BackgroundIndexTest : public ::testing::Test {
-protected:
-  BackgroundIndexTest() { BackgroundIndex::preventThreadStarvationInTests(); }
-};
-
-TEST_F(BackgroundIndexTest, NoCrashOnErrorFile) {
-  MockFSProvider FS;
-  FS.Files[testPath("root/A.cc")] = "error file";
-  llvm::StringMap<std::string> Storage;
-  size_t CacheHits = 0;
-  MemoryShardStorage MSS(Storage, CacheHits);
-  OverlayCDB CDB(/*Base=*/nullptr);
-  BackgroundIndex Idx(Context::empty(), FS, CDB,
-                      [&](llvm::StringRef) { return &MSS; });
-
-  tooling::CompileCommand Cmd;
-  Cmd.Filename = testPath("root/A.cc");
-  Cmd.Directory = testPath("root");
-  Cmd.CommandLine = {"clang++", "-DA=1", testPath("root/A.cc")};
-  CDB.setCompileCommand(testPath("root/A.cc"), Cmd);
-
-  ASSERT_TRUE(Idx.blockUntilIdleForTest());
-}
-
-TEST_F(BackgroundIndexTest, IndexTwoFiles) {
-  MockFSProvider FS;
-  // a.h yields different symbols when included by A.cc vs B.cc.
-  FS.Files[testPath("root/A.h")] = R"cpp(
-      void common();
-      void f_b();
-      #if A
-        class A_CC {};
-      #else
-        class B_CC{};
-      #endif
-      )cpp";
-  FS.Files[testPath("root/A.cc")] =
-      "#include \"A.h\"\nvoid g() { (void)common; }";
-  FS.Files[testPath("root/B.cc")] =
-      R"cpp(
-      #define A 0
-      #include "A.h"
-      void f_b() {
-        (void)common;
-      })cpp";
-  llvm::StringMap<std::string> Storage;
-  size_t CacheHits = 0;
-  MemoryShardStorage MSS(Storage, CacheHits);
-  OverlayCDB CDB(/*Base=*/nullptr);
-  BackgroundIndex Idx(Context::empty(), FS, CDB,
-                      [&](llvm::StringRef) { return &MSS; });
-
-  tooling::CompileCommand Cmd;
-  Cmd.Filename = testPath("root/A.cc");
-  Cmd.Directory = testPath("root");
-  Cmd.CommandLine = {"clang++", "-DA=1", testPath("root/A.cc")};
-  CDB.setCompileCommand(testPath("root/A.cc"), Cmd);
-
-  ASSERT_TRUE(Idx.blockUntilIdleForTest());
-  EXPECT_THAT(
-      runFuzzyFind(Idx, ""),
-      UnorderedElementsAre(Named("common"), Named("A_CC"), Named("g"),
-                           AllOf(Named("f_b"), Declared(), Not(Defined()))));
-
-  Cmd.Filename = testPath("root/B.cc");
-  Cmd.CommandLine = {"clang++", Cmd.Filename};
-  CDB.setCompileCommand(testPath("root/A.cc"), Cmd);
-
-  ASSERT_TRUE(Idx.blockUntilIdleForTest());
-  // B_CC is dropped as we don't collect symbols from A.h in this compilation.
-  EXPECT_THAT(runFuzzyFind(Idx, ""),
-              UnorderedElementsAre(Named("common"), Named("A_CC"), Named("g"),
-                                   AllOf(Named("f_b"), Declared(), Defined())));
-
-  auto Syms = runFuzzyFind(Idx, "common");
-  EXPECT_THAT(Syms, UnorderedElementsAre(Named("common")));
-  auto Common = *Syms.begin();
-  EXPECT_THAT(getRefs(Idx, Common.ID),
-              RefsAre({FileURI("unittest:///root/A.h"),
-                       FileURI("unittest:///root/A.cc"),
-                       FileURI("unittest:///root/B.cc")}));
-}
-
-TEST_F(BackgroundIndexTest, ShardStorageTest) {
-  MockFSProvider FS;
-  FS.Files[testPath("root/A.h")] = R"cpp(
-      void common();
-      void f_b();
-      class A_CC {};
-      )cpp";
-  std::string A_CC = "#include \"A.h\"\nvoid g() { (void)common; }";
-  FS.Files[testPath("root/A.cc")] = A_CC;
-
-  llvm::StringMap<std::string> Storage;
-  size_t CacheHits = 0;
-  MemoryShardStorage MSS(Storage, CacheHits);
-
-  tooling::CompileCommand Cmd;
-  Cmd.Filename = testPath("root/A.cc");
-  Cmd.Directory = testPath("root");
-  Cmd.CommandLine = {"clang++", testPath("root/A.cc")};
-  // Check nothing is loaded from Storage, but A.cc and A.h has been stored.
-  {
-    OverlayCDB CDB(/*Base=*/nullptr);
-    BackgroundIndex Idx(Context::empty(), FS, CDB,
-                        [&](llvm::StringRef) { return &MSS; });
-    CDB.setCompileCommand(testPath("root/A.cc"), Cmd);
-    ASSERT_TRUE(Idx.blockUntilIdleForTest());
-  }
-  EXPECT_EQ(CacheHits, 0U);
-  EXPECT_EQ(Storage.size(), 2U);
-
-  {
-    OverlayCDB CDB(/*Base=*/nullptr);
-    BackgroundIndex Idx(Context::empty(), FS, CDB,
-                        [&](llvm::StringRef) { return &MSS; });
-    CDB.setCompileCommand(testPath("root"), Cmd);
-    ASSERT_TRUE(Idx.blockUntilIdleForTest());
-  }
-  EXPECT_EQ(CacheHits, 2U); // Check both A.cc and A.h loaded from cache.
-  EXPECT_EQ(Storage.size(), 2U);
-
-  auto ShardHeader = MSS.loadShard(testPath("root/A.h"));
-  EXPECT_NE(ShardHeader, nullptr);
-  EXPECT_THAT(
-      *ShardHeader->Symbols,
-      UnorderedElementsAre(Named("common"), Named("A_CC"),
-                           AllOf(Named("f_b"), Declared(), Not(Defined()))));
-  for (const auto &Ref : *ShardHeader->Refs)
-    EXPECT_THAT(Ref.second,
-                UnorderedElementsAre(FileURI("unittest:///root/A.h")));
-
-  auto ShardSource = MSS.loadShard(testPath("root/A.cc"));
-  EXPECT_NE(ShardSource, nullptr);
-  EXPECT_THAT(*ShardSource->Symbols, UnorderedElementsAre(Named("g")));
-  EXPECT_THAT(*ShardSource->Refs, RefsAre({FileURI("unittest:///root/A.cc")}));
-}
-
-TEST_F(BackgroundIndexTest, DirectIncludesTest) {
-  MockFSProvider FS;
-  FS.Files[testPath("root/B.h")] = "";
-  FS.Files[testPath("root/A.h")] = R"cpp(
-      #include "B.h"
-      void common();
-      void f_b();
-      class A_CC {};
-      )cpp";
-  std::string A_CC = "#include \"A.h\"\nvoid g() { (void)common; }";
-  FS.Files[testPath("root/A.cc")] = A_CC;
-
-  llvm::StringMap<std::string> Storage;
-  size_t CacheHits = 0;
-  MemoryShardStorage MSS(Storage, CacheHits);
-
-  tooling::CompileCommand Cmd;
-  Cmd.Filename = testPath("root/A.cc");
-  Cmd.Directory = testPath("root");
-  Cmd.CommandLine = {"clang++", testPath("root/A.cc")};
-  {
-    OverlayCDB CDB(/*Base=*/nullptr);
-    BackgroundIndex Idx(Context::empty(), FS, CDB,
-                        [&](llvm::StringRef) { return &MSS; });
-    CDB.setCompileCommand(testPath("root/A.cc"), Cmd);
-    ASSERT_TRUE(Idx.blockUntilIdleForTest());
-  }
-
-  auto ShardSource = MSS.loadShard(testPath("root/A.cc"));
-  EXPECT_TRUE(ShardSource->Sources);
-  EXPECT_EQ(ShardSource->Sources->size(), 2U); // A.cc, A.h
-  EXPECT_THAT(
-      ShardSource->Sources->lookup("unittest:///root/A.cc").DirectIncludes,
-      UnorderedElementsAre("unittest:///root/A.h"));
-  EXPECT_NE(ShardSource->Sources->lookup("unittest:///root/A.cc").Digest,
-            FileDigest{{0}});
-  EXPECT_THAT(ShardSource->Sources->lookup("unittest:///root/A.h"),
-              EmptyIncludeNode());
-
-  auto ShardHeader = MSS.loadShard(testPath("root/A.h"));
-  EXPECT_TRUE(ShardHeader->Sources);
-  EXPECT_EQ(ShardHeader->Sources->size(), 2U); // A.h, B.h
-  EXPECT_THAT(
-      ShardHeader->Sources->lookup("unittest:///root/A.h").DirectIncludes,
-      UnorderedElementsAre("unittest:///root/B.h"));
-  EXPECT_NE(ShardHeader->Sources->lookup("unittest:///root/A.h").Digest,
-            FileDigest{{0}});
-  EXPECT_THAT(ShardHeader->Sources->lookup("unittest:///root/B.h"),
-              EmptyIncludeNode());
-}
-
-// FIXME: figure out the right timeouts or rewrite to not use the timeouts and
-// re-enable.
-TEST_F(BackgroundIndexTest, DISABLED_PeriodicalIndex) {
-  MockFSProvider FS;
-  llvm::StringMap<std::string> Storage;
-  size_t CacheHits = 0;
-  MemoryShardStorage MSS(Storage, CacheHits);
-  OverlayCDB CDB(/*Base=*/nullptr);
-  BackgroundIndex Idx(
-      Context::empty(), FS, CDB, [&](llvm::StringRef) { return &MSS; },
-      /*BuildIndexPeriodMs=*/500);
-
-  FS.Files[testPath("root/A.cc")] = "#include \"A.h\"";
-
-  tooling::CompileCommand Cmd;
-  FS.Files[testPath("root/A.h")] = "class X {};";
-  Cmd.Filename = testPath("root/A.cc");
-  Cmd.CommandLine = {"clang++", Cmd.Filename};
-  CDB.setCompileCommand(testPath("root/A.cc"), Cmd);
-
-  ASSERT_TRUE(Idx.blockUntilIdleForTest());
-  EXPECT_THAT(runFuzzyFind(Idx, ""), ElementsAre());
-  std::this_thread::sleep_for(std::chrono::milliseconds(1000));
-  EXPECT_THAT(runFuzzyFind(Idx, ""), ElementsAre(Named("X")));
-
-  FS.Files[testPath("root/A.h")] = "class Y {};";
-  FS.Files[testPath("root/A.cc")] += " "; // Force reindex the file.
-  Cmd.CommandLine = {"clang++", "-DA=1", testPath("root/A.cc")};
-  CDB.setCompileCommand(testPath("root/A.cc"), Cmd);
-
-  ASSERT_TRUE(Idx.blockUntilIdleForTest());
-  EXPECT_THAT(runFuzzyFind(Idx, ""), ElementsAre(Named("X")));
-  std::this_thread::sleep_for(std::chrono::milliseconds(1000));
-  EXPECT_THAT(runFuzzyFind(Idx, ""), ElementsAre(Named("Y")));
-}
-
-TEST_F(BackgroundIndexTest, ShardStorageLoad) {
-  MockFSProvider FS;
-  FS.Files[testPath("root/A.h")] = R"cpp(
-      void common();
-      void f_b();
-      class A_CC {};
-      )cpp";
-  FS.Files[testPath("root/A.cc")] =
-      "#include \"A.h\"\nvoid g() { (void)common; }";
-
-  llvm::StringMap<std::string> Storage;
-  size_t CacheHits = 0;
-  MemoryShardStorage MSS(Storage, CacheHits);
-
-  tooling::CompileCommand Cmd;
-  Cmd.Filename = testPath("root/A.cc");
-  Cmd.Directory = testPath("root");
-  Cmd.CommandLine = {"clang++", testPath("root/A.cc")};
-  // Check nothing is loaded from Storage, but A.cc and A.h has been stored.
-  {
-    OverlayCDB CDB(/*Base=*/nullptr);
-    BackgroundIndex Idx(Context::empty(), FS, CDB,
-                        [&](llvm::StringRef) { return &MSS; });
-    CDB.setCompileCommand(testPath("root/A.cc"), Cmd);
-    ASSERT_TRUE(Idx.blockUntilIdleForTest());
-  }
-
-  // Change header.
-  FS.Files[testPath("root/A.h")] = R"cpp(
-      void common();
-      void f_b();
-      class A_CC {};
-      class A_CCnew {};
-      )cpp";
-  {
-    OverlayCDB CDB(/*Base=*/nullptr);
-    BackgroundIndex Idx(Context::empty(), FS, CDB,
-                        [&](llvm::StringRef) { return &MSS; });
-    CDB.setCompileCommand(testPath("root"), Cmd);
-    ASSERT_TRUE(Idx.blockUntilIdleForTest());
-  }
-  EXPECT_EQ(CacheHits, 2U); // Check both A.cc and A.h loaded from cache.
-
-  // Check if the new symbol has arrived.
-  auto ShardHeader = MSS.loadShard(testPath("root/A.h"));
-  EXPECT_NE(ShardHeader, nullptr);
-  EXPECT_THAT(*ShardHeader->Symbols, Contains(Named("A_CCnew")));
-
-  // Change source.
-  FS.Files[testPath("root/A.cc")] =
-      "#include \"A.h\"\nvoid g() { (void)common; }\nvoid f_b() {}";
-  {
-    CacheHits = 0;
-    OverlayCDB CDB(/*Base=*/nullptr);
-    BackgroundIndex Idx(Context::empty(), FS, CDB,
-                        [&](llvm::StringRef) { return &MSS; });
-    CDB.setCompileCommand(testPath("root"), Cmd);
-    ASSERT_TRUE(Idx.blockUntilIdleForTest());
-  }
-  EXPECT_EQ(CacheHits, 2U); // Check both A.cc and A.h loaded from cache.
-
-  // Check if the new symbol has arrived.
-  ShardHeader = MSS.loadShard(testPath("root/A.h"));
-  EXPECT_NE(ShardHeader, nullptr);
-  EXPECT_THAT(*ShardHeader->Symbols, Contains(Named("A_CCnew")));
-  auto ShardSource = MSS.loadShard(testPath("root/A.cc"));
-  EXPECT_NE(ShardSource, nullptr);
-  EXPECT_THAT(*ShardSource->Symbols,
-              Contains(AllOf(Named("f_b"), Declared(), Defined())));
-}
-
-TEST_F(BackgroundIndexTest, ShardStorageEmptyFile) {
-  MockFSProvider FS;
-  FS.Files[testPath("root/A.h")] = R"cpp(
-      void common();
-      void f_b();
-      class A_CC {};
-      )cpp";
-  FS.Files[testPath("root/B.h")] = R"cpp(
-      #include "A.h"
-      )cpp";
-  FS.Files[testPath("root/A.cc")] =
-      "#include \"B.h\"\nvoid g() { (void)common; }";
-
-  llvm::StringMap<std::string> Storage;
-  size_t CacheHits = 0;
-  MemoryShardStorage MSS(Storage, CacheHits);
-
-  tooling::CompileCommand Cmd;
-  Cmd.Filename = testPath("root/A.cc");
-  Cmd.Directory = testPath("root");
-  Cmd.CommandLine = {"clang++", testPath("root/A.cc")};
-  // Check that A.cc, A.h and B.h has been stored.
-  {
-    OverlayCDB CDB(/*Base=*/nullptr);
-    BackgroundIndex Idx(Context::empty(), FS, CDB,
-                        [&](llvm::StringRef) { return &MSS; });
-    CDB.setCompileCommand(testPath("root/A.cc"), Cmd);
-    ASSERT_TRUE(Idx.blockUntilIdleForTest());
-  }
-  EXPECT_THAT(Storage.keys(),
-              UnorderedElementsAre(testPath("root/A.cc"), testPath("root/A.h"),
-                                   testPath("root/B.h")));
-  auto ShardHeader = MSS.loadShard(testPath("root/B.h"));
-  EXPECT_NE(ShardHeader, nullptr);
-  EXPECT_TRUE(ShardHeader->Symbols->empty());
-
-  // Check that A.cc, A.h and B.h has been loaded.
-  {
-    CacheHits = 0;
-    OverlayCDB CDB(/*Base=*/nullptr);
-    BackgroundIndex Idx(Context::empty(), FS, CDB,
-                        [&](llvm::StringRef) { return &MSS; });
-    CDB.setCompileCommand(testPath("root/A.cc"), Cmd);
-    ASSERT_TRUE(Idx.blockUntilIdleForTest());
-  }
-  EXPECT_EQ(CacheHits, 3U);
-
-  // Update B.h to contain some symbols.
-  FS.Files[testPath("root/B.h")] = R"cpp(
-      #include "A.h"
-      void new_func();
-      )cpp";
-  // Check that B.h has been stored with new contents.
-  {
-    CacheHits = 0;
-    OverlayCDB CDB(/*Base=*/nullptr);
-    BackgroundIndex Idx(Context::empty(), FS, CDB,
-                        [&](llvm::StringRef) { return &MSS; });
-    CDB.setCompileCommand(testPath("root/A.cc"), Cmd);
-    ASSERT_TRUE(Idx.blockUntilIdleForTest());
-  }
-  EXPECT_EQ(CacheHits, 3U);
-  ShardHeader = MSS.loadShard(testPath("root/B.h"));
-  EXPECT_NE(ShardHeader, nullptr);
-  EXPECT_THAT(*ShardHeader->Symbols,
-              Contains(AllOf(Named("new_func"), Declared(), Not(Defined()))));
-}
-
-TEST_F(BackgroundIndexTest, NoDotsInAbsPath) {
-  MockFSProvider FS;
-  llvm::StringMap<std::string> Storage;
-  size_t CacheHits = 0;
-  MemoryShardStorage MSS(Storage, CacheHits);
-  OverlayCDB CDB(/*Base=*/nullptr);
-  BackgroundIndex Idx(Context::empty(), FS, CDB,
-                      [&](llvm::StringRef) { return &MSS; });
-
-  tooling::CompileCommand Cmd;
-  FS.Files[testPath("root/A.cc")] = "";
-  Cmd.Filename = "../A.cc";
-  Cmd.Directory = testPath("root/build");
-  Cmd.CommandLine = {"clang++", "../A.cc"};
-  CDB.setCompileCommand(testPath("root/build/../A.cc"), Cmd);
-
-  FS.Files[testPath("root/B.cc")] = "";
-  Cmd.Filename = "./B.cc";
-  Cmd.Directory = testPath("root");
-  Cmd.CommandLine = {"clang++", "./B.cc"};
-  CDB.setCompileCommand(testPath("root/./B.cc"), Cmd);
-
-  ASSERT_TRUE(Idx.blockUntilIdleForTest());
-  for (llvm::StringRef AbsPath : MSS.AccessedPaths.keys()) {
-    EXPECT_FALSE(AbsPath.contains("./")) << AbsPath;
-    EXPECT_FALSE(AbsPath.contains("../")) << AbsPath;
-  }
-}
-
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/CMakeLists.txt?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/CMakeLists.txt (original)
+++ clang-tools-extra/trunk/unittests/clangd/CMakeLists.txt (removed)
@@ -1,82 +0,0 @@
-set(LLVM_LINK_COMPONENTS
-  support
-  )
-
-get_filename_component(CLANGD_SOURCE_DIR
-  ${CMAKE_CURRENT_SOURCE_DIR}/../../clangd REALPATH)
-get_filename_component(CLANGD_BINARY_DIR
-  ${CMAKE_CURRENT_BINARY_DIR}/../../clangd REALPATH)
-include_directories(
-  ${CLANGD_SOURCE_DIR}
-  ${CLANGD_BINARY_DIR}
-  )
-
-add_extra_unittest(ClangdTests
-  Annotations.cpp
-  BackgroundIndexTests.cpp
-  CancellationTests.cpp
-  ClangdTests.cpp
-  ClangdUnitTests.cpp
-  CodeCompleteTests.cpp
-  CodeCompletionStringsTests.cpp
-  ContextTests.cpp
-  DexTests.cpp
-  DiagnosticsTests.cpp
-  DraftStoreTests.cpp
-  ExpectedTypeTest.cpp
-  FileDistanceTests.cpp
-  FileIndexTests.cpp
-  FindSymbolsTests.cpp
-  FSTests.cpp
-  FunctionTests.cpp
-  FuzzyMatchTests.cpp
-  GlobalCompilationDatabaseTests.cpp
-  HeadersTests.cpp
-  IndexActionTests.cpp
-  IndexTests.cpp
-  JSONTransportTests.cpp
-  PrintASTTests.cpp
-  QualityTests.cpp
-  RIFFTests.cpp
-  SelectionTests.cpp
-  SerializationTests.cpp
-  SourceCodeTests.cpp
-  SymbolCollectorTests.cpp
-  SymbolInfoTests.cpp
-  SyncAPI.cpp
-  TUSchedulerTests.cpp
-  TestFS.cpp
-  TestIndex.cpp
-  TestTU.cpp
-  ThreadingTests.cpp
-  TraceTests.cpp
-  TypeHierarchyTests.cpp
-  TweakTests.cpp
-  URITests.cpp
-  XRefsTests.cpp
-
-  $<TARGET_OBJECTS:obj.clangDaemonTweaks>
-  )
-
-target_link_libraries(ClangdTests
-  PRIVATE
-  clangAST
-  clangBasic
-  clangDaemon
-  clangFormat
-  clangFrontend
-  clangIndex
-  clangLex
-  clangSema
-  clangSerialization
-  clangTidy
-  clangTooling
-  clangToolingCore
-  clangToolingInclusions
-  LLVMSupport
-  LLVMTestingSupport
-  )
-
-if (CLANGD_BUILD_XPC)
-  add_subdirectory(xpc)
-endif ()

Removed: clang-tools-extra/trunk/unittests/clangd/CancellationTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/CancellationTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/CancellationTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/CancellationTests.cpp (removed)
@@ -1,65 +0,0 @@
-#include "Cancellation.h"
-#include "Context.h"
-#include "Threading.h"
-#include "llvm/Support/Error.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-#include <atomic>
-#include <memory>
-#include <thread>
-
-namespace clang {
-namespace clangd {
-namespace {
-
-TEST(CancellationTest, CancellationTest) {
-  auto Task = cancelableTask();
-  WithContext ContextWithCancellation(std::move(Task.first));
-  EXPECT_FALSE(isCancelled());
-  Task.second();
-  EXPECT_TRUE(isCancelled());
-}
-
-TEST(CancellationTest, CancelerDiesContextLives) {
-  llvm::Optional<WithContext> ContextWithCancellation;
-  {
-    auto Task = cancelableTask();
-    ContextWithCancellation.emplace(std::move(Task.first));
-    EXPECT_FALSE(isCancelled());
-    Task.second();
-    EXPECT_TRUE(isCancelled());
-  }
-  EXPECT_TRUE(isCancelled());
-}
-
-TEST(CancellationTest, TaskContextDiesHandleLives) {
-  auto Task = cancelableTask();
-  {
-    WithContext ContextWithCancellation(std::move(Task.first));
-    EXPECT_FALSE(isCancelled());
-    Task.second();
-    EXPECT_TRUE(isCancelled());
-  }
-  // Still should be able to cancel without any problems.
-  Task.second();
-}
-
-TEST(CancellationTest, AsynCancellationTest) {
-  std::atomic<bool> HasCancelled(false);
-  Notification Cancelled;
-  auto TaskToBeCancelled = [&](Context Ctx) {
-    WithContext ContextGuard(std::move(Ctx));
-    Cancelled.wait();
-    HasCancelled = isCancelled();
-  };
-  auto Task = cancelableTask();
-  std::thread AsyncTask(TaskToBeCancelled, std::move(Task.first));
-  Task.second();
-  Cancelled.notify();
-  AsyncTask.join();
-
-  EXPECT_TRUE(HasCancelled);
-}
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/ClangdTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/ClangdTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/ClangdTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/ClangdTests.cpp (removed)
@@ -1,1162 +0,0 @@
-//===-- ClangdTests.cpp - Clangd unit 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 "Annotations.h"
-#include "ClangdLSPServer.h"
-#include "ClangdServer.h"
-#include "GlobalCompilationDatabase.h"
-#include "Matchers.h"
-#include "SyncAPI.h"
-#include "TestFS.h"
-#include "Threading.h"
-#include "URI.h"
-#include "clang/Config/config.h"
-#include "clang/Sema/CodeCompleteConsumer.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/ADT/StringMap.h"
-#include "llvm/Support/Errc.h"
-#include "llvm/Support/Path.h"
-#include "llvm/Support/Regex.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-#include <algorithm>
-#include <chrono>
-#include <iostream>
-#include <random>
-#include <string>
-#include <thread>
-#include <vector>
-
-namespace clang {
-namespace clangd {
-
-namespace {
-
-using ::testing::ElementsAre;
-using ::testing::Field;
-using ::testing::Gt;
-using ::testing::IsEmpty;
-using ::testing::Pair;
-using ::testing::UnorderedElementsAre;
-
-MATCHER_P2(DeclAt, File, Range, "") {
-  return arg.PreferredDeclaration ==
-         Location{URIForFile::canonicalize(File, testRoot()), Range};
-}
-
-bool diagsContainErrors(const std::vector<Diag> &Diagnostics) {
-  for (auto D : Diagnostics) {
-    if (D.Severity == DiagnosticsEngine::Error ||
-        D.Severity == DiagnosticsEngine::Fatal)
-      return true;
-  }
-  return false;
-}
-
-class ErrorCheckingDiagConsumer : public DiagnosticsConsumer {
-public:
-  void onDiagnosticsReady(PathRef File,
-                          std::vector<Diag> Diagnostics) override {
-    bool HadError = diagsContainErrors(Diagnostics);
-    std::lock_guard<std::mutex> Lock(Mutex);
-    HadErrorInLastDiags = HadError;
-  }
-
-  bool hadErrorInLastDiags() {
-    std::lock_guard<std::mutex> Lock(Mutex);
-    return HadErrorInLastDiags;
-  }
-
-private:
-  std::mutex Mutex;
-  bool HadErrorInLastDiags = false;
-};
-
-/// For each file, record whether the last published diagnostics contained at
-/// least one error.
-class MultipleErrorCheckingDiagConsumer : public DiagnosticsConsumer {
-public:
-  void onDiagnosticsReady(PathRef File,
-                          std::vector<Diag> Diagnostics) override {
-    bool HadError = diagsContainErrors(Diagnostics);
-
-    std::lock_guard<std::mutex> Lock(Mutex);
-    LastDiagsHadError[File] = HadError;
-  }
-
-  /// Exposes all files consumed by onDiagnosticsReady in an unspecified order.
-  /// For each file, a bool value indicates whether the last diagnostics
-  /// contained an error.
-  std::vector<std::pair<Path, bool>> filesWithDiags() const {
-    std::vector<std::pair<Path, bool>> Result;
-    std::lock_guard<std::mutex> Lock(Mutex);
-
-    for (const auto &it : LastDiagsHadError) {
-      Result.emplace_back(it.first(), it.second);
-    }
-
-    return Result;
-  }
-
-  void clear() {
-    std::lock_guard<std::mutex> Lock(Mutex);
-    LastDiagsHadError.clear();
-  }
-
-private:
-  mutable std::mutex Mutex;
-  llvm::StringMap<bool> LastDiagsHadError;
-};
-
-/// Replaces all patterns of the form 0x123abc with spaces
-std::string replacePtrsInDump(std::string const &Dump) {
-  llvm::Regex RE("0x[0-9a-fA-F]+");
-  llvm::SmallVector<llvm::StringRef, 1> Matches;
-  llvm::StringRef Pending = Dump;
-
-  std::string Result;
-  while (RE.match(Pending, &Matches)) {
-    assert(Matches.size() == 1 && "Exactly one match expected");
-    auto MatchPos = Matches[0].data() - Pending.data();
-
-    Result += Pending.take_front(MatchPos);
-    Pending = Pending.drop_front(MatchPos + Matches[0].size());
-  }
-  Result += Pending;
-
-  return Result;
-}
-
-std::string dumpASTWithoutMemoryLocs(ClangdServer &Server, PathRef File) {
-  auto DumpWithMemLocs = runDumpAST(Server, File);
-  return replacePtrsInDump(DumpWithMemLocs);
-}
-
-class ClangdVFSTest : public ::testing::Test {
-protected:
-  std::string parseSourceAndDumpAST(
-      PathRef SourceFileRelPath, llvm::StringRef SourceContents,
-      std::vector<std::pair<PathRef, llvm::StringRef>> ExtraFiles = {},
-      bool ExpectErrors = false) {
-    MockFSProvider FS;
-    ErrorCheckingDiagConsumer DiagConsumer;
-    MockCompilationDatabase CDB;
-    ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-    for (const auto &FileWithContents : ExtraFiles)
-      FS.Files[testPath(FileWithContents.first)] = FileWithContents.second;
-
-    auto SourceFilename = testPath(SourceFileRelPath);
-    Server.addDocument(SourceFilename, SourceContents);
-    auto Result = dumpASTWithoutMemoryLocs(Server, SourceFilename);
-    EXPECT_TRUE(Server.blockUntilIdleForTest()) << "Waiting for diagnostics";
-    EXPECT_EQ(ExpectErrors, DiagConsumer.hadErrorInLastDiags());
-    return Result;
-  }
-};
-
-TEST_F(ClangdVFSTest, Parse) {
-  // FIXME: figure out a stable format for AST dumps, so that we can check the
-  // output of the dump itself is equal to the expected one, not just that it's
-  // different.
-  auto Empty = parseSourceAndDumpAST("foo.cpp", "", {});
-  auto OneDecl = parseSourceAndDumpAST("foo.cpp", "int a;", {});
-  auto SomeDecls = parseSourceAndDumpAST("foo.cpp", "int a; int b; int c;", {});
-  EXPECT_NE(Empty, OneDecl);
-  EXPECT_NE(Empty, SomeDecls);
-  EXPECT_NE(SomeDecls, OneDecl);
-
-  auto Empty2 = parseSourceAndDumpAST("foo.cpp", "");
-  auto OneDecl2 = parseSourceAndDumpAST("foo.cpp", "int a;");
-  auto SomeDecls2 = parseSourceAndDumpAST("foo.cpp", "int a; int b; int c;");
-  EXPECT_EQ(Empty, Empty2);
-  EXPECT_EQ(OneDecl, OneDecl2);
-  EXPECT_EQ(SomeDecls, SomeDecls2);
-}
-
-TEST_F(ClangdVFSTest, ParseWithHeader) {
-  parseSourceAndDumpAST("foo.cpp", "#include \"foo.h\"", {},
-                        /*ExpectErrors=*/true);
-  parseSourceAndDumpAST("foo.cpp", "#include \"foo.h\"", {{"foo.h", ""}},
-                        /*ExpectErrors=*/false);
-
-  const auto SourceContents = R"cpp(
-#include "foo.h"
-int b = a;
-)cpp";
-  parseSourceAndDumpAST("foo.cpp", SourceContents, {{"foo.h", ""}},
-                        /*ExpectErrors=*/true);
-  parseSourceAndDumpAST("foo.cpp", SourceContents, {{"foo.h", "int a;"}},
-                        /*ExpectErrors=*/false);
-}
-
-TEST_F(ClangdVFSTest, Reparse) {
-  MockFSProvider FS;
-  ErrorCheckingDiagConsumer DiagConsumer;
-  MockCompilationDatabase CDB;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  const auto SourceContents = R"cpp(
-#include "foo.h"
-int b = a;
-)cpp";
-
-  auto FooCpp = testPath("foo.cpp");
-
-  FS.Files[testPath("foo.h")] = "int a;";
-  FS.Files[FooCpp] = SourceContents;
-
-  Server.addDocument(FooCpp, SourceContents);
-  auto DumpParse1 = dumpASTWithoutMemoryLocs(Server, FooCpp);
-  ASSERT_TRUE(Server.blockUntilIdleForTest()) << "Waiting for diagnostics";
-  EXPECT_FALSE(DiagConsumer.hadErrorInLastDiags());
-
-  Server.addDocument(FooCpp, "");
-  auto DumpParseEmpty = dumpASTWithoutMemoryLocs(Server, FooCpp);
-  ASSERT_TRUE(Server.blockUntilIdleForTest()) << "Waiting for diagnostics";
-  EXPECT_FALSE(DiagConsumer.hadErrorInLastDiags());
-
-  Server.addDocument(FooCpp, SourceContents);
-  auto DumpParse2 = dumpASTWithoutMemoryLocs(Server, FooCpp);
-  ASSERT_TRUE(Server.blockUntilIdleForTest()) << "Waiting for diagnostics";
-  EXPECT_FALSE(DiagConsumer.hadErrorInLastDiags());
-
-  EXPECT_EQ(DumpParse1, DumpParse2);
-  EXPECT_NE(DumpParse1, DumpParseEmpty);
-}
-
-TEST_F(ClangdVFSTest, ReparseOnHeaderChange) {
-  MockFSProvider FS;
-  ErrorCheckingDiagConsumer DiagConsumer;
-  MockCompilationDatabase CDB;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  const auto SourceContents = R"cpp(
-#include "foo.h"
-int b = a;
-)cpp";
-
-  auto FooCpp = testPath("foo.cpp");
-  auto FooH = testPath("foo.h");
-
-  FS.Files[FooH] = "int a;";
-  FS.Files[FooCpp] = SourceContents;
-
-  Server.addDocument(FooCpp, SourceContents);
-  auto DumpParse1 = dumpASTWithoutMemoryLocs(Server, FooCpp);
-  ASSERT_TRUE(Server.blockUntilIdleForTest()) << "Waiting for diagnostics";
-  EXPECT_FALSE(DiagConsumer.hadErrorInLastDiags());
-
-  FS.Files[FooH] = "";
-  Server.addDocument(FooCpp, SourceContents);
-  auto DumpParseDifferent = dumpASTWithoutMemoryLocs(Server, FooCpp);
-  ASSERT_TRUE(Server.blockUntilIdleForTest()) << "Waiting for diagnostics";
-  EXPECT_TRUE(DiagConsumer.hadErrorInLastDiags());
-
-  FS.Files[FooH] = "int a;";
-  Server.addDocument(FooCpp, SourceContents);
-  auto DumpParse2 = dumpASTWithoutMemoryLocs(Server, FooCpp);
-  ASSERT_TRUE(Server.blockUntilIdleForTest()) << "Waiting for diagnostics";
-  EXPECT_FALSE(DiagConsumer.hadErrorInLastDiags());
-
-  EXPECT_EQ(DumpParse1, DumpParse2);
-  EXPECT_NE(DumpParse1, DumpParseDifferent);
-}
-
-TEST_F(ClangdVFSTest, PropagatesContexts) {
-  static Key<int> Secret;
-  struct FSProvider : public FileSystemProvider {
-    IntrusiveRefCntPtr<llvm::vfs::FileSystem> getFileSystem() const override {
-      Got = Context::current().getExisting(Secret);
-      return buildTestFS({});
-    }
-    mutable int Got;
-  } FS;
-  struct DiagConsumer : public DiagnosticsConsumer {
-    void onDiagnosticsReady(PathRef File,
-                            std::vector<Diag> Diagnostics) override {
-      Got = Context::current().getExisting(Secret);
-    }
-    int Got;
-  } DiagConsumer;
-  MockCompilationDatabase CDB;
-
-  // Verify that the context is plumbed to the FS provider and diagnostics.
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-  {
-    WithContextValue Entrypoint(Secret, 42);
-    Server.addDocument(testPath("foo.cpp"), "void main(){}");
-  }
-  ASSERT_TRUE(Server.blockUntilIdleForTest());
-  EXPECT_EQ(FS.Got, 42);
-  EXPECT_EQ(DiagConsumer.Got, 42);
-}
-
-// Only enable this test on Unix
-#ifdef LLVM_ON_UNIX
-TEST_F(ClangdVFSTest, SearchLibDir) {
-  // Checks that searches for GCC installation is done through vfs.
-  MockFSProvider FS;
-  ErrorCheckingDiagConsumer DiagConsumer;
-  MockCompilationDatabase CDB;
-  CDB.ExtraClangFlags.insert(CDB.ExtraClangFlags.end(),
-                             {"-xc++", "-target", "x86_64-linux-unknown",
-                              "-m64", "--gcc-toolchain=/randomusr",
-                              "-stdlib=libstdc++"});
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  // Just a random gcc version string
-  SmallString<8> Version("4.9.3");
-
-  // A lib dir for gcc installation
-  SmallString<64> LibDir("/randomusr/lib/gcc/x86_64-linux-gnu");
-  llvm::sys::path::append(LibDir, Version);
-
-  // Put crtbegin.o into LibDir/64 to trick clang into thinking there's a gcc
-  // installation there.
-  SmallString<64> DummyLibFile;
-  llvm::sys::path::append(DummyLibFile, LibDir, "64", "crtbegin.o");
-  FS.Files[DummyLibFile] = "";
-
-  SmallString<64> IncludeDir("/randomusr/include/c++");
-  llvm::sys::path::append(IncludeDir, Version);
-
-  SmallString<64> StringPath;
-  llvm::sys::path::append(StringPath, IncludeDir, "string");
-  FS.Files[StringPath] = "class mock_string {};";
-
-  auto FooCpp = testPath("foo.cpp");
-  const auto SourceContents = R"cpp(
-#include <string>
-mock_string x;
-)cpp";
-  FS.Files[FooCpp] = SourceContents;
-
-  runAddDocument(Server, FooCpp, SourceContents);
-  EXPECT_FALSE(DiagConsumer.hadErrorInLastDiags());
-
-  const auto SourceContentsWithError = R"cpp(
-#include <string>
-std::string x;
-)cpp";
-  runAddDocument(Server, FooCpp, SourceContentsWithError);
-  EXPECT_TRUE(DiagConsumer.hadErrorInLastDiags());
-}
-#endif // LLVM_ON_UNIX
-
-TEST_F(ClangdVFSTest, ForceReparseCompileCommand) {
-  MockFSProvider FS;
-  ErrorCheckingDiagConsumer DiagConsumer;
-  MockCompilationDatabase CDB;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  auto FooCpp = testPath("foo.cpp");
-  const auto SourceContents1 = R"cpp(
-template <class T>
-struct foo { T x; };
-)cpp";
-  const auto SourceContents2 = R"cpp(
-template <class T>
-struct bar { T x; };
-)cpp";
-
-  FS.Files[FooCpp] = "";
-
-  // First parse files in C mode and check they produce errors.
-  CDB.ExtraClangFlags = {"-xc"};
-  runAddDocument(Server, FooCpp, SourceContents1);
-  EXPECT_TRUE(DiagConsumer.hadErrorInLastDiags());
-  runAddDocument(Server, FooCpp, SourceContents2);
-  EXPECT_TRUE(DiagConsumer.hadErrorInLastDiags());
-
-  // Now switch to C++ mode.
-  CDB.ExtraClangFlags = {"-xc++"};
-  runAddDocument(Server, FooCpp, SourceContents2, WantDiagnostics::Auto);
-  EXPECT_FALSE(DiagConsumer.hadErrorInLastDiags());
-  // Subsequent addDocument calls should finish without errors too.
-  runAddDocument(Server, FooCpp, SourceContents1);
-  EXPECT_FALSE(DiagConsumer.hadErrorInLastDiags());
-  runAddDocument(Server, FooCpp, SourceContents2);
-  EXPECT_FALSE(DiagConsumer.hadErrorInLastDiags());
-}
-
-TEST_F(ClangdVFSTest, ForceReparseCompileCommandDefines) {
-  MockFSProvider FS;
-  ErrorCheckingDiagConsumer DiagConsumer;
-  MockCompilationDatabase CDB;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  auto FooCpp = testPath("foo.cpp");
-  const auto SourceContents = R"cpp(
-#ifdef WITH_ERROR
-this
-#endif
-
-int main() { return 0; }
-)cpp";
-  FS.Files[FooCpp] = "";
-
-  // Parse with define, we expect to see the errors.
-  CDB.ExtraClangFlags = {"-DWITH_ERROR"};
-  runAddDocument(Server, FooCpp, SourceContents);
-  EXPECT_TRUE(DiagConsumer.hadErrorInLastDiags());
-
-  // Parse without the define, no errors should be produced.
-  CDB.ExtraClangFlags = {};
-  runAddDocument(Server, FooCpp, SourceContents, WantDiagnostics::Auto);
-  ASSERT_TRUE(Server.blockUntilIdleForTest());
-  EXPECT_FALSE(DiagConsumer.hadErrorInLastDiags());
-  // Subsequent addDocument call should finish without errors too.
-  runAddDocument(Server, FooCpp, SourceContents);
-  EXPECT_FALSE(DiagConsumer.hadErrorInLastDiags());
-}
-
-// Test ClangdServer.reparseOpenedFiles.
-TEST_F(ClangdVFSTest, ReparseOpenedFiles) {
-  Annotations FooSource(R"cpp(
-#ifdef MACRO
-static void $one[[bob]]() {}
-#else
-static void $two[[bob]]() {}
-#endif
-
-int main () { bo^b (); return 0; }
-)cpp");
-
-  Annotations BarSource(R"cpp(
-#ifdef MACRO
-this is an error
-#endif
-)cpp");
-
-  Annotations BazSource(R"cpp(
-int hello;
-)cpp");
-
-  MockFSProvider FS;
-  MockCompilationDatabase CDB;
-  MultipleErrorCheckingDiagConsumer DiagConsumer;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  auto FooCpp = testPath("foo.cpp");
-  auto BarCpp = testPath("bar.cpp");
-  auto BazCpp = testPath("baz.cpp");
-
-  FS.Files[FooCpp] = "";
-  FS.Files[BarCpp] = "";
-  FS.Files[BazCpp] = "";
-
-  CDB.ExtraClangFlags = {"-DMACRO=1"};
-  Server.addDocument(FooCpp, FooSource.code());
-  Server.addDocument(BarCpp, BarSource.code());
-  Server.addDocument(BazCpp, BazSource.code());
-  ASSERT_TRUE(Server.blockUntilIdleForTest());
-
-  EXPECT_THAT(DiagConsumer.filesWithDiags(),
-              UnorderedElementsAre(Pair(FooCpp, false), Pair(BarCpp, true),
-                                   Pair(BazCpp, false)));
-
-  auto Locations = runLocateSymbolAt(Server, FooCpp, FooSource.point());
-  EXPECT_TRUE(bool(Locations));
-  EXPECT_THAT(*Locations, ElementsAre(DeclAt(FooCpp, FooSource.range("one"))));
-
-  // Undefine MACRO, close baz.cpp.
-  CDB.ExtraClangFlags.clear();
-  DiagConsumer.clear();
-  Server.removeDocument(BazCpp);
-  Server.addDocument(FooCpp, FooSource.code(), WantDiagnostics::Auto);
-  Server.addDocument(BarCpp, BarSource.code(), WantDiagnostics::Auto);
-  ASSERT_TRUE(Server.blockUntilIdleForTest());
-
-  EXPECT_THAT(DiagConsumer.filesWithDiags(),
-              UnorderedElementsAre(Pair(FooCpp, false), Pair(BarCpp, false)));
-
-  Locations = runLocateSymbolAt(Server, FooCpp, FooSource.point());
-  EXPECT_TRUE(bool(Locations));
-  EXPECT_THAT(*Locations, ElementsAre(DeclAt(FooCpp, FooSource.range("two"))));
-}
-
-TEST_F(ClangdVFSTest, MemoryUsage) {
-  MockFSProvider FS;
-  ErrorCheckingDiagConsumer DiagConsumer;
-  MockCompilationDatabase CDB;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  Path FooCpp = testPath("foo.cpp");
-  const auto SourceContents = R"cpp(
-struct Something {
-  int method();
-};
-)cpp";
-  Path BarCpp = testPath("bar.cpp");
-
-  FS.Files[FooCpp] = "";
-  FS.Files[BarCpp] = "";
-
-  EXPECT_THAT(Server.getUsedBytesPerFile(), IsEmpty());
-
-  Server.addDocument(FooCpp, SourceContents);
-  Server.addDocument(BarCpp, SourceContents);
-  ASSERT_TRUE(Server.blockUntilIdleForTest());
-
-  EXPECT_THAT(Server.getUsedBytesPerFile(),
-              UnorderedElementsAre(Pair(FooCpp, Gt(0u)), Pair(BarCpp, Gt(0u))));
-
-  Server.removeDocument(FooCpp);
-  ASSERT_TRUE(Server.blockUntilIdleForTest());
-  EXPECT_THAT(Server.getUsedBytesPerFile(), ElementsAre(Pair(BarCpp, Gt(0u))));
-
-  Server.removeDocument(BarCpp);
-  ASSERT_TRUE(Server.blockUntilIdleForTest());
-  EXPECT_THAT(Server.getUsedBytesPerFile(), IsEmpty());
-}
-
-TEST_F(ClangdVFSTest, InvalidCompileCommand) {
-  MockFSProvider FS;
-  ErrorCheckingDiagConsumer DiagConsumer;
-  MockCompilationDatabase CDB;
-
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  auto FooCpp = testPath("foo.cpp");
-  // clang cannot create CompilerInvocation if we pass two files in the
-  // CompileCommand. We pass the file in ExtraFlags once and CDB adds another
-  // one in getCompileCommand().
-  CDB.ExtraClangFlags.push_back(FooCpp);
-
-  // Clang can't parse command args in that case, but we shouldn't crash.
-  runAddDocument(Server, FooCpp, "int main() {}");
-
-  EXPECT_EQ(runDumpAST(Server, FooCpp), "<no-ast>");
-  EXPECT_ERROR(runLocateSymbolAt(Server, FooCpp, Position()));
-  EXPECT_ERROR(runFindDocumentHighlights(Server, FooCpp, Position()));
-  EXPECT_ERROR(runRename(Server, FooCpp, Position(), "new_name"));
-  // Identifier-based fallback completion.
-  EXPECT_THAT(cantFail(runCodeComplete(Server, FooCpp, Position(),
-                                       clangd::CodeCompleteOptions()))
-                  .Completions,
-              ElementsAre(Field(&CodeCompletion::Name, "int"),
-                          Field(&CodeCompletion::Name, "main")));
-  auto SigHelp = runSignatureHelp(Server, FooCpp, Position());
-  ASSERT_TRUE(bool(SigHelp)) << "signatureHelp returned an error";
-  EXPECT_THAT(SigHelp->signatures, IsEmpty());
-}
-
-class ClangdThreadingTest : public ClangdVFSTest {};
-
-TEST_F(ClangdThreadingTest, StressTest) {
-  // Without 'static' clang gives an error for a usage inside TestDiagConsumer.
-  static const unsigned FilesCount = 5;
-  const unsigned RequestsCount = 500;
-  // Blocking requests wait for the parsing to complete, they slow down the test
-  // dramatically, so they are issued rarely. Each
-  // BlockingRequestInterval-request will be a blocking one.
-  const unsigned BlockingRequestInterval = 40;
-
-  const auto SourceContentsWithoutErrors = R"cpp(
-int a;
-int b;
-int c;
-int d;
-)cpp";
-
-  const auto SourceContentsWithErrors = R"cpp(
-int a = x;
-int b;
-int c;
-int d;
-)cpp";
-
-  // Giving invalid line and column number should not crash ClangdServer, but
-  // just to make sure we're sometimes hitting the bounds inside the file we
-  // limit the intervals of line and column number that are generated.
-  unsigned MaxLineForFileRequests = 7;
-  unsigned MaxColumnForFileRequests = 10;
-
-  std::vector<std::string> FilePaths;
-  MockFSProvider FS;
-  for (unsigned I = 0; I < FilesCount; ++I) {
-    std::string Name = std::string("Foo") + std::to_string(I) + ".cpp";
-    FS.Files[Name] = "";
-    FilePaths.push_back(testPath(Name));
-  }
-
-  struct FileStat {
-    unsigned HitsWithoutErrors = 0;
-    unsigned HitsWithErrors = 0;
-    bool HadErrorsInLastDiags = false;
-  };
-
-  class TestDiagConsumer : public DiagnosticsConsumer {
-  public:
-    TestDiagConsumer() : Stats(FilesCount, FileStat()) {}
-
-    void onDiagnosticsReady(PathRef File,
-                            std::vector<Diag> Diagnostics) override {
-      StringRef FileIndexStr = llvm::sys::path::stem(File);
-      ASSERT_TRUE(FileIndexStr.consume_front("Foo"));
-
-      unsigned long FileIndex = std::stoul(FileIndexStr.str());
-
-      bool HadError = diagsContainErrors(Diagnostics);
-
-      std::lock_guard<std::mutex> Lock(Mutex);
-      if (HadError)
-        Stats[FileIndex].HitsWithErrors++;
-      else
-        Stats[FileIndex].HitsWithoutErrors++;
-      Stats[FileIndex].HadErrorsInLastDiags = HadError;
-    }
-
-    std::vector<FileStat> takeFileStats() {
-      std::lock_guard<std::mutex> Lock(Mutex);
-      return std::move(Stats);
-    }
-
-  private:
-    std::mutex Mutex;
-    std::vector<FileStat> Stats;
-  };
-
-  struct RequestStats {
-    unsigned RequestsWithoutErrors = 0;
-    unsigned RequestsWithErrors = 0;
-    bool LastContentsHadErrors = false;
-    bool FileIsRemoved = true;
-  };
-
-  std::vector<RequestStats> ReqStats;
-  ReqStats.reserve(FilesCount);
-  for (unsigned FileIndex = 0; FileIndex < FilesCount; ++FileIndex)
-    ReqStats.emplace_back();
-
-  TestDiagConsumer DiagConsumer;
-  {
-    MockCompilationDatabase CDB;
-    ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-    // Prepare some random distributions for the test.
-    std::random_device RandGen;
-
-    std::uniform_int_distribution<unsigned> FileIndexDist(0, FilesCount - 1);
-    // Pass a text that contains compiler errors to addDocument in about 20% of
-    // all requests.
-    std::bernoulli_distribution ShouldHaveErrorsDist(0.2);
-    // Line and Column numbers for requests that need them.
-    std::uniform_int_distribution<int> LineDist(0, MaxLineForFileRequests);
-    std::uniform_int_distribution<int> ColumnDist(0, MaxColumnForFileRequests);
-
-    // Some helpers.
-    auto UpdateStatsOnAddDocument = [&](unsigned FileIndex, bool HadErrors) {
-      auto &Stats = ReqStats[FileIndex];
-
-      if (HadErrors)
-        ++Stats.RequestsWithErrors;
-      else
-        ++Stats.RequestsWithoutErrors;
-      Stats.LastContentsHadErrors = HadErrors;
-      Stats.FileIsRemoved = false;
-    };
-
-    auto UpdateStatsOnRemoveDocument = [&](unsigned FileIndex) {
-      auto &Stats = ReqStats[FileIndex];
-
-      Stats.FileIsRemoved = true;
-    };
-
-    auto AddDocument = [&](unsigned FileIndex, bool SkipCache) {
-      bool ShouldHaveErrors = ShouldHaveErrorsDist(RandGen);
-      Server.addDocument(FilePaths[FileIndex],
-                         ShouldHaveErrors ? SourceContentsWithErrors
-                                          : SourceContentsWithoutErrors,
-                         WantDiagnostics::Auto);
-      UpdateStatsOnAddDocument(FileIndex, ShouldHaveErrors);
-    };
-
-    // Various requests that we would randomly run.
-    auto AddDocumentRequest = [&]() {
-      unsigned FileIndex = FileIndexDist(RandGen);
-      AddDocument(FileIndex, /*SkipCache=*/false);
-    };
-
-    auto ForceReparseRequest = [&]() {
-      unsigned FileIndex = FileIndexDist(RandGen);
-      AddDocument(FileIndex, /*SkipCache=*/true);
-    };
-
-    auto RemoveDocumentRequest = [&]() {
-      unsigned FileIndex = FileIndexDist(RandGen);
-      // Make sure we don't violate the ClangdServer's contract.
-      if (ReqStats[FileIndex].FileIsRemoved)
-        AddDocument(FileIndex, /*SkipCache=*/false);
-
-      Server.removeDocument(FilePaths[FileIndex]);
-      UpdateStatsOnRemoveDocument(FileIndex);
-    };
-
-    auto CodeCompletionRequest = [&]() {
-      unsigned FileIndex = FileIndexDist(RandGen);
-      // Make sure we don't violate the ClangdServer's contract.
-      if (ReqStats[FileIndex].FileIsRemoved)
-        AddDocument(FileIndex, /*SkipCache=*/false);
-
-      Position Pos;
-      Pos.line = LineDist(RandGen);
-      Pos.character = ColumnDist(RandGen);
-      // FIXME(ibiryukov): Also test async completion requests.
-      // Simply putting CodeCompletion into async requests now would make
-      // tests slow, since there's no way to cancel previous completion
-      // requests as opposed to AddDocument/RemoveDocument, which are implicitly
-      // cancelled by any subsequent AddDocument/RemoveDocument request to the
-      // same file.
-      cantFail(runCodeComplete(Server, FilePaths[FileIndex], Pos,
-                               clangd::CodeCompleteOptions()));
-    };
-
-    auto LocateSymbolRequest = [&]() {
-      unsigned FileIndex = FileIndexDist(RandGen);
-      // Make sure we don't violate the ClangdServer's contract.
-      if (ReqStats[FileIndex].FileIsRemoved)
-        AddDocument(FileIndex, /*SkipCache=*/false);
-
-      Position Pos;
-      Pos.line = LineDist(RandGen);
-      Pos.character = ColumnDist(RandGen);
-
-      ASSERT_TRUE(!!runLocateSymbolAt(Server, FilePaths[FileIndex], Pos));
-    };
-
-    std::vector<std::function<void()>> AsyncRequests = {
-        AddDocumentRequest, ForceReparseRequest, RemoveDocumentRequest};
-    std::vector<std::function<void()>> BlockingRequests = {
-        CodeCompletionRequest, LocateSymbolRequest};
-
-    // Bash requests to ClangdServer in a loop.
-    std::uniform_int_distribution<int> AsyncRequestIndexDist(
-        0, AsyncRequests.size() - 1);
-    std::uniform_int_distribution<int> BlockingRequestIndexDist(
-        0, BlockingRequests.size() - 1);
-    for (unsigned I = 1; I <= RequestsCount; ++I) {
-      if (I % BlockingRequestInterval != 0) {
-        // Issue an async request most of the time. It should be fast.
-        unsigned RequestIndex = AsyncRequestIndexDist(RandGen);
-        AsyncRequests[RequestIndex]();
-      } else {
-        // Issue a blocking request once in a while.
-        auto RequestIndex = BlockingRequestIndexDist(RandGen);
-        BlockingRequests[RequestIndex]();
-      }
-    }
-    ASSERT_TRUE(Server.blockUntilIdleForTest());
-  }
-
-  // Check some invariants about the state of the program.
-  std::vector<FileStat> Stats = DiagConsumer.takeFileStats();
-  for (unsigned I = 0; I < FilesCount; ++I) {
-    if (!ReqStats[I].FileIsRemoved) {
-      ASSERT_EQ(Stats[I].HadErrorsInLastDiags,
-                ReqStats[I].LastContentsHadErrors);
-    }
-
-    ASSERT_LE(Stats[I].HitsWithErrors, ReqStats[I].RequestsWithErrors);
-    ASSERT_LE(Stats[I].HitsWithoutErrors, ReqStats[I].RequestsWithoutErrors);
-  }
-}
-
-TEST_F(ClangdVFSTest, CheckSourceHeaderSwitch) {
-  MockFSProvider FS;
-  ErrorCheckingDiagConsumer DiagConsumer;
-  MockCompilationDatabase CDB;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  auto SourceContents = R"cpp(
-  #include "foo.h"
-  int b = a;
-  )cpp";
-
-  auto FooCpp = testPath("foo.cpp");
-  auto FooH = testPath("foo.h");
-  auto Invalid = testPath("main.cpp");
-
-  FS.Files[FooCpp] = SourceContents;
-  FS.Files[FooH] = "int a;";
-  FS.Files[Invalid] = "int main() { \n return 0; \n }";
-
-  Optional<Path> PathResult = Server.switchSourceHeader(FooCpp);
-  EXPECT_TRUE(PathResult.hasValue());
-  ASSERT_EQ(PathResult.getValue(), FooH);
-
-  PathResult = Server.switchSourceHeader(FooH);
-  EXPECT_TRUE(PathResult.hasValue());
-  ASSERT_EQ(PathResult.getValue(), FooCpp);
-
-  SourceContents = R"c(
-  #include "foo.HH"
-  int b = a;
-  )c";
-
-  // Test with header file in capital letters and different extension, source
-  // file with different extension
-  auto FooC = testPath("bar.c");
-  auto FooHH = testPath("bar.HH");
-
-  FS.Files[FooC] = SourceContents;
-  FS.Files[FooHH] = "int a;";
-
-  PathResult = Server.switchSourceHeader(FooC);
-  EXPECT_TRUE(PathResult.hasValue());
-  ASSERT_EQ(PathResult.getValue(), FooHH);
-
-  // Test with both capital letters
-  auto Foo2C = testPath("foo2.C");
-  auto Foo2HH = testPath("foo2.HH");
-  FS.Files[Foo2C] = SourceContents;
-  FS.Files[Foo2HH] = "int a;";
-
-  PathResult = Server.switchSourceHeader(Foo2C);
-  EXPECT_TRUE(PathResult.hasValue());
-  ASSERT_EQ(PathResult.getValue(), Foo2HH);
-
-  // Test with source file as capital letter and .hxx header file
-  auto Foo3C = testPath("foo3.C");
-  auto Foo3HXX = testPath("foo3.hxx");
-
-  SourceContents = R"c(
-  #include "foo3.hxx"
-  int b = a;
-  )c";
-
-  FS.Files[Foo3C] = SourceContents;
-  FS.Files[Foo3HXX] = "int a;";
-
-  PathResult = Server.switchSourceHeader(Foo3C);
-  EXPECT_TRUE(PathResult.hasValue());
-  ASSERT_EQ(PathResult.getValue(), Foo3HXX);
-
-  // Test if asking for a corresponding file that doesn't exist returns an empty
-  // string.
-  PathResult = Server.switchSourceHeader(Invalid);
-  EXPECT_FALSE(PathResult.hasValue());
-}
-
-TEST_F(ClangdThreadingTest, NoConcurrentDiagnostics) {
-  class NoConcurrentAccessDiagConsumer : public DiagnosticsConsumer {
-  public:
-    std::atomic<int> Count = {0};
-
-    NoConcurrentAccessDiagConsumer(std::promise<void> StartSecondReparse)
-        : StartSecondReparse(std::move(StartSecondReparse)) {}
-
-    void onDiagnosticsReady(PathRef, std::vector<Diag>) override {
-      ++Count;
-      std::unique_lock<std::mutex> Lock(Mutex, std::try_to_lock_t());
-      ASSERT_TRUE(Lock.owns_lock())
-          << "Detected concurrent onDiagnosticsReady calls for the same file.";
-
-      // If we started the second parse immediately, it might cancel the first.
-      // So we don't allow it to start until the first has delivered diags...
-      if (FirstRequest) {
-        FirstRequest = false;
-        StartSecondReparse.set_value();
-        // ... but then we wait long enough that the callbacks would overlap.
-        std::this_thread::sleep_for(std::chrono::milliseconds(50));
-      }
-    }
-
-  private:
-    std::mutex Mutex;
-    bool FirstRequest = true;
-    std::promise<void> StartSecondReparse;
-  };
-
-  const auto SourceContentsWithoutErrors = R"cpp(
-int a;
-int b;
-int c;
-int d;
-)cpp";
-
-  const auto SourceContentsWithErrors = R"cpp(
-int a = x;
-int b;
-int c;
-int d;
-)cpp";
-
-  auto FooCpp = testPath("foo.cpp");
-  MockFSProvider FS;
-  FS.Files[FooCpp] = "";
-
-  std::promise<void> StartSecondPromise;
-  std::future<void> StartSecond = StartSecondPromise.get_future();
-
-  NoConcurrentAccessDiagConsumer DiagConsumer(std::move(StartSecondPromise));
-  MockCompilationDatabase CDB;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-  Server.addDocument(FooCpp, SourceContentsWithErrors);
-  StartSecond.wait();
-  Server.addDocument(FooCpp, SourceContentsWithoutErrors);
-  ASSERT_TRUE(Server.blockUntilIdleForTest()) << "Waiting for diagnostics";
-  ASSERT_EQ(DiagConsumer.Count, 2); // Sanity check - we actually ran both?
-}
-
-TEST_F(ClangdVFSTest, FormatCode) {
-  MockFSProvider FS;
-  ErrorCheckingDiagConsumer DiagConsumer;
-  MockCompilationDatabase CDB;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  auto Path = testPath("foo.cpp");
-  std::string Code = R"cpp(
-#include "x.h"
-#include "y.h"
-
-void f(  )  {}
-)cpp";
-  std::string Expected = R"cpp(
-#include "x.h"
-#include "y.h"
-
-void f() {}
-)cpp";
-  FS.Files[Path] = Code;
-  runAddDocument(Server, Path, Code);
-
-  auto Replaces = Server.formatFile(Code, Path);
-  EXPECT_TRUE(static_cast<bool>(Replaces));
-  auto Changed = tooling::applyAllReplacements(Code, *Replaces);
-  EXPECT_TRUE(static_cast<bool>(Changed));
-  EXPECT_EQ(Expected, *Changed);
-}
-
-TEST_F(ClangdVFSTest, ChangedHeaderFromISystem) {
-  MockFSProvider FS;
-  ErrorCheckingDiagConsumer DiagConsumer;
-  MockCompilationDatabase CDB;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  auto SourcePath = testPath("source/foo.cpp");
-  auto HeaderPath = testPath("headers/foo.h");
-  FS.Files[HeaderPath] = "struct X { int bar; };";
-  Annotations Code(R"cpp(
-    #include "foo.h"
-
-    int main() {
-      X().ba^
-    })cpp");
-  CDB.ExtraClangFlags.push_back("-xc++");
-  CDB.ExtraClangFlags.push_back("-isystem" + testPath("headers"));
-
-  runAddDocument(Server, SourcePath, Code.code());
-  auto Completions = cantFail(runCodeComplete(Server, SourcePath, Code.point(),
-                                              clangd::CodeCompleteOptions()))
-                         .Completions;
-  EXPECT_THAT(Completions, ElementsAre(Field(&CodeCompletion::Name, "bar")));
-  // Update the header and rerun addDocument to make sure we get the updated
-  // files.
-  FS.Files[HeaderPath] = "struct X { int bar; int baz; };";
-  runAddDocument(Server, SourcePath, Code.code());
-  Completions = cantFail(runCodeComplete(Server, SourcePath, Code.point(),
-                                         clangd::CodeCompleteOptions()))
-                    .Completions;
-  // We want to make sure we see the updated version.
-  EXPECT_THAT(Completions, ElementsAre(Field(&CodeCompletion::Name, "bar"),
-                                       Field(&CodeCompletion::Name, "baz")));
-}
-
-// FIXME(ioeric): make this work for windows again.
-#ifndef _WIN32
-// Check that running code completion doesn't stat() a bunch of files from the
-// preamble again. (They should be using the preamble's stat-cache)
-TEST(ClangdTests, PreambleVFSStatCache) {
-  class ListenStatsFSProvider : public FileSystemProvider {
-  public:
-    ListenStatsFSProvider(llvm::StringMap<unsigned> &CountStats)
-        : CountStats(CountStats) {}
-
-    IntrusiveRefCntPtr<llvm::vfs::FileSystem> getFileSystem() const override {
-      class ListenStatVFS : public llvm::vfs::ProxyFileSystem {
-      public:
-        ListenStatVFS(IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS,
-                      llvm::StringMap<unsigned> &CountStats)
-            : ProxyFileSystem(std::move(FS)), CountStats(CountStats) {}
-
-        llvm::ErrorOr<std::unique_ptr<llvm::vfs::File>>
-        openFileForRead(const Twine &Path) override {
-          ++CountStats[llvm::sys::path::filename(Path.str())];
-          return ProxyFileSystem::openFileForRead(Path);
-        }
-        llvm::ErrorOr<llvm::vfs::Status> status(const Twine &Path) override {
-          ++CountStats[llvm::sys::path::filename(Path.str())];
-          return ProxyFileSystem::status(Path);
-        }
-
-      private:
-        llvm::StringMap<unsigned> &CountStats;
-      };
-
-      return IntrusiveRefCntPtr<ListenStatVFS>(
-          new ListenStatVFS(buildTestFS(Files), CountStats));
-    }
-
-    // If relative paths are used, they are resolved with testPath().
-    llvm::StringMap<std::string> Files;
-    llvm::StringMap<unsigned> &CountStats;
-  };
-
-  llvm::StringMap<unsigned> CountStats;
-  ListenStatsFSProvider FS(CountStats);
-  ErrorCheckingDiagConsumer DiagConsumer;
-  MockCompilationDatabase CDB;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  auto SourcePath = testPath("foo.cpp");
-  auto HeaderPath = testPath("foo.h");
-  FS.Files[HeaderPath] = "struct TestSym {};";
-  Annotations Code(R"cpp(
-    #include "foo.h"
-
-    int main() {
-      TestSy^
-    })cpp");
-
-  runAddDocument(Server, SourcePath, Code.code());
-
-  unsigned Before = CountStats["foo.h"];
-  EXPECT_GT(Before, 0u);
-  auto Completions = cantFail(runCodeComplete(Server, SourcePath, Code.point(),
-                                              clangd::CodeCompleteOptions()))
-                         .Completions;
-  EXPECT_EQ(CountStats["foo.h"], Before);
-  EXPECT_THAT(Completions,
-              ElementsAre(Field(&CodeCompletion::Name, "TestSym")));
-}
-#endif
-
-TEST_F(ClangdVFSTest, FlagsWithPlugins) {
-  MockFSProvider FS;
-  ErrorCheckingDiagConsumer DiagConsumer;
-  MockCompilationDatabase CDB;
-  CDB.ExtraClangFlags = {
-      "-Xclang",
-      "-add-plugin",
-      "-Xclang",
-      "random-plugin",
-  };
-  OverlayCDB OCDB(&CDB);
-  ClangdServer Server(OCDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  auto FooCpp = testPath("foo.cpp");
-  const auto SourceContents = "int main() { return 0; }";
-  FS.Files[FooCpp] = FooCpp;
-  Server.addDocument(FooCpp, SourceContents);
-  auto Result = dumpASTWithoutMemoryLocs(Server, FooCpp);
-  EXPECT_TRUE(Server.blockUntilIdleForTest()) << "Waiting for diagnostics";
-  EXPECT_NE(Result, "<no-ast>");
-}
-
-TEST_F(ClangdVFSTest, FallbackWhenPreambleIsNotReady) {
-  MockFSProvider FS;
-  ErrorCheckingDiagConsumer DiagConsumer;
-  MockCompilationDatabase CDB;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  auto FooCpp = testPath("foo.cpp");
-   Annotations Code(R"cpp(
-    namespace ns { int xyz; }
-    using namespace ns;
-    int main() {
-       xy^
-    })cpp");
-  FS.Files[FooCpp] = FooCpp;
-
-  auto Opts = clangd::CodeCompleteOptions();
-  Opts.AllowFallback = true;
-
-  // This will make compile command broken and preamble absent.
-  CDB.ExtraClangFlags = {"yolo.cc"};
-  Server.addDocument(FooCpp, Code.code());
-  ASSERT_TRUE(Server.blockUntilIdleForTest());
-  auto Res = cantFail(runCodeComplete(Server, FooCpp, Code.point(), Opts));
-  EXPECT_EQ(Res.Context, CodeCompletionContext::CCC_Recovery);
-  // Identifier-based fallback completion doesn't know about "symbol" scope.
-  EXPECT_THAT(Res.Completions,
-              ElementsAre(AllOf(Field(&CodeCompletion::Name, "xyz"),
-                                Field(&CodeCompletion::Scope, ""))));
-
-  // Make the compile command work again.
-  CDB.ExtraClangFlags = {"-std=c++11"};
-  Server.addDocument(FooCpp, Code.code());
-  ASSERT_TRUE(Server.blockUntilIdleForTest());
-  EXPECT_THAT(cantFail(runCodeComplete(Server, FooCpp, Code.point(),
-                                       clangd::CodeCompleteOptions()))
-                  .Completions,
-              ElementsAre(AllOf(Field(&CodeCompletion::Name, "xyz"),
-                                Field(&CodeCompletion::Scope, "ns::"))));
-}
-
-TEST_F(ClangdVFSTest, FallbackWhenWaitingForCompileCommand) {
-  MockFSProvider FS;
-  ErrorCheckingDiagConsumer DiagConsumer;
-  // Returns compile command only when notified.
-  class DelayedCompilationDatabase : public GlobalCompilationDatabase {
-  public:
-    DelayedCompilationDatabase(Notification &CanReturnCommand)
-        : CanReturnCommand(CanReturnCommand) {}
-
-    llvm::Optional<tooling::CompileCommand>
-    getCompileCommand(PathRef File, ProjectInfo * = nullptr) const override {
-      // FIXME: make this timeout and fail instead of waiting forever in case
-      // something goes wrong.
-      CanReturnCommand.wait();
-      auto FileName = llvm::sys::path::filename(File);
-      std::vector<std::string> CommandLine = {"clangd", "-ffreestanding", File};
-      return {tooling::CompileCommand(llvm::sys::path::parent_path(File),
-                                      FileName, std::move(CommandLine), "")};
-    }
-
-    std::vector<std::string> ExtraClangFlags;
-
-  private:
-    Notification &CanReturnCommand;
-  };
-
-  Notification CanReturnCommand;
-  DelayedCompilationDatabase CDB(CanReturnCommand);
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  auto FooCpp = testPath("foo.cpp");
-  Annotations Code(R"cpp(
-    namespace ns { int xyz; }
-    using namespace ns;
-    int main() {
-       xy^
-    })cpp");
-  FS.Files[FooCpp] = FooCpp;
-  Server.addDocument(FooCpp, Code.code());
-
-  // Sleep for some time to make sure code completion is not run because update
-  // hasn't been scheduled.
-  std::this_thread::sleep_for(std::chrono::milliseconds(10));
-  auto Opts = clangd::CodeCompleteOptions();
-  Opts.AllowFallback = true;
-
-  auto Res = cantFail(runCodeComplete(Server, FooCpp, Code.point(), Opts));
-  EXPECT_EQ(Res.Context, CodeCompletionContext::CCC_Recovery);
-
-  CanReturnCommand.notify();
-  ASSERT_TRUE(Server.blockUntilIdleForTest());
-  EXPECT_THAT(cantFail(runCodeComplete(Server, FooCpp, Code.point(),
-                                       clangd::CodeCompleteOptions()))
-                  .Completions,
-              ElementsAre(AllOf(Field(&CodeCompletion::Name, "xyz"),
-                                Field(&CodeCompletion::Scope, "ns::"))));
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/ClangdUnitTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/ClangdUnitTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/ClangdUnitTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/ClangdUnitTests.cpp (removed)
@@ -1,86 +0,0 @@
-//===-- ClangdUnitTests.cpp - ClangdUnit 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 "Annotations.h"
-#include "ClangdUnit.h"
-#include "SourceCode.h"
-#include "TestTU.h"
-#include "llvm/Support/ScopedPrinter.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-
-using testing::ElementsAre;
-
-TEST(ClangdUnitTest, GetBeginningOfIdentifier) {
-  std::string Preamble = R"cpp(
-struct Bar { int func(); };
-#define MACRO(X) void f() { X; }
-Bar* bar;
-  )cpp";
-  // First ^ is the expected beginning, last is the search position.
-  for (std::string Text : std::vector<std::string>{
-           "int ^f^oo();", // inside identifier
-           "int ^foo();",  // beginning of identifier
-           "int ^foo^();", // end of identifier
-           "int foo(^);",  // non-identifier
-           "^int foo();",  // beginning of file (can't back up)
-           "int ^f0^0();", // after a digit (lexing at N-1 is wrong)
-           "int ^λλ^λ();", // UTF-8 handled properly when backing up
-
-           // identifier in macro arg
-           "MACRO(bar->^func())",  // beginning of identifier
-           "MACRO(bar->^fun^c())", // inside identifier
-           "MACRO(bar->^func^())", // end of identifier
-           "MACRO(^bar->func())",  // begin identifier
-           "MACRO(^bar^->func())", // end identifier
-           "^MACRO(bar->func())",  // beginning of macro name
-           "^MAC^RO(bar->func())", // inside macro name
-           "^MACRO^(bar->func())", // end of macro name
-       }) {
-    std::string WithPreamble = Preamble + Text;
-    Annotations TestCase(WithPreamble);
-    auto AST = TestTU::withCode(TestCase.code()).build();
-    const auto &SourceMgr = AST.getASTContext().getSourceManager();
-    SourceLocation Actual = getBeginningOfIdentifier(
-        AST, TestCase.points().back(), SourceMgr.getMainFileID());
-    Position ActualPos = offsetToPosition(
-        TestCase.code(),
-        SourceMgr.getFileOffset(SourceMgr.getSpellingLoc(Actual)));
-    EXPECT_EQ(TestCase.points().front(), ActualPos) << Text;
-  }
-}
-
-MATCHER_P(DeclNamed, Name, "") {
-  if (NamedDecl *ND = dyn_cast<NamedDecl>(arg))
-    if (ND->getName() == Name)
-      return true;
-  if (auto *Stream = result_listener->stream()) {
-    llvm::raw_os_ostream OS(*Stream);
-    arg->dump(OS);
-  }
-  return false;
-}
-
-TEST(ClangdUnitTest, TopLevelDecls) {
-  TestTU TU;
-  TU.HeaderCode = R"(
-    int header1();
-    int header2;
-  )";
-  TU.Code = "int main();";
-  auto AST = TU.build();
-  EXPECT_THAT(AST.getLocalTopLevelDecls(), ElementsAre(DeclNamed("main")));
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp (removed)
@@ -1,2523 +0,0 @@
-//===-- CodeCompleteTests.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 "Annotations.h"
-#include "ClangdServer.h"
-#include "CodeComplete.h"
-#include "Compiler.h"
-#include "Matchers.h"
-#include "Protocol.h"
-#include "Quality.h"
-#include "SourceCode.h"
-#include "SyncAPI.h"
-#include "TestFS.h"
-#include "TestIndex.h"
-#include "TestTU.h"
-#include "index/Index.h"
-#include "index/MemIndex.h"
-#include "clang/Sema/CodeCompleteConsumer.h"
-#include "clang/Tooling/CompilationDatabase.h"
-#include "llvm/Support/Error.h"
-#include "llvm/Support/Path.h"
-#include "llvm/Testing/Support/Error.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-
-namespace {
-using ::llvm::Failed;
-using ::testing::AllOf;
-using ::testing::Contains;
-using ::testing::ElementsAre;
-using ::testing::Field;
-using ::testing::HasSubstr;
-using ::testing::IsEmpty;
-using ::testing::Not;
-using ::testing::UnorderedElementsAre;
-
-class IgnoreDiagnostics : public DiagnosticsConsumer {
-  void onDiagnosticsReady(PathRef File,
-                          std::vector<Diag> Diagnostics) override {}
-};
-
-// GMock helpers for matching completion items.
-MATCHER_P(Named, Name, "") { return arg.Name == Name; }
-MATCHER_P(Scope, S, "") { return arg.Scope == S; }
-MATCHER_P(Qualifier, Q, "") { return arg.RequiredQualifier == Q; }
-MATCHER_P(Labeled, Label, "") {
-  return arg.RequiredQualifier + arg.Name + arg.Signature == Label;
-}
-MATCHER_P(SigHelpLabeled, Label, "") { return arg.label == Label; }
-MATCHER_P(Kind, K, "") { return arg.Kind == K; }
-MATCHER_P(Doc, D, "") { return arg.Documentation == D; }
-MATCHER_P(ReturnType, D, "") { return arg.ReturnType == D; }
-MATCHER_P(HasInclude, IncludeHeader, "") {
-  return !arg.Includes.empty() && arg.Includes[0].Header == IncludeHeader;
-}
-MATCHER_P(InsertInclude, IncludeHeader, "") {
-  return !arg.Includes.empty() && arg.Includes[0].Header == IncludeHeader &&
-         bool(arg.Includes[0].Insertion);
-}
-MATCHER(InsertInclude, "") {
-  return !arg.Includes.empty() && bool(arg.Includes[0].Insertion);
-}
-MATCHER_P(SnippetSuffix, Text, "") { return arg.SnippetSuffix == Text; }
-MATCHER_P(Origin, OriginSet, "") { return arg.Origin == OriginSet; }
-MATCHER_P(Signature, S, "") { return arg.Signature == S; }
-
-// Shorthand for Contains(Named(Name)).
-Matcher<const std::vector<CodeCompletion> &> Has(std::string Name) {
-  return Contains(Named(std::move(Name)));
-}
-Matcher<const std::vector<CodeCompletion> &> Has(std::string Name,
-                                                 CompletionItemKind K) {
-  return Contains(AllOf(Named(std::move(Name)), Kind(K)));
-}
-MATCHER(IsDocumented, "") { return !arg.Documentation.empty(); }
-MATCHER(Deprecated, "") { return arg.Deprecated; }
-
-std::unique_ptr<SymbolIndex> memIndex(std::vector<Symbol> Symbols) {
-  SymbolSlab::Builder Slab;
-  for (const auto &Sym : Symbols)
-    Slab.insert(Sym);
-  return MemIndex::build(std::move(Slab).build(), RefSlab());
-}
-
-CodeCompleteResult completions(ClangdServer &Server, llvm::StringRef TestCode,
-                               Position point,
-                               std::vector<Symbol> IndexSymbols = {},
-                               clangd::CodeCompleteOptions Opts = {}) {
-  std::unique_ptr<SymbolIndex> OverrideIndex;
-  if (!IndexSymbols.empty()) {
-    assert(!Opts.Index && "both Index and IndexSymbols given!");
-    OverrideIndex = memIndex(std::move(IndexSymbols));
-    Opts.Index = OverrideIndex.get();
-  }
-
-  auto File = testPath("foo.cpp");
-  runAddDocument(Server, File, TestCode);
-  auto CompletionList =
-      llvm::cantFail(runCodeComplete(Server, File, point, Opts));
-  return CompletionList;
-}
-
-CodeCompleteResult completions(ClangdServer &Server, llvm::StringRef Text,
-                               std::vector<Symbol> IndexSymbols = {},
-                               clangd::CodeCompleteOptions Opts = {},
-                               PathRef FilePath = "foo.cpp") {
-  std::unique_ptr<SymbolIndex> OverrideIndex;
-  if (!IndexSymbols.empty()) {
-    assert(!Opts.Index && "both Index and IndexSymbols given!");
-    OverrideIndex = memIndex(std::move(IndexSymbols));
-    Opts.Index = OverrideIndex.get();
-  }
-
-  auto File = testPath(FilePath);
-  Annotations Test(Text);
-  runAddDocument(Server, File, Test.code());
-  auto CompletionList =
-      llvm::cantFail(runCodeComplete(Server, File, Test.point(), Opts));
-  return CompletionList;
-}
-
-// Builds a server and runs code completion.
-// If IndexSymbols is non-empty, an index will be built and passed to opts.
-CodeCompleteResult completions(llvm::StringRef Text,
-                               std::vector<Symbol> IndexSymbols = {},
-                               clangd::CodeCompleteOptions Opts = {},
-                               PathRef FilePath = "foo.cpp") {
-  MockFSProvider FS;
-  MockCompilationDatabase CDB;
-  IgnoreDiagnostics DiagConsumer;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-  return completions(Server, Text, std::move(IndexSymbols), std::move(Opts),
-                     FilePath);
-}
-
-// Builds a server and runs code completion.
-// If IndexSymbols is non-empty, an index will be built and passed to opts.
-CodeCompleteResult completionsNoCompile(llvm::StringRef Text,
-                                        std::vector<Symbol> IndexSymbols = {},
-                                        clangd::CodeCompleteOptions Opts = {},
-                                        PathRef FilePath = "foo.cpp") {
-  std::unique_ptr<SymbolIndex> OverrideIndex;
-  if (!IndexSymbols.empty()) {
-    assert(!Opts.Index && "both Index and IndexSymbols given!");
-    OverrideIndex = memIndex(std::move(IndexSymbols));
-    Opts.Index = OverrideIndex.get();
-  }
-
-  MockFSProvider FS;
-  Annotations Test(Text);
-  return codeComplete(FilePath, tooling::CompileCommand(), /*Preamble=*/nullptr,
-                      Test.code(), Test.point(), FS.getFileSystem(), Opts);
-}
-
-Symbol withReferences(int N, Symbol S) {
-  S.References = N;
-  return S;
-}
-
-TEST(CompletionTest, Limit) {
-  clangd::CodeCompleteOptions Opts;
-  Opts.Limit = 2;
-  auto Results = completions(R"cpp(
-struct ClassWithMembers {
-  int AAA();
-  int BBB();
-  int CCC();
-};
-int main() { ClassWithMembers().^ }
-      )cpp",
-                             /*IndexSymbols=*/{}, Opts);
-
-  EXPECT_TRUE(Results.HasMore);
-  EXPECT_THAT(Results.Completions, ElementsAre(Named("AAA"), Named("BBB")));
-}
-
-TEST(CompletionTest, Filter) {
-  std::string Body = R"cpp(
-    #define MotorCar
-    int Car;
-    struct S {
-      int FooBar;
-      int FooBaz;
-      int Qux;
-    };
-  )cpp";
-
-  // Only items matching the fuzzy query are returned.
-  EXPECT_THAT(completions(Body + "int main() { S().Foba^ }").Completions,
-              AllOf(Has("FooBar"), Has("FooBaz"), Not(Has("Qux"))));
-
-  // Macros require  prefix match.
-  EXPECT_THAT(completions(Body + "int main() { C^ }").Completions,
-              AllOf(Has("Car"), Not(Has("MotorCar"))));
-}
-
-void TestAfterDotCompletion(clangd::CodeCompleteOptions Opts) {
-  auto Results = completions(
-      R"cpp(
-      int global_var;
-
-      int global_func();
-
-      // Make sure this is not in preamble.
-      #define MACRO X
-
-      struct GlobalClass {};
-
-      struct ClassWithMembers {
-        /// Doc for method.
-        int method();
-
-        int field;
-      private:
-        int private_field;
-      };
-
-      int test() {
-        struct LocalClass {};
-
-        /// Doc for local_var.
-        int local_var;
-
-        ClassWithMembers().^
-      }
-      )cpp",
-      {cls("IndexClass"), var("index_var"), func("index_func")}, Opts);
-
-  // Class members. The only items that must be present in after-dot
-  // completion.
-  EXPECT_THAT(Results.Completions,
-              AllOf(Has("method"), Has("field"), Not(Has("ClassWithMembers")),
-                    Not(Has("operator=")), Not(Has("~ClassWithMembers"))));
-  EXPECT_IFF(Opts.IncludeIneligibleResults, Results.Completions,
-             Has("private_field"));
-  // Global items.
-  EXPECT_THAT(
-      Results.Completions,
-      Not(AnyOf(Has("global_var"), Has("index_var"), Has("global_func"),
-                Has("global_func()"), Has("index_func"), Has("GlobalClass"),
-                Has("IndexClass"), Has("MACRO"), Has("LocalClass"))));
-  // There should be no code patterns (aka snippets) in after-dot
-  // completion. At least there aren't any we're aware of.
-  EXPECT_THAT(Results.Completions,
-              Not(Contains(Kind(CompletionItemKind::Snippet))));
-  // Check documentation.
-  EXPECT_IFF(Opts.IncludeComments, Results.Completions,
-             Contains(IsDocumented()));
-}
-
-void TestGlobalScopeCompletion(clangd::CodeCompleteOptions Opts) {
-  auto Results = completions(
-      R"cpp(
-      int global_var;
-      int global_func();
-
-      // Make sure this is not in preamble.
-      #define MACRO X
-
-      struct GlobalClass {};
-
-      struct ClassWithMembers {
-        /// Doc for method.
-        int method();
-      };
-
-      int test() {
-        struct LocalClass {};
-
-        /// Doc for local_var.
-        int local_var;
-
-        ^
-      }
-      )cpp",
-      {cls("IndexClass"), var("index_var"), func("index_func")}, Opts);
-
-  // Class members. Should never be present in global completions.
-  EXPECT_THAT(Results.Completions,
-              Not(AnyOf(Has("method"), Has("method()"), Has("field"))));
-  // Global items.
-  EXPECT_THAT(Results.Completions,
-              AllOf(Has("global_var"), Has("index_var"), Has("global_func"),
-                    Has("index_func" /* our fake symbol doesn't include () */),
-                    Has("GlobalClass"), Has("IndexClass")));
-  // A macro.
-  EXPECT_IFF(Opts.IncludeMacros, Results.Completions, Has("MACRO"));
-  // Local items. Must be present always.
-  EXPECT_THAT(Results.Completions,
-              AllOf(Has("local_var"), Has("LocalClass"),
-                    Contains(Kind(CompletionItemKind::Snippet))));
-  // Check documentation.
-  EXPECT_IFF(Opts.IncludeComments, Results.Completions,
-             Contains(IsDocumented()));
-}
-
-TEST(CompletionTest, CompletionOptions) {
-  auto Test = [&](const clangd::CodeCompleteOptions &Opts) {
-    TestAfterDotCompletion(Opts);
-    TestGlobalScopeCompletion(Opts);
-  };
-  // We used to test every combination of options, but that got too slow (2^N).
-  auto Flags = {
-      &clangd::CodeCompleteOptions::IncludeMacros,
-      &clangd::CodeCompleteOptions::IncludeComments,
-      &clangd::CodeCompleteOptions::IncludeCodePatterns,
-      &clangd::CodeCompleteOptions::IncludeIneligibleResults,
-  };
-  // Test default options.
-  Test({});
-  // Test with one flag flipped.
-  for (auto &F : Flags) {
-    clangd::CodeCompleteOptions O;
-    O.*F ^= true;
-    Test(O);
-  }
-}
-
-TEST(CompletionTest, Priorities) {
-  auto Internal = completions(R"cpp(
-      class Foo {
-        public: void pub();
-        protected: void prot();
-        private: void priv();
-      };
-      void Foo::pub() { this->^ }
-  )cpp");
-  EXPECT_THAT(Internal.Completions,
-              HasSubsequence(Named("priv"), Named("prot"), Named("pub")));
-
-  auto External = completions(R"cpp(
-      class Foo {
-        public: void pub();
-        protected: void prot();
-        private: void priv();
-      };
-      void test() {
-        Foo F;
-        F.^
-      }
-  )cpp");
-  EXPECT_THAT(External.Completions,
-              AllOf(Has("pub"), Not(Has("prot")), Not(Has("priv"))));
-}
-
-TEST(CompletionTest, Qualifiers) {
-  auto Results = completions(R"cpp(
-      class Foo {
-        public: int foo() const;
-        int bar() const;
-      };
-      class Bar : public Foo {
-        int foo() const;
-      };
-      void test() { Bar().^ }
-  )cpp");
-  EXPECT_THAT(Results.Completions,
-              Contains(AllOf(Qualifier(""), Named("bar"))));
-  // Hidden members are not shown.
-  EXPECT_THAT(Results.Completions,
-              Not(Contains(AllOf(Qualifier("Foo::"), Named("foo")))));
-  // Private members are not shown.
-  EXPECT_THAT(Results.Completions,
-              Not(Contains(AllOf(Qualifier(""), Named("foo")))));
-}
-
-TEST(CompletionTest, InjectedTypename) {
-  // These are suppressed when accessed as a member...
-  EXPECT_THAT(completions("struct X{}; void foo(){ X().^ }").Completions,
-              Not(Has("X")));
-  EXPECT_THAT(completions("struct X{ void foo(){ this->^ } };").Completions,
-              Not(Has("X")));
-  // ...but accessible in other, more useful cases.
-  EXPECT_THAT(completions("struct X{ void foo(){ ^ } };").Completions,
-              Has("X"));
-  EXPECT_THAT(
-      completions("struct Y{}; struct X:Y{ void foo(){ ^ } };").Completions,
-      Has("Y"));
-  EXPECT_THAT(
-      completions(
-          "template<class> struct Y{}; struct X:Y<int>{ void foo(){ ^ } };")
-          .Completions,
-      Has("Y"));
-  // This case is marginal (`using X::X` is useful), we allow it for now.
-  EXPECT_THAT(completions("struct X{}; void foo(){ X::^ }").Completions,
-              Has("X"));
-}
-
-TEST(CompletionTest, SkipInjectedWhenUnqualified) {
-  EXPECT_THAT(completions("struct X { void f() { X^ }};").Completions,
-              ElementsAre(Named("X"), Named("~X")));
-}
-
-TEST(CompletionTest, Snippets) {
-  clangd::CodeCompleteOptions Opts;
-  auto Results = completions(
-      R"cpp(
-      struct fake {
-        int a;
-        int f(int i, const float f) const;
-      };
-      int main() {
-        fake f;
-        f.^
-      }
-      )cpp",
-      /*IndexSymbols=*/{}, Opts);
-  EXPECT_THAT(
-      Results.Completions,
-      HasSubsequence(Named("a"),
-                     SnippetSuffix("(${1:int i}, ${2:const float f})")));
-}
-
-TEST(CompletionTest, Kinds) {
-  auto Results = completions(
-      R"cpp(
-          int variable;
-          struct Struct {};
-          int function();
-          // make sure MACRO is not included in preamble.
-          #define MACRO 10
-          int X = ^
-      )cpp",
-      {func("indexFunction"), var("indexVariable"), cls("indexClass")});
-  EXPECT_THAT(Results.Completions,
-              AllOf(Has("function", CompletionItemKind::Function),
-                    Has("variable", CompletionItemKind::Variable),
-                    Has("int", CompletionItemKind::Keyword),
-                    Has("Struct", CompletionItemKind::Class),
-                    Has("MACRO", CompletionItemKind::Text),
-                    Has("indexFunction", CompletionItemKind::Function),
-                    Has("indexVariable", CompletionItemKind::Variable),
-                    Has("indexClass", CompletionItemKind::Class)));
-
-  Results = completions("nam^");
-  EXPECT_THAT(Results.Completions,
-              Has("namespace", CompletionItemKind::Snippet));
-}
-
-TEST(CompletionTest, NoDuplicates) {
-  auto Results = completions(
-      R"cpp(
-          class Adapter {
-          };
-
-          void f() {
-            Adapter^
-          }
-      )cpp",
-      {cls("Adapter")});
-
-  // Make sure there are no duplicate entries of 'Adapter'.
-  EXPECT_THAT(Results.Completions, ElementsAre(Named("Adapter")));
-}
-
-TEST(CompletionTest, ScopedNoIndex) {
-  auto Results = completions(
-      R"cpp(
-          namespace fake { int BigBang, Babble, Box; };
-          int main() { fake::ba^ }
-      ")cpp");
-  // Babble is a better match than BigBang. Box doesn't match at all.
-  EXPECT_THAT(Results.Completions,
-              ElementsAre(Named("Babble"), Named("BigBang")));
-}
-
-TEST(CompletionTest, Scoped) {
-  auto Results = completions(
-      R"cpp(
-          namespace fake { int Babble, Box; };
-          int main() { fake::ba^ }
-      ")cpp",
-      {var("fake::BigBang")});
-  EXPECT_THAT(Results.Completions,
-              ElementsAre(Named("Babble"), Named("BigBang")));
-}
-
-TEST(CompletionTest, ScopedWithFilter) {
-  auto Results = completions(
-      R"cpp(
-          void f() { ns::x^ }
-      )cpp",
-      {cls("ns::XYZ"), func("ns::foo")});
-  EXPECT_THAT(Results.Completions, UnorderedElementsAre(Named("XYZ")));
-}
-
-TEST(CompletionTest, ReferencesAffectRanking) {
-  auto Results = completions("int main() { abs^ }", {ns("absl"), func("absb")});
-  EXPECT_THAT(Results.Completions,
-              HasSubsequence(Named("absb"), Named("absl")));
-  Results = completions("int main() { abs^ }",
-                        {withReferences(10000, ns("absl")), func("absb")});
-  EXPECT_THAT(Results.Completions,
-              HasSubsequence(Named("absl"), Named("absb")));
-}
-
-TEST(CompletionTest, GlobalQualified) {
-  auto Results = completions(
-      R"cpp(
-          void f() { ::^ }
-      )cpp",
-      {cls("XYZ")});
-  EXPECT_THAT(Results.Completions,
-              AllOf(Has("XYZ", CompletionItemKind::Class),
-                    Has("f", CompletionItemKind::Function)));
-}
-
-TEST(CompletionTest, FullyQualified) {
-  auto Results = completions(
-      R"cpp(
-          namespace ns { void bar(); }
-          void f() { ::ns::^ }
-      )cpp",
-      {cls("ns::XYZ")});
-  EXPECT_THAT(Results.Completions,
-              AllOf(Has("XYZ", CompletionItemKind::Class),
-                    Has("bar", CompletionItemKind::Function)));
-}
-
-TEST(CompletionTest, SemaIndexMerge) {
-  auto Results = completions(
-      R"cpp(
-          namespace ns { int local; void both(); }
-          void f() { ::ns::^ }
-      )cpp",
-      {func("ns::both"), cls("ns::Index")});
-  // We get results from both index and sema, with no duplicates.
-  EXPECT_THAT(Results.Completions,
-              UnorderedElementsAre(
-                  AllOf(Named("local"), Origin(SymbolOrigin::AST)),
-                  AllOf(Named("Index"), Origin(SymbolOrigin::Static)),
-                  AllOf(Named("both"),
-                        Origin(SymbolOrigin::AST | SymbolOrigin::Static))));
-}
-
-TEST(CompletionTest, SemaIndexMergeWithLimit) {
-  clangd::CodeCompleteOptions Opts;
-  Opts.Limit = 1;
-  auto Results = completions(
-      R"cpp(
-          namespace ns { int local; void both(); }
-          void f() { ::ns::^ }
-      )cpp",
-      {func("ns::both"), cls("ns::Index")}, Opts);
-  EXPECT_EQ(Results.Completions.size(), Opts.Limit);
-  EXPECT_TRUE(Results.HasMore);
-}
-
-TEST(CompletionTest, IncludeInsertionPreprocessorIntegrationTests) {
-  MockFSProvider FS;
-  MockCompilationDatabase CDB;
-  std::string Subdir = testPath("sub");
-  std::string SearchDirArg = (Twine("-I") + Subdir).str();
-  CDB.ExtraClangFlags = {SearchDirArg.c_str()};
-  std::string BarHeader = testPath("sub/bar.h");
-  FS.Files[BarHeader] = "";
-
-  IgnoreDiagnostics DiagConsumer;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-  auto BarURI = URI::create(BarHeader).toString();
-  Symbol Sym = cls("ns::X");
-  Sym.CanonicalDeclaration.FileURI = BarURI.c_str();
-  Sym.IncludeHeaders.emplace_back(BarURI, 1);
-  // Shoten include path based on search dirctory and insert.
-  auto Results = completions(Server,
-                             R"cpp(
-          int main() { ns::^ }
-      )cpp",
-                             {Sym});
-  EXPECT_THAT(Results.Completions,
-              ElementsAre(AllOf(Named("X"), InsertInclude("\"bar.h\""))));
-  // Can be disabled via option.
-  CodeCompleteOptions NoInsertion;
-  NoInsertion.InsertIncludes = CodeCompleteOptions::NeverInsert;
-  Results = completions(Server,
-                             R"cpp(
-          int main() { ns::^ }
-      )cpp",
-                             {Sym}, NoInsertion);
-  EXPECT_THAT(Results.Completions,
-              ElementsAre(AllOf(Named("X"), Not(InsertInclude()))));
-  // Duplicate based on inclusions in preamble.
-  Results = completions(Server,
-                        R"cpp(
-          #include "sub/bar.h"  // not shortest, so should only match resolved.
-          int main() { ns::^ }
-      )cpp",
-                        {Sym});
-  EXPECT_THAT(Results.Completions, ElementsAre(AllOf(Named("X"), Labeled("X"),
-                                                     Not(InsertInclude()))));
-}
-
-TEST(CompletionTest, NoIncludeInsertionWhenDeclFoundInFile) {
-  MockFSProvider FS;
-  MockCompilationDatabase CDB;
-
-  IgnoreDiagnostics DiagConsumer;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-  Symbol SymX = cls("ns::X");
-  Symbol SymY = cls("ns::Y");
-  std::string BarHeader = testPath("bar.h");
-  auto BarURI = URI::create(BarHeader).toString();
-  SymX.CanonicalDeclaration.FileURI = BarURI.c_str();
-  SymY.CanonicalDeclaration.FileURI = BarURI.c_str();
-  SymX.IncludeHeaders.emplace_back("<bar>", 1);
-  SymY.IncludeHeaders.emplace_back("<bar>", 1);
-  // Shoten include path based on search dirctory and insert.
-  auto Results = completions(Server,
-                             R"cpp(
-          namespace ns {
-            class X;
-            class Y {};
-          }
-          int main() { ns::^ }
-      )cpp",
-                             {SymX, SymY});
-  EXPECT_THAT(Results.Completions,
-              ElementsAre(AllOf(Named("X"), Not(InsertInclude())),
-                          AllOf(Named("Y"), Not(InsertInclude()))));
-}
-
-TEST(CompletionTest, IndexSuppressesPreambleCompletions) {
-  MockFSProvider FS;
-  MockCompilationDatabase CDB;
-  IgnoreDiagnostics DiagConsumer;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  FS.Files[testPath("bar.h")] =
-      R"cpp(namespace ns { struct preamble { int member; }; })cpp";
-  auto File = testPath("foo.cpp");
-  Annotations Test(R"cpp(
-      #include "bar.h"
-      namespace ns { int local; }
-      void f() { ns::^; }
-      void f2() { ns::preamble().$2^; }
-  )cpp");
-  runAddDocument(Server, File, Test.code());
-  clangd::CodeCompleteOptions Opts = {};
-
-  auto I = memIndex({var("ns::index")});
-  Opts.Index = I.get();
-  auto WithIndex = cantFail(runCodeComplete(Server, File, Test.point(), Opts));
-  EXPECT_THAT(WithIndex.Completions,
-              UnorderedElementsAre(Named("local"), Named("index")));
-  auto ClassFromPreamble =
-      cantFail(runCodeComplete(Server, File, Test.point("2"), Opts));
-  EXPECT_THAT(ClassFromPreamble.Completions, Contains(Named("member")));
-
-  Opts.Index = nullptr;
-  auto WithoutIndex =
-      cantFail(runCodeComplete(Server, File, Test.point(), Opts));
-  EXPECT_THAT(WithoutIndex.Completions,
-              UnorderedElementsAre(Named("local"), Named("preamble")));
-}
-
-// This verifies that we get normal preprocessor completions in the preamble.
-// This is a regression test for an old bug: if we override the preamble and
-// try to complete inside it, clang kicks our completion point just outside the
-// preamble, resulting in always getting top-level completions.
-TEST(CompletionTest, CompletionInPreamble) {
-  auto Results = completions(R"cpp(
-    #ifnd^ef FOO_H_
-    #define BAR_H_
-    #include <bar.h>
-    int foo() {}
-    #endif
-    )cpp")
-                     .Completions;
-  EXPECT_THAT(Results, ElementsAre(Named("ifndef")));
-}
-
-TEST(CompletionTest, DynamicIndexIncludeInsertion) {
-  MockFSProvider FS;
-  MockCompilationDatabase CDB;
-  IgnoreDiagnostics DiagConsumer;
-  ClangdServer::Options Opts = ClangdServer::optsForTest();
-  Opts.BuildDynamicSymbolIndex = true;
-  ClangdServer Server(CDB, FS, DiagConsumer, Opts);
-
-  FS.Files[testPath("foo_header.h")] = R"cpp(
-    #pragma once
-    struct Foo {
-       // Member doc
-       int foo();
-    };
-  )cpp";
-  const std::string FileContent(R"cpp(
-    #include "foo_header.h"
-    int Foo::foo() {
-      return 42;
-    }
-  )cpp");
-  Server.addDocument(testPath("foo_impl.cpp"), FileContent);
-  // Wait for the dynamic index being built.
-  ASSERT_TRUE(Server.blockUntilIdleForTest());
-  EXPECT_THAT(completions(Server, "Foo^ foo;").Completions,
-              ElementsAre(AllOf(Named("Foo"),
-                                HasInclude('"' +
-                                           llvm::sys::path::convert_to_slash(
-                                               testPath("foo_header.h")) +
-                                           '"'),
-                                InsertInclude())));
-}
-
-TEST(CompletionTest, DynamicIndexMultiFile) {
-  MockFSProvider FS;
-  MockCompilationDatabase CDB;
-  IgnoreDiagnostics DiagConsumer;
-  auto Opts = ClangdServer::optsForTest();
-  Opts.BuildDynamicSymbolIndex = true;
-  ClangdServer Server(CDB, FS, DiagConsumer, Opts);
-
-  FS.Files[testPath("foo.h")] = R"cpp(
-      namespace ns { class XYZ {}; void foo(int x) {} }
-  )cpp";
-  runAddDocument(Server, testPath("foo.cpp"), R"cpp(
-      #include "foo.h"
-  )cpp");
-
-  auto File = testPath("bar.cpp");
-  Annotations Test(R"cpp(
-      namespace ns {
-      class XXX {};
-      /// Doooc
-      void fooooo() {}
-      }
-      void f() { ns::^ }
-  )cpp");
-  runAddDocument(Server, File, Test.code());
-
-  auto Results = cantFail(runCodeComplete(Server, File, Test.point(), {}));
-  // "XYZ" and "foo" are not included in the file being completed but are still
-  // visible through the index.
-  EXPECT_THAT(Results.Completions, Has("XYZ", CompletionItemKind::Class));
-  EXPECT_THAT(Results.Completions, Has("foo", CompletionItemKind::Function));
-  EXPECT_THAT(Results.Completions, Has("XXX", CompletionItemKind::Class));
-  EXPECT_THAT(Results.Completions,
-              Contains((Named("fooooo"), Kind(CompletionItemKind::Function),
-                        Doc("Doooc"), ReturnType("void"))));
-}
-
-TEST(CompletionTest, Documentation) {
-  auto Results = completions(
-      R"cpp(
-      // Non-doxygen comment.
-      int foo();
-      /// Doxygen comment.
-      /// \param int a
-      int bar(int a);
-      /* Multi-line
-         block comment
-      */
-      int baz();
-
-      int x = ^
-     )cpp");
-  EXPECT_THAT(Results.Completions,
-              Contains(AllOf(Named("foo"), Doc("Non-doxygen comment."))));
-  EXPECT_THAT(
-      Results.Completions,
-      Contains(AllOf(Named("bar"), Doc("Doxygen comment.\n\\param int a"))));
-  EXPECT_THAT(Results.Completions,
-              Contains(AllOf(Named("baz"), Doc("Multi-line\nblock comment"))));
-}
-
-TEST(CompletionTest, GlobalCompletionFiltering) {
-
-  Symbol Class = cls("XYZ");
-  Class.Flags = static_cast<Symbol::SymbolFlag>(
-      Class.Flags & ~(Symbol::IndexedForCodeCompletion));
-  Symbol Func = func("XYZ::foooo");
-  Func.Flags = static_cast<Symbol::SymbolFlag>(
-      Func.Flags & ~(Symbol::IndexedForCodeCompletion));
-
-  auto Results = completions(R"(//      void f() {
-      XYZ::foooo^
-      })",
-                             {Class, Func});
-  EXPECT_THAT(Results.Completions, IsEmpty());
-}
-
-TEST(CodeCompleteTest, DisableTypoCorrection) {
-  auto Results = completions(R"cpp(
-     namespace clang { int v; }
-     void f() { clangd::^
-  )cpp");
-  EXPECT_TRUE(Results.Completions.empty());
-}
-
-TEST(CodeCompleteTest, NoColonColonAtTheEnd) {
-  auto Results = completions(R"cpp(
-    namespace clang { }
-    void f() {
-      clan^
-    }
-  )cpp");
-
-  EXPECT_THAT(Results.Completions, Contains(Labeled("clang")));
-  EXPECT_THAT(Results.Completions, Not(Contains(Labeled("clang::"))));
-}
-
-TEST(CompletionTest, BacktrackCrashes) {
-  // Sema calls code completion callbacks twice in these cases.
-  auto Results = completions(R"cpp(
-      namespace ns {
-      struct FooBarBaz {};
-      } // namespace ns
-
-     int foo(ns::FooBar^
-  )cpp");
-
-  EXPECT_THAT(Results.Completions, ElementsAre(Labeled("FooBarBaz")));
-
-  // Check we don't crash in that case too.
-  completions(R"cpp(
-    struct FooBarBaz {};
-    void test() {
-      if (FooBarBaz * x^) {}
-    }
-)cpp");
-}
-
-TEST(CompletionTest, CompleteInMacroWithStringification) {
-  auto Results = completions(R"cpp(
-void f(const char *, int x);
-#define F(x) f(#x, x)
-
-namespace ns {
-int X;
-int Y;
-}  // namespace ns
-
-int f(int input_num) {
-  F(ns::^)
-}
-)cpp");
-
-  EXPECT_THAT(Results.Completions,
-              UnorderedElementsAre(Named("X"), Named("Y")));
-}
-
-TEST(CompletionTest, CompleteInMacroAndNamespaceWithStringification) {
-  auto Results = completions(R"cpp(
-void f(const char *, int x);
-#define F(x) f(#x, x)
-
-namespace ns {
-int X;
-
-int f(int input_num) {
-  F(^)
-}
-}  // namespace ns
-)cpp");
-
-  EXPECT_THAT(Results.Completions, Contains(Named("X")));
-}
-
-TEST(CompletionTest, IgnoreCompleteInExcludedPPBranchWithRecoveryContext) {
-  auto Results = completions(R"cpp(
-    int bar(int param_in_bar) {
-    }
-
-    int foo(int param_in_foo) {
-#if 0
-  // In recorvery mode, "param_in_foo" will also be suggested among many other
-  // unrelated symbols; however, this is really a special case where this works.
-  // If the #if block is outside of the function, "param_in_foo" is still
-  // suggested, but "bar" and "foo" are missing. So the recovery mode doesn't
-  // really provide useful results in excluded branches.
-  par^
-#endif
-    }
-)cpp");
-
-  EXPECT_TRUE(Results.Completions.empty());
-}
-SignatureHelp signatures(llvm::StringRef Text, Position Point,
-                         std::vector<Symbol> IndexSymbols = {}) {
-  std::unique_ptr<SymbolIndex> Index;
-  if (!IndexSymbols.empty())
-    Index = memIndex(IndexSymbols);
-
-  MockFSProvider FS;
-  MockCompilationDatabase CDB;
-  IgnoreDiagnostics DiagConsumer;
-  ClangdServer::Options Opts = ClangdServer::optsForTest();
-  Opts.StaticIndex = Index.get();
-
-  ClangdServer Server(CDB, FS, DiagConsumer, Opts);
-  auto File = testPath("foo.cpp");
-  runAddDocument(Server, File, Text);
-  return llvm::cantFail(runSignatureHelp(Server, File, Point));
-}
-
-SignatureHelp signatures(llvm::StringRef Text,
-                         std::vector<Symbol> IndexSymbols = {}) {
-  Annotations Test(Text);
-  return signatures(Test.code(), Test.point(), std::move(IndexSymbols));
-}
-
-MATCHER_P(ParamsAre, P, "") {
-  if (P.size() != arg.parameters.size())
-    return false;
-  for (unsigned I = 0; I < P.size(); ++I)
-    if (P[I] != arg.parameters[I].label)
-      return false;
-  return true;
-}
-MATCHER_P(SigDoc, Doc, "") { return arg.documentation == Doc; }
-
-Matcher<SignatureInformation> Sig(std::string Label,
-                                  std::vector<std::string> Params) {
-  return AllOf(SigHelpLabeled(Label), ParamsAre(Params));
-}
-
-TEST(SignatureHelpTest, Overloads) {
-  auto Results = signatures(R"cpp(
-    void foo(int x, int y);
-    void foo(int x, float y);
-    void foo(float x, int y);
-    void foo(float x, float y);
-    void bar(int x, int y = 0);
-    int main() { foo(^); }
-  )cpp");
-  EXPECT_THAT(Results.signatures,
-              UnorderedElementsAre(
-                  Sig("foo(float x, float y) -> void", {"float x", "float y"}),
-                  Sig("foo(float x, int y) -> void", {"float x", "int y"}),
-                  Sig("foo(int x, float y) -> void", {"int x", "float y"}),
-                  Sig("foo(int x, int y) -> void", {"int x", "int y"})));
-  // We always prefer the first signature.
-  EXPECT_EQ(0, Results.activeSignature);
-  EXPECT_EQ(0, Results.activeParameter);
-}
-
-TEST(SignatureHelpTest, DefaultArgs) {
-  auto Results = signatures(R"cpp(
-    void bar(int x, int y = 0);
-    void bar(float x = 0, int y = 42);
-    int main() { bar(^
-  )cpp");
-  EXPECT_THAT(Results.signatures,
-              UnorderedElementsAre(
-                  Sig("bar(int x, int y = 0) -> void", {"int x", "int y = 0"}),
-                  Sig("bar(float x = 0, int y = 42) -> void",
-                      {"float x = 0", "int y = 42"})));
-  EXPECT_EQ(0, Results.activeSignature);
-  EXPECT_EQ(0, Results.activeParameter);
-}
-
-TEST(SignatureHelpTest, ActiveArg) {
-  auto Results = signatures(R"cpp(
-    int baz(int a, int b, int c);
-    int main() { baz(baz(1,2,3), ^); }
-  )cpp");
-  EXPECT_THAT(Results.signatures,
-              ElementsAre(Sig("baz(int a, int b, int c) -> int",
-                              {"int a", "int b", "int c"})));
-  EXPECT_EQ(0, Results.activeSignature);
-  EXPECT_EQ(1, Results.activeParameter);
-}
-
-TEST(SignatureHelpTest, OpeningParen) {
-  llvm::StringLiteral Tests[] = {// Recursive function call.
-                                 R"cpp(
-    int foo(int a, int b, int c);
-    int main() {
-      foo(foo $p^( foo(10, 10, 10), ^ )));
-    })cpp",
-                                 // Functional type cast.
-                                 R"cpp(
-    struct Foo {
-      Foo(int a, int b, int c);
-    };
-    int main() {
-      Foo $p^( 10, ^ );
-    })cpp",
-                                 // New expression.
-                                 R"cpp(
-    struct Foo {
-      Foo(int a, int b, int c);
-    };
-    int main() {
-      new Foo $p^( 10, ^ );
-    })cpp",
-                                 // Macro expansion.
-                                 R"cpp(
-    int foo(int a, int b, int c);
-    #define FOO foo(
-
-    int main() {
-      // Macro expansions.
-      $p^FOO 10, ^ );
-    })cpp",
-                                 // Macro arguments.
-                                 R"cpp(
-    int foo(int a, int b, int c);
-    int main() {
-    #define ID(X) X
-      ID(foo $p^( foo(10), ^ ))
-    })cpp"};
-
-  for (auto Test : Tests) {
-    Annotations Code(Test);
-    EXPECT_EQ(signatures(Code.code(), Code.point()).argListStart,
-              Code.point("p"))
-        << "Test source:" << Test;
-  }
-}
-
-class IndexRequestCollector : public SymbolIndex {
-public:
-  bool
-  fuzzyFind(const FuzzyFindRequest &Req,
-            llvm::function_ref<void(const Symbol &)> Callback) const override {
-    std::lock_guard<std::mutex> Lock(Mut);
-    Requests.push_back(Req);
-    return true;
-  }
-
-  void lookup(const LookupRequest &,
-              llvm::function_ref<void(const Symbol &)>) const override {}
-
-  void refs(const RefsRequest &,
-            llvm::function_ref<void(const Ref &)>) const override {}
-
-  // This is incorrect, but IndexRequestCollector is not an actual index and it
-  // isn't used in production code.
-  size_t estimateMemoryUsage() const override { return 0; }
-
-  const std::vector<FuzzyFindRequest> consumeRequests() const {
-    std::lock_guard<std::mutex> Lock(Mut);
-    auto Reqs = std::move(Requests);
-    Requests = {};
-    return Reqs;
-  }
-
-private:
-  // We need a mutex to handle async fuzzy find requests.
-  mutable std::mutex Mut;
-  mutable std::vector<FuzzyFindRequest> Requests;
-};
-
-std::vector<FuzzyFindRequest> captureIndexRequests(llvm::StringRef Code) {
-  clangd::CodeCompleteOptions Opts;
-  IndexRequestCollector Requests;
-  Opts.Index = &Requests;
-  completions(Code, {}, Opts);
-  return Requests.consumeRequests();
-}
-
-TEST(CompletionTest, UnqualifiedIdQuery) {
-  auto Requests = captureIndexRequests(R"cpp(
-      namespace std {}
-      using namespace std;
-      namespace ns {
-      void f() {
-        vec^
-      }
-      }
-  )cpp");
-
-  EXPECT_THAT(Requests,
-              ElementsAre(Field(&FuzzyFindRequest::Scopes,
-                                UnorderedElementsAre("", "ns::", "std::"))));
-}
-
-TEST(CompletionTest, EnclosingScopeComesFirst) {
-  auto Requests = captureIndexRequests(R"cpp(
-      namespace std {}
-      using namespace std;
-      namespace nx {
-      namespace ns {
-      namespace {
-      void f() {
-        vec^
-      }
-      }
-      }
-      }
-  )cpp");
-
-  EXPECT_THAT(Requests,
-              ElementsAre(Field(
-                  &FuzzyFindRequest::Scopes,
-                  UnorderedElementsAre("", "std::", "nx::ns::", "nx::"))));
-  EXPECT_EQ(Requests[0].Scopes[0], "nx::ns::");
-}
-
-TEST(CompletionTest, ResolvedQualifiedIdQuery) {
-  auto Requests = captureIndexRequests(R"cpp(
-      namespace ns1 {}
-      namespace ns2 {} // ignore
-      namespace ns3 { namespace nns3 {} }
-      namespace foo {
-      using namespace ns1;
-      using namespace ns3::nns3;
-      }
-      namespace ns {
-      void f() {
-        foo::^
-      }
-      }
-  )cpp");
-
-  EXPECT_THAT(Requests,
-              ElementsAre(Field(
-                  &FuzzyFindRequest::Scopes,
-                  UnorderedElementsAre("foo::", "ns1::", "ns3::nns3::"))));
-}
-
-TEST(CompletionTest, UnresolvedQualifierIdQuery) {
-  auto Requests = captureIndexRequests(R"cpp(
-      namespace a {}
-      using namespace a;
-      namespace ns {
-      void f() {
-      bar::^
-      }
-      } // namespace ns
-  )cpp");
-
-  EXPECT_THAT(Requests,
-              ElementsAre(Field(
-                  &FuzzyFindRequest::Scopes,
-                  UnorderedElementsAre("a::bar::", "ns::bar::", "bar::"))));
-}
-
-TEST(CompletionTest, UnresolvedNestedQualifierIdQuery) {
-  auto Requests = captureIndexRequests(R"cpp(
-      namespace a {}
-      using namespace a;
-      namespace ns {
-      void f() {
-      ::a::bar::^
-      }
-      } // namespace ns
-  )cpp");
-
-  EXPECT_THAT(Requests, ElementsAre(Field(&FuzzyFindRequest::Scopes,
-                                          UnorderedElementsAre("a::bar::"))));
-}
-
-TEST(CompletionTest, EmptyQualifiedQuery) {
-  auto Requests = captureIndexRequests(R"cpp(
-      namespace ns {
-      void f() {
-      ^
-      }
-      } // namespace ns
-  )cpp");
-
-  EXPECT_THAT(Requests, ElementsAre(Field(&FuzzyFindRequest::Scopes,
-                                          UnorderedElementsAre("", "ns::"))));
-}
-
-TEST(CompletionTest, GlobalQualifiedQuery) {
-  auto Requests = captureIndexRequests(R"cpp(
-      namespace ns {
-      void f() {
-      ::^
-      }
-      } // namespace ns
-  )cpp");
-
-  EXPECT_THAT(Requests, ElementsAre(Field(&FuzzyFindRequest::Scopes,
-                                          UnorderedElementsAre(""))));
-}
-
-TEST(CompletionTest, NoDuplicatedQueryScopes) {
-  auto Requests = captureIndexRequests(R"cpp(
-      namespace {}
-
-      namespace na {
-      namespace {}
-      namespace nb {
-      ^
-      } // namespace nb
-      } // namespace na
-  )cpp");
-
-  EXPECT_THAT(Requests,
-              ElementsAre(Field(&FuzzyFindRequest::Scopes,
-                                UnorderedElementsAre("na::", "na::nb::", ""))));
-}
-
-TEST(CompletionTest, NoIndexCompletionsInsideClasses) {
-  auto Completions = completions(
-      R"cpp(
-    struct Foo {
-      int SomeNameOfField;
-      typedef int SomeNameOfTypedefField;
-    };
-
-    Foo::^)cpp",
-      {func("::SomeNameInTheIndex"), func("::Foo::SomeNameInTheIndex")});
-
-  EXPECT_THAT(Completions.Completions,
-              AllOf(Contains(Labeled("SomeNameOfField")),
-                    Contains(Labeled("SomeNameOfTypedefField")),
-                    Not(Contains(Labeled("SomeNameInTheIndex")))));
-}
-
-TEST(CompletionTest, NoIndexCompletionsInsideDependentCode) {
-  {
-    auto Completions = completions(
-        R"cpp(
-      template <class T>
-      void foo() {
-        T::^
-      }
-      )cpp",
-        {func("::SomeNameInTheIndex")});
-
-    EXPECT_THAT(Completions.Completions,
-                Not(Contains(Labeled("SomeNameInTheIndex"))));
-  }
-
-  {
-    auto Completions = completions(
-        R"cpp(
-      template <class T>
-      void foo() {
-        T::template Y<int>::^
-      }
-      )cpp",
-        {func("::SomeNameInTheIndex")});
-
-    EXPECT_THAT(Completions.Completions,
-                Not(Contains(Labeled("SomeNameInTheIndex"))));
-  }
-
-  {
-    auto Completions = completions(
-        R"cpp(
-      template <class T>
-      void foo() {
-        T::foo::^
-      }
-      )cpp",
-        {func("::SomeNameInTheIndex")});
-
-    EXPECT_THAT(Completions.Completions,
-                Not(Contains(Labeled("SomeNameInTheIndex"))));
-  }
-}
-
-TEST(CompletionTest, OverloadBundling) {
-  clangd::CodeCompleteOptions Opts;
-  Opts.BundleOverloads = true;
-
-  std::string Context = R"cpp(
-    struct X {
-      // Overload with int
-      int a(int);
-      // Overload with bool
-      int a(bool);
-      int b(float);
-    };
-    int GFuncC(int);
-    int GFuncD(int);
-  )cpp";
-
-  // Member completions are bundled.
-  EXPECT_THAT(completions(Context + "int y = X().^", {}, Opts).Completions,
-              UnorderedElementsAre(Labeled("a(…)"), Labeled("b(float)")));
-
-  // Non-member completions are bundled, including index+sema.
-  Symbol NoArgsGFunc = func("GFuncC");
-  EXPECT_THAT(
-      completions(Context + "int y = GFunc^", {NoArgsGFunc}, Opts).Completions,
-      UnorderedElementsAre(Labeled("GFuncC(…)"), Labeled("GFuncD(int)")));
-
-  // Differences in header-to-insert suppress bundling.
-  std::string DeclFile = URI::create(testPath("foo")).toString();
-  NoArgsGFunc.CanonicalDeclaration.FileURI = DeclFile.c_str();
-  NoArgsGFunc.IncludeHeaders.emplace_back("<foo>", 1);
-  EXPECT_THAT(
-      completions(Context + "int y = GFunc^", {NoArgsGFunc}, Opts).Completions,
-      UnorderedElementsAre(AllOf(Named("GFuncC"), InsertInclude("<foo>")),
-                           Labeled("GFuncC(int)"), Labeled("GFuncD(int)")));
-
-  // Examine a bundled completion in detail.
-  auto A =
-      completions(Context + "int y = X().a^", {}, Opts).Completions.front();
-  EXPECT_EQ(A.Name, "a");
-  EXPECT_EQ(A.Signature, "(…)");
-  EXPECT_EQ(A.BundleSize, 2u);
-  EXPECT_EQ(A.Kind, CompletionItemKind::Method);
-  EXPECT_EQ(A.ReturnType, "int"); // All overloads return int.
-  // For now we just return one of the doc strings arbitrarily.
-  EXPECT_THAT(A.Documentation, AnyOf(HasSubstr("Overload with int"),
-                                     HasSubstr("Overload with bool")));
-  EXPECT_EQ(A.SnippetSuffix, "($0)");
-}
-
-TEST(CompletionTest, DocumentationFromChangedFileCrash) {
-  MockFSProvider FS;
-  auto FooH = testPath("foo.h");
-  auto FooCpp = testPath("foo.cpp");
-  FS.Files[FooH] = R"cpp(
-    // this is my documentation comment.
-    int func();
-  )cpp";
-  FS.Files[FooCpp] = "";
-
-  MockCompilationDatabase CDB;
-  IgnoreDiagnostics DiagConsumer;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  Annotations Source(R"cpp(
-    #include "foo.h"
-    int func() {
-      // This makes sure we have func from header in the AST.
-    }
-    int a = fun^
-  )cpp");
-  Server.addDocument(FooCpp, Source.code(), WantDiagnostics::Yes);
-  // We need to wait for preamble to build.
-  ASSERT_TRUE(Server.blockUntilIdleForTest());
-
-  // Change the header file. Completion will reuse the old preamble!
-  FS.Files[FooH] = R"cpp(
-    int func();
-  )cpp";
-
-  clangd::CodeCompleteOptions Opts;
-  Opts.IncludeComments = true;
-  CodeCompleteResult Completions =
-      cantFail(runCodeComplete(Server, FooCpp, Source.point(), Opts));
-  // We shouldn't crash. Unfortunately, current workaround is to not produce
-  // comments for symbols from headers.
-  EXPECT_THAT(Completions.Completions,
-              Contains(AllOf(Not(IsDocumented()), Named("func"))));
-}
-
-TEST(CompletionTest, NonDocComments) {
-  MockFSProvider FS;
-  auto FooCpp = testPath("foo.cpp");
-  FS.Files[FooCpp] = "";
-
-  MockCompilationDatabase CDB;
-  IgnoreDiagnostics DiagConsumer;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  Annotations Source(R"cpp(
-    // We ignore namespace comments, for rationale see CodeCompletionStrings.h.
-    namespace comments_ns {
-    }
-
-    // ------------------
-    int comments_foo();
-
-    // A comment and a decl are separated by newlines.
-    // Therefore, the comment shouldn't show up as doc comment.
-
-    int comments_bar();
-
-    // this comment should be in the results.
-    int comments_baz();
-
-
-    template <class T>
-    struct Struct {
-      int comments_qux();
-      int comments_quux();
-    };
-
-
-    // This comment should not be there.
-
-    template <class T>
-    int Struct<T>::comments_qux() {
-    }
-
-    // This comment **should** be in results.
-    template <class T>
-    int Struct<T>::comments_quux() {
-      int a = comments^;
-    }
-  )cpp");
-  // FIXME: Auto-completion in a template requires disabling delayed template
-  // parsing.
-  CDB.ExtraClangFlags.push_back("-fno-delayed-template-parsing");
-  runAddDocument(Server, FooCpp, Source.code(), WantDiagnostics::Yes);
-  CodeCompleteResult Completions = cantFail(runCodeComplete(
-      Server, FooCpp, Source.point(), clangd::CodeCompleteOptions()));
-
-  // We should not get any of those comments in completion.
-  EXPECT_THAT(
-      Completions.Completions,
-      UnorderedElementsAre(AllOf(Not(IsDocumented()), Named("comments_foo")),
-                           AllOf(IsDocumented(), Named("comments_baz")),
-                           AllOf(IsDocumented(), Named("comments_quux")),
-                           AllOf(Not(IsDocumented()), Named("comments_ns")),
-                           // FIXME(ibiryukov): the following items should have
-                           // empty documentation, since they are separated from
-                           // a comment with an empty line. Unfortunately, I
-                           // couldn't make Sema tests pass if we ignore those.
-                           AllOf(IsDocumented(), Named("comments_bar")),
-                           AllOf(IsDocumented(), Named("comments_qux"))));
-}
-
-TEST(CompletionTest, CompleteOnInvalidLine) {
-  auto FooCpp = testPath("foo.cpp");
-
-  MockCompilationDatabase CDB;
-  IgnoreDiagnostics DiagConsumer;
-  MockFSProvider FS;
-  FS.Files[FooCpp] = "// empty file";
-
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-  // Run completion outside the file range.
-  Position Pos;
-  Pos.line = 100;
-  Pos.character = 0;
-  EXPECT_THAT_EXPECTED(
-      runCodeComplete(Server, FooCpp, Pos, clangd::CodeCompleteOptions()),
-      Failed());
-}
-
-TEST(CompletionTest, QualifiedNames) {
-  auto Results = completions(
-      R"cpp(
-          namespace ns { int local; void both(); }
-          void f() { ::ns::^ }
-      )cpp",
-      {func("ns::both"), cls("ns::Index")});
-  // We get results from both index and sema, with no duplicates.
-  EXPECT_THAT(
-      Results.Completions,
-      UnorderedElementsAre(Scope("ns::"), Scope("ns::"), Scope("ns::")));
-}
-
-TEST(CompletionTest, Render) {
-  CodeCompletion C;
-  C.Name = "x";
-  C.Signature = "(bool) const";
-  C.SnippetSuffix = "(${0:bool})";
-  C.ReturnType = "int";
-  C.RequiredQualifier = "Foo::";
-  C.Scope = "ns::Foo::";
-  C.Documentation = "This is x().";
-  C.Includes.emplace_back();
-  auto &Include = C.Includes.back();
-  Include.Header = "\"foo.h\"";
-  C.Kind = CompletionItemKind::Method;
-  C.Score.Total = 1.0;
-  C.Origin = SymbolOrigin::AST | SymbolOrigin::Static;
-
-  CodeCompleteOptions Opts;
-  Opts.IncludeIndicator.Insert = "^";
-  Opts.IncludeIndicator.NoInsert = "";
-  Opts.EnableSnippets = false;
-
-  auto R = C.render(Opts);
-  EXPECT_EQ(R.label, "Foo::x(bool) const");
-  EXPECT_EQ(R.insertText, "Foo::x");
-  EXPECT_EQ(R.insertTextFormat, InsertTextFormat::PlainText);
-  EXPECT_EQ(R.filterText, "x");
-  EXPECT_EQ(R.detail, "int\n\"foo.h\"");
-  EXPECT_EQ(R.documentation, "This is x().");
-  EXPECT_THAT(R.additionalTextEdits, IsEmpty());
-  EXPECT_EQ(R.sortText, sortText(1.0, "x"));
-  EXPECT_FALSE(R.deprecated);
-
-  Opts.EnableSnippets = true;
-  R = C.render(Opts);
-  EXPECT_EQ(R.insertText, "Foo::x(${0:bool})");
-  EXPECT_EQ(R.insertTextFormat, InsertTextFormat::Snippet);
-
-  Include.Insertion.emplace();
-  R = C.render(Opts);
-  EXPECT_EQ(R.label, "^Foo::x(bool) const");
-  EXPECT_THAT(R.additionalTextEdits, Not(IsEmpty()));
-
-  Opts.ShowOrigins = true;
-  R = C.render(Opts);
-  EXPECT_EQ(R.label, "^[AS]Foo::x(bool) const");
-
-  C.BundleSize = 2;
-  R = C.render(Opts);
-  EXPECT_EQ(R.detail, "[2 overloads]\n\"foo.h\"");
-
-  C.Deprecated = true;
-  R = C.render(Opts);
-  EXPECT_TRUE(R.deprecated);
-}
-
-TEST(CompletionTest, IgnoreRecoveryResults) {
-  auto Results = completions(
-      R"cpp(
-          namespace ns { int NotRecovered() { return 0; } }
-          void f() {
-            // Sema enters recovery mode first and then normal mode.
-            if (auto x = ns::NotRecover^)
-          }
-      )cpp");
-  EXPECT_THAT(Results.Completions, UnorderedElementsAre(Named("NotRecovered")));
-}
-
-TEST(CompletionTest, ScopeOfClassFieldInConstructorInitializer) {
-  auto Results = completions(
-      R"cpp(
-        namespace ns {
-          class X { public: X(); int x_; };
-          X::X() : x_^(0) {}
-        }
-      )cpp");
-  EXPECT_THAT(Results.Completions,
-              UnorderedElementsAre(AllOf(Scope("ns::X::"), Named("x_"))));
-}
-
-TEST(CompletionTest, CodeCompletionContext) {
-  auto Results = completions(
-      R"cpp(
-        namespace ns {
-          class X { public: X(); int x_; };
-          void f() {
-            X x;
-            x.^;
-          }
-        }
-      )cpp");
-
-  EXPECT_THAT(Results.Context, CodeCompletionContext::CCC_DotMemberAccess);
-}
-
-TEST(CompletionTest, FixItForArrowToDot) {
-  MockFSProvider FS;
-  MockCompilationDatabase CDB;
-  IgnoreDiagnostics DiagConsumer;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  CodeCompleteOptions Opts;
-  Opts.IncludeFixIts = true;
-  Annotations TestCode(
-      R"cpp(
-        class Auxilary {
-         public:
-          void AuxFunction();
-        };
-        class ClassWithPtr {
-         public:
-          void MemberFunction();
-          Auxilary* operator->() const;
-          Auxilary* Aux;
-        };
-        void f() {
-          ClassWithPtr x;
-          x[[->]]^;
-        }
-      )cpp");
-  auto Results =
-      completions(Server, TestCode.code(), TestCode.point(), {}, Opts);
-  EXPECT_EQ(Results.Completions.size(), 3u);
-
-  TextEdit ReplacementEdit;
-  ReplacementEdit.range = TestCode.range();
-  ReplacementEdit.newText = ".";
-  for (const auto &C : Results.Completions) {
-    EXPECT_TRUE(C.FixIts.size() == 1u || C.Name == "AuxFunction");
-    if (!C.FixIts.empty()) {
-      EXPECT_THAT(C.FixIts, ElementsAre(ReplacementEdit));
-    }
-  }
-}
-
-TEST(CompletionTest, FixItForDotToArrow) {
-  MockFSProvider FS;
-  MockCompilationDatabase CDB;
-  IgnoreDiagnostics DiagConsumer;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  CodeCompleteOptions Opts;
-  Opts.IncludeFixIts = true;
-  Annotations TestCode(
-      R"cpp(
-        class Auxilary {
-         public:
-          void AuxFunction();
-        };
-        class ClassWithPtr {
-         public:
-          void MemberFunction();
-          Auxilary* operator->() const;
-          Auxilary* Aux;
-        };
-        void f() {
-          ClassWithPtr x;
-          x[[.]]^;
-        }
-      )cpp");
-  auto Results =
-      completions(Server, TestCode.code(), TestCode.point(), {}, Opts);
-  EXPECT_EQ(Results.Completions.size(), 3u);
-
-  TextEdit ReplacementEdit;
-  ReplacementEdit.range = TestCode.range();
-  ReplacementEdit.newText = "->";
-  for (const auto &C : Results.Completions) {
-    EXPECT_TRUE(C.FixIts.empty() || C.Name == "AuxFunction");
-    if (!C.FixIts.empty()) {
-      EXPECT_THAT(C.FixIts, ElementsAre(ReplacementEdit));
-    }
-  }
-}
-
-TEST(CompletionTest, RenderWithFixItMerged) {
-  TextEdit FixIt;
-  FixIt.range.end.character = 5;
-  FixIt.newText = "->";
-
-  CodeCompletion C;
-  C.Name = "x";
-  C.RequiredQualifier = "Foo::";
-  C.FixIts = {FixIt};
-  C.CompletionTokenRange.start.character = 5;
-
-  CodeCompleteOptions Opts;
-  Opts.IncludeFixIts = true;
-
-  auto R = C.render(Opts);
-  EXPECT_TRUE(R.textEdit);
-  EXPECT_EQ(R.textEdit->newText, "->Foo::x");
-  EXPECT_TRUE(R.additionalTextEdits.empty());
-}
-
-TEST(CompletionTest, RenderWithFixItNonMerged) {
-  TextEdit FixIt;
-  FixIt.range.end.character = 4;
-  FixIt.newText = "->";
-
-  CodeCompletion C;
-  C.Name = "x";
-  C.RequiredQualifier = "Foo::";
-  C.FixIts = {FixIt};
-  C.CompletionTokenRange.start.character = 5;
-
-  CodeCompleteOptions Opts;
-  Opts.IncludeFixIts = true;
-
-  auto R = C.render(Opts);
-  EXPECT_TRUE(R.textEdit);
-  EXPECT_EQ(R.textEdit->newText, "Foo::x");
-  EXPECT_THAT(R.additionalTextEdits, UnorderedElementsAre(FixIt));
-}
-
-TEST(CompletionTest, CompletionTokenRange) {
-  MockFSProvider FS;
-  MockCompilationDatabase CDB;
-  IgnoreDiagnostics DiagConsumer;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  constexpr const char *TestCodes[] = {
-      R"cpp(
-        class Auxilary {
-         public:
-          void AuxFunction();
-        };
-        void f() {
-          Auxilary x;
-          x.[[Aux]]^;
-        }
-      )cpp",
-      R"cpp(
-        class Auxilary {
-         public:
-          void AuxFunction();
-        };
-        void f() {
-          Auxilary x;
-          x.[[]]^;
-        }
-      )cpp"};
-  for (const auto &Text : TestCodes) {
-    Annotations TestCode(Text);
-    auto Results = completions(Server, TestCode.code(), TestCode.point());
-
-    EXPECT_EQ(Results.Completions.size(), 1u);
-    EXPECT_THAT(Results.Completions.front().CompletionTokenRange,
-                TestCode.range());
-  }
-}
-
-TEST(SignatureHelpTest, OverloadsOrdering) {
-  const auto Results = signatures(R"cpp(
-    void foo(int x);
-    void foo(int x, float y);
-    void foo(float x, int y);
-    void foo(float x, float y);
-    void foo(int x, int y = 0);
-    int main() { foo(^); }
-  )cpp");
-  EXPECT_THAT(
-      Results.signatures,
-      ElementsAre(
-          Sig("foo(int x) -> void", {"int x"}),
-          Sig("foo(int x, int y = 0) -> void", {"int x", "int y = 0"}),
-          Sig("foo(float x, int y) -> void", {"float x", "int y"}),
-          Sig("foo(int x, float y) -> void", {"int x", "float y"}),
-          Sig("foo(float x, float y) -> void", {"float x", "float y"})));
-  // We always prefer the first signature.
-  EXPECT_EQ(0, Results.activeSignature);
-  EXPECT_EQ(0, Results.activeParameter);
-}
-
-TEST(SignatureHelpTest, InstantiatedSignatures) {
-  StringRef Sig0 = R"cpp(
-    template <class T>
-    void foo(T, T, T);
-
-    int main() {
-      foo<int>(^);
-    }
-  )cpp";
-
-  EXPECT_THAT(signatures(Sig0).signatures,
-              ElementsAre(Sig("foo(T, T, T) -> void", {"T", "T", "T"})));
-
-  StringRef Sig1 = R"cpp(
-    template <class T>
-    void foo(T, T, T);
-
-    int main() {
-      foo(10, ^);
-    })cpp";
-
-  EXPECT_THAT(signatures(Sig1).signatures,
-              ElementsAre(Sig("foo(T, T, T) -> void", {"T", "T", "T"})));
-
-  StringRef Sig2 = R"cpp(
-    template <class ...T>
-    void foo(T...);
-
-    int main() {
-      foo<int>(^);
-    }
-  )cpp";
-
-  EXPECT_THAT(signatures(Sig2).signatures,
-              ElementsAre(Sig("foo(T...) -> void", {"T..."})));
-
-  // It is debatable whether we should substitute the outer template parameter
-  // ('T') in that case. Currently we don't substitute it in signature help, but
-  // do substitute in code complete.
-  // FIXME: make code complete and signature help consistent, figure out which
-  // way is better.
-  StringRef Sig3 = R"cpp(
-    template <class T>
-    struct X {
-      template <class U>
-      void foo(T, U);
-    };
-
-    int main() {
-      X<int>().foo<double>(^)
-    }
-  )cpp";
-
-  EXPECT_THAT(signatures(Sig3).signatures,
-              ElementsAre(Sig("foo(T, U) -> void", {"T", "U"})));
-}
-
-TEST(SignatureHelpTest, IndexDocumentation) {
-  Symbol Foo0 = sym("foo", index::SymbolKind::Function, "@F@\\0#");
-  Foo0.Documentation = "Doc from the index";
-  Symbol Foo1 = sym("foo", index::SymbolKind::Function, "@F@\\0#I#");
-  Foo1.Documentation = "Doc from the index";
-  Symbol Foo2 = sym("foo", index::SymbolKind::Function, "@F@\\0#I#I#");
-
-  StringRef Sig0 = R"cpp(
-    int foo();
-    int foo(double);
-
-    void test() {
-      foo(^);
-    }
-  )cpp";
-
-  EXPECT_THAT(
-      signatures(Sig0, {Foo0}).signatures,
-      ElementsAre(AllOf(Sig("foo() -> int", {}), SigDoc("Doc from the index")),
-                  AllOf(Sig("foo(double) -> int", {"double"}), SigDoc(""))));
-
-  StringRef Sig1 = R"cpp(
-    int foo();
-    // Overriden doc from sema
-    int foo(int);
-    // Doc from sema
-    int foo(int, int);
-
-    void test() {
-      foo(^);
-    }
-  )cpp";
-
-  EXPECT_THAT(
-      signatures(Sig1, {Foo0, Foo1, Foo2}).signatures,
-      ElementsAre(AllOf(Sig("foo() -> int", {}), SigDoc("Doc from the index")),
-                  AllOf(Sig("foo(int) -> int", {"int"}),
-                        SigDoc("Overriden doc from sema")),
-                  AllOf(Sig("foo(int, int) -> int", {"int", "int"}),
-                        SigDoc("Doc from sema"))));
-}
-
-TEST(SignatureHelpTest, DynamicIndexDocumentation) {
-  MockFSProvider FS;
-  MockCompilationDatabase CDB;
-  IgnoreDiagnostics DiagConsumer;
-  ClangdServer::Options Opts = ClangdServer::optsForTest();
-  Opts.BuildDynamicSymbolIndex = true;
-  ClangdServer Server(CDB, FS, DiagConsumer, Opts);
-
-  FS.Files[testPath("foo.h")] = R"cpp(
-    struct Foo {
-       // Member doc
-       int foo();
-    };
-  )cpp";
-  Annotations FileContent(R"cpp(
-    #include "foo.h"
-    void test() {
-      Foo f;
-      f.foo(^);
-    }
-  )cpp");
-  auto File = testPath("test.cpp");
-  Server.addDocument(File, FileContent.code());
-  // Wait for the dynamic index being built.
-  ASSERT_TRUE(Server.blockUntilIdleForTest());
-  EXPECT_THAT(
-      llvm::cantFail(runSignatureHelp(Server, File, FileContent.point()))
-          .signatures,
-      ElementsAre(AllOf(Sig("foo() -> int", {}), SigDoc("Member doc"))));
-}
-
-TEST(CompletionTest, CompletionFunctionArgsDisabled) {
-  CodeCompleteOptions Opts;
-  Opts.EnableSnippets = true;
-  Opts.EnableFunctionArgSnippets = false;
-
-  {
-    auto Results = completions(
-        R"cpp(
-      void xfoo();
-      void xfoo(int x, int y);
-      void f() { xfo^ })cpp",
-        {}, Opts);
-    EXPECT_THAT(
-        Results.Completions,
-        UnorderedElementsAre(AllOf(Named("xfoo"), SnippetSuffix("()")),
-                             AllOf(Named("xfoo"), SnippetSuffix("($0)"))));
-  }
-  {
-    auto Results = completions(
-        R"cpp(
-      void xbar();
-      void f() { xba^ })cpp",
-        {}, Opts);
-    EXPECT_THAT(Results.Completions, UnorderedElementsAre(AllOf(
-                                         Named("xbar"), SnippetSuffix("()"))));
-  }
-  {
-    Opts.BundleOverloads = true;
-    auto Results = completions(
-        R"cpp(
-      void xfoo();
-      void xfoo(int x, int y);
-      void f() { xfo^ })cpp",
-        {}, Opts);
-    EXPECT_THAT(
-        Results.Completions,
-        UnorderedElementsAre(AllOf(Named("xfoo"), SnippetSuffix("($0)"))));
-  }
-  {
-    auto Results = completions(
-        R"cpp(
-      template <class T, class U>
-      void xfoo(int a, U b);
-      void f() { xfo^ })cpp",
-        {}, Opts);
-    EXPECT_THAT(
-        Results.Completions,
-        UnorderedElementsAre(AllOf(Named("xfoo"), SnippetSuffix("<$1>($0)"))));
-  }
-  {
-    auto Results = completions(
-        R"cpp(
-      template <class T>
-      class foo_class{};
-      template <class T>
-      using foo_alias = T**;
-      void f() { foo_^ })cpp",
-        {}, Opts);
-    EXPECT_THAT(
-        Results.Completions,
-        UnorderedElementsAre(AllOf(Named("foo_class"), SnippetSuffix("<$0>")),
-                             AllOf(Named("foo_alias"), SnippetSuffix("<$0>"))));
-  }
-}
-
-TEST(CompletionTest, SuggestOverrides) {
-  constexpr const char *const Text(R"cpp(
-  class A {
-   public:
-    virtual void vfunc(bool param);
-    virtual void vfunc(bool param, int p);
-    void func(bool param);
-  };
-  class B : public A {
-  virtual void ttt(bool param) const;
-  void vfunc(bool param, int p) override;
-  };
-  class C : public B {
-   public:
-    void vfunc(bool param) override;
-    ^
-  };
-  )cpp");
-  const auto Results = completions(Text);
-  EXPECT_THAT(Results.Completions,
-              AllOf(Contains(Labeled("void vfunc(bool param, int p) override")),
-                    Contains(Labeled("void ttt(bool param) const override")),
-                    Not(Contains(Labeled("void vfunc(bool param) override")))));
-}
-
-TEST(CompletionTest, OverridesNonIdentName) {
-  // Check the completions call does not crash.
-  completions(R"cpp(
-    struct Base {
-      virtual ~Base() = 0;
-      virtual operator int() = 0;
-      virtual Base& operator+(Base&) = 0;
-    };
-
-    struct Derived : Base {
-      ^
-    };
-  )cpp");
-}
-
-TEST(GuessCompletionPrefix, Filters) {
-  for (llvm::StringRef Case : {
-    "[[scope::]][[ident]]^",
-    "[[]][[]]^",
-    "\n[[]][[]]^",
-    "[[]][[ab]]^",
-    "x.[[]][[ab]]^",
-    "x.[[]][[]]^",
-    "[[x::]][[ab]]^",
-    "[[x::]][[]]^",
-    "[[::x::]][[ab]]^",
-    "some text [[scope::more::]][[identif]]^ier",
-    "some text [[scope::]][[mor]]^e::identifier",
-    "weird case foo::[[::bar::]][[baz]]^",
-  }) {
-    Annotations F(Case);
-    auto Offset = cantFail(positionToOffset(F.code(), F.point()));
-    auto ToStringRef = [&](Range R) {
-      return F.code().slice(cantFail(positionToOffset(F.code(), R.start)),
-                            cantFail(positionToOffset(F.code(), R.end)));
-    };
-    auto WantQualifier = ToStringRef(F.ranges()[0]),
-         WantName = ToStringRef(F.ranges()[1]);
-
-    auto Prefix = guessCompletionPrefix(F.code(), Offset);
-    // Even when components are empty, check their offsets are correct.
-    EXPECT_EQ(WantQualifier, Prefix.Qualifier) << Case;
-    EXPECT_EQ(WantQualifier.begin(), Prefix.Qualifier.begin()) << Case;
-    EXPECT_EQ(WantName, Prefix.Name) << Case;
-    EXPECT_EQ(WantName.begin(), Prefix.Name.begin()) << Case;
-  }
-}
-
-TEST(CompletionTest, EnableSpeculativeIndexRequest) {
-  MockFSProvider FS;
-  MockCompilationDatabase CDB;
-  IgnoreDiagnostics DiagConsumer;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  auto File = testPath("foo.cpp");
-  Annotations Test(R"cpp(
-      namespace ns1 { int abc; }
-      namespace ns2 { int abc; }
-      void f() { ns1::ab$1^; ns1::ab$2^; }
-      void f2() { ns2::ab$3^; }
-  )cpp");
-  runAddDocument(Server, File, Test.code());
-  clangd::CodeCompleteOptions Opts = {};
-
-  IndexRequestCollector Requests;
-  Opts.Index = &Requests;
-  Opts.SpeculativeIndexRequest = true;
-
-  auto CompleteAtPoint = [&](StringRef P) {
-    cantFail(runCodeComplete(Server, File, Test.point(P), Opts));
-    // Sleep for a while to make sure asynchronous call (if applicable) is also
-    // triggered before callback is invoked.
-    std::this_thread::sleep_for(std::chrono::milliseconds(100));
-  };
-
-  CompleteAtPoint("1");
-  auto Reqs1 = Requests.consumeRequests();
-  ASSERT_EQ(Reqs1.size(), 1u);
-  EXPECT_THAT(Reqs1[0].Scopes, UnorderedElementsAre("ns1::"));
-
-  CompleteAtPoint("2");
-  auto Reqs2 = Requests.consumeRequests();
-  // Speculation succeeded. Used speculative index result.
-  ASSERT_EQ(Reqs2.size(), 1u);
-  EXPECT_EQ(Reqs2[0], Reqs1[0]);
-
-  CompleteAtPoint("3");
-  // Speculation failed. Sent speculative index request and the new index
-  // request after sema.
-  auto Reqs3 = Requests.consumeRequests();
-  ASSERT_EQ(Reqs3.size(), 2u);
-}
-
-TEST(CompletionTest, InsertTheMostPopularHeader) {
-  std::string DeclFile = URI::create(testPath("foo")).toString();
-  Symbol sym = func("Func");
-  sym.CanonicalDeclaration.FileURI = DeclFile.c_str();
-  sym.IncludeHeaders.emplace_back("\"foo.h\"", 2);
-  sym.IncludeHeaders.emplace_back("\"bar.h\"", 1000);
-
-  auto Results = completions("Fun^", {sym}).Completions;
-  assert(!Results.empty());
-  EXPECT_THAT(Results[0], AllOf(Named("Func"), InsertInclude("\"bar.h\"")));
-  EXPECT_EQ(Results[0].Includes.size(), 2u);
-}
-
-TEST(CompletionTest, NoInsertIncludeIfOnePresent) {
-  MockFSProvider FS;
-  MockCompilationDatabase CDB;
-
-  std::string FooHeader = testPath("foo.h");
-  FS.Files[FooHeader] = "";
-
-  IgnoreDiagnostics DiagConsumer;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  std::string DeclFile = URI::create(testPath("foo")).toString();
-  Symbol sym = func("Func");
-  sym.CanonicalDeclaration.FileURI = DeclFile.c_str();
-  sym.IncludeHeaders.emplace_back("\"foo.h\"", 2);
-  sym.IncludeHeaders.emplace_back("\"bar.h\"", 1000);
-
-  EXPECT_THAT(
-      completions(Server, "#include \"foo.h\"\nFun^", {sym}).Completions,
-      UnorderedElementsAre(
-          AllOf(Named("Func"), HasInclude("\"foo.h\""), Not(InsertInclude()))));
-}
-
-TEST(CompletionTest, MergeMacrosFromIndexAndSema) {
-  Symbol Sym;
-  Sym.Name = "Clangd_Macro_Test";
-  Sym.ID = SymbolID("c:foo.cpp at 8@macro at Clangd_Macro_Test");
-  Sym.SymInfo.Kind = index::SymbolKind::Macro;
-  Sym.Flags |= Symbol::IndexedForCodeCompletion;
-  EXPECT_THAT(completions("#define Clangd_Macro_Test\nClangd_Macro_T^", {Sym})
-                  .Completions,
-              UnorderedElementsAre(Named("Clangd_Macro_Test")));
-}
-
-TEST(CompletionTest, NoMacroFromPreambleIfIndexIsSet) {
-  auto Results = completions(
-      R"cpp(#define CLANGD_PREAMBLE x
-
-          int x = 0;
-          #define CLANGD_MAIN x
-          void f() { CLANGD_^ }
-      )cpp",
-      {func("CLANGD_INDEX")});
-  // Index is overriden in code completion options, so the preamble symbol is
-  // not seen.
-  EXPECT_THAT(Results.Completions, UnorderedElementsAre(Named("CLANGD_MAIN"),
-                                                        Named("CLANGD_INDEX")));
-}
-
-TEST(CompletionTest, DeprecatedResults) {
-  std::string Body = R"cpp(
-    void TestClangd();
-    void TestClangc() __attribute__((deprecated("", "")));
-  )cpp";
-
-  EXPECT_THAT(
-      completions(Body + "int main() { TestClang^ }").Completions,
-      UnorderedElementsAre(AllOf(Named("TestClangd"), Not(Deprecated())),
-                           AllOf(Named("TestClangc"), Deprecated())));
-}
-
-TEST(SignatureHelpTest, InsideArgument) {
-  {
-    const auto Results = signatures(R"cpp(
-      void foo(int x);
-      void foo(int x, int y);
-      int main() { foo(1+^); }
-    )cpp");
-    EXPECT_THAT(
-        Results.signatures,
-        ElementsAre(Sig("foo(int x) -> void", {"int x"}),
-                    Sig("foo(int x, int y) -> void", {"int x", "int y"})));
-    EXPECT_EQ(0, Results.activeParameter);
-  }
-  {
-    const auto Results = signatures(R"cpp(
-      void foo(int x);
-      void foo(int x, int y);
-      int main() { foo(1^); }
-    )cpp");
-    EXPECT_THAT(
-        Results.signatures,
-        ElementsAre(Sig("foo(int x) -> void", {"int x"}),
-                    Sig("foo(int x, int y) -> void", {"int x", "int y"})));
-    EXPECT_EQ(0, Results.activeParameter);
-  }
-  {
-    const auto Results = signatures(R"cpp(
-      void foo(int x);
-      void foo(int x, int y);
-      int main() { foo(1^0); }
-    )cpp");
-    EXPECT_THAT(
-        Results.signatures,
-        ElementsAre(Sig("foo(int x) -> void", {"int x"}),
-                    Sig("foo(int x, int y) -> void", {"int x", "int y"})));
-    EXPECT_EQ(0, Results.activeParameter);
-  }
-  {
-    const auto Results = signatures(R"cpp(
-      void foo(int x);
-      void foo(int x, int y);
-      int bar(int x, int y);
-      int main() { bar(foo(2, 3^)); }
-    )cpp");
-    EXPECT_THAT(Results.signatures, ElementsAre(Sig("foo(int x, int y) -> void",
-                                                    {"int x", "int y"})));
-    EXPECT_EQ(1, Results.activeParameter);
-  }
-}
-
-TEST(SignatureHelpTest, ConstructorInitializeFields) {
-  {
-    const auto Results = signatures(R"cpp(
-      struct A {
-        A(int);
-      };
-      struct B {
-        B() : a_elem(^) {}
-        A a_elem;
-      };
-    )cpp");
-    EXPECT_THAT(Results.signatures,
-                UnorderedElementsAre(Sig("A(int)", {"int"}),
-                                     Sig("A(A &&)", {"A &&"}),
-                                     Sig("A(const A &)", {"const A &"})));
-  }
-  {
-    const auto Results = signatures(R"cpp(
-      struct A {
-        A(int);
-      };
-      struct C {
-        C(int);
-        C(A);
-      };
-      struct B {
-        B() : c_elem(A(1^)) {}
-        C c_elem;
-      };
-    )cpp");
-    EXPECT_THAT(Results.signatures,
-                UnorderedElementsAre(Sig("A(int)", {"int"}),
-                                     Sig("A(A &&)", {"A &&"}),
-                                     Sig("A(const A &)", {"const A &"})));
-  }
-}
-
-TEST(CompletionTest, IncludedCompletionKinds) {
-  MockFSProvider FS;
-  MockCompilationDatabase CDB;
-  std::string Subdir = testPath("sub");
-  std::string SearchDirArg = (Twine("-I") + Subdir).str();
-  CDB.ExtraClangFlags = {SearchDirArg.c_str()};
-  std::string BarHeader = testPath("sub/bar.h");
-  FS.Files[BarHeader] = "";
-  IgnoreDiagnostics DiagConsumer;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-  auto Results = completions(Server,
-                             R"cpp(
-        #include "^"
-      )cpp");
-  EXPECT_THAT(Results.Completions,
-              AllOf(Has("sub/", CompletionItemKind::Folder),
-                    Has("bar.h\"", CompletionItemKind::File)));
-}
-
-TEST(CompletionTest, NoCrashAtNonAlphaIncludeHeader) {
-  auto Results = completions(
-      R"cpp(
-        #include "./^"
-      )cpp");
-  EXPECT_TRUE(Results.Completions.empty());
-}
-
-TEST(CompletionTest, NoAllScopesCompletionWhenQualified) {
-  clangd::CodeCompleteOptions Opts = {};
-  Opts.AllScopes = true;
-
-  auto Results = completions(
-      R"cpp(
-    void f() { na::Clangd^ }
-  )cpp",
-      {cls("na::ClangdA"), cls("nx::ClangdX"), cls("Clangd3")}, Opts);
-  EXPECT_THAT(Results.Completions,
-              UnorderedElementsAre(
-                  AllOf(Qualifier(""), Scope("na::"), Named("ClangdA"))));
-}
-
-TEST(CompletionTest, AllScopesCompletion) {
-  clangd::CodeCompleteOptions Opts = {};
-  Opts.AllScopes = true;
-
-  auto Results = completions(
-      R"cpp(
-    namespace na {
-    void f() { Clangd^ }
-    }
-  )cpp",
-      {cls("nx::Clangd1"), cls("ny::Clangd2"), cls("Clangd3"),
-       cls("na::nb::Clangd4")},
-      Opts);
-  EXPECT_THAT(
-      Results.Completions,
-      UnorderedElementsAre(AllOf(Qualifier("nx::"), Named("Clangd1")),
-                           AllOf(Qualifier("ny::"), Named("Clangd2")),
-                           AllOf(Qualifier(""), Scope(""), Named("Clangd3")),
-                           AllOf(Qualifier("nb::"), Named("Clangd4"))));
-}
-
-TEST(CompletionTest, NoQualifierIfShadowed) {
-  clangd::CodeCompleteOptions Opts = {};
-  Opts.AllScopes = true;
-
-  auto Results = completions(R"cpp(
-    namespace nx { class Clangd1 {}; }
-    using nx::Clangd1;
-    void f() { Clangd^ }
-  )cpp",
-                             {cls("nx::Clangd1"), cls("nx::Clangd2")}, Opts);
-  // Although Clangd1 is from another namespace, Sema tells us it's in-scope and
-  // needs no qualifier.
-  EXPECT_THAT(Results.Completions,
-              UnorderedElementsAre(AllOf(Qualifier(""), Named("Clangd1")),
-                                   AllOf(Qualifier("nx::"), Named("Clangd2"))));
-}
-
-TEST(CompletionTest, NoCompletionsForNewNames) {
-  clangd::CodeCompleteOptions Opts;
-  Opts.AllScopes = true;
-  auto Results = completions(R"cpp(
-      void f() { int n^ }
-    )cpp",
-                             {cls("naber"), cls("nx::naber")}, Opts);
-  EXPECT_THAT(Results.Completions, UnorderedElementsAre());
-}
-
-TEST(CompletionTest, ObjectiveCMethodNoArguments) {
-  auto Results = completions(R"objc(
-      @interface Foo
-      @property(nonatomic, setter=setXToIgnoreComplete:) int value;
-      @end
-      Foo *foo = [Foo new]; int y = [foo v^]
-    )objc",
-                             /*IndexSymbols=*/{},
-                             /*Opts=*/{}, "Foo.m");
-
-  auto C = Results.Completions;
-  EXPECT_THAT(C, ElementsAre(Named("value")));
-  EXPECT_THAT(C, ElementsAre(Kind(CompletionItemKind::Method)));
-  EXPECT_THAT(C, ElementsAre(ReturnType("int")));
-  EXPECT_THAT(C, ElementsAre(Signature("")));
-  EXPECT_THAT(C, ElementsAre(SnippetSuffix("")));
-}
-
-TEST(CompletionTest, ObjectiveCMethodOneArgument) {
-  auto Results = completions(R"objc(
-      @interface Foo
-      - (int)valueForCharacter:(char)c;
-      @end
-      Foo *foo = [Foo new]; int y = [foo v^]
-    )objc",
-                             /*IndexSymbols=*/{},
-                             /*Opts=*/{}, "Foo.m");
-
-  auto C = Results.Completions;
-  EXPECT_THAT(C, ElementsAre(Named("valueForCharacter:")));
-  EXPECT_THAT(C, ElementsAre(Kind(CompletionItemKind::Method)));
-  EXPECT_THAT(C, ElementsAre(ReturnType("int")));
-  EXPECT_THAT(C, ElementsAre(Signature("(char)")));
-  EXPECT_THAT(C, ElementsAre(SnippetSuffix("${1:(char)}")));
-}
-
-TEST(CompletionTest, ObjectiveCMethodTwoArgumentsFromBeginning) {
-  auto Results = completions(R"objc(
-      @interface Foo
-      + (id)fooWithValue:(int)value fooey:(unsigned int)fooey;
-      @end
-      id val = [Foo foo^]
-    )objc",
-                             /*IndexSymbols=*/{},
-                             /*Opts=*/{}, "Foo.m");
-
-  auto C = Results.Completions;
-  EXPECT_THAT(C, ElementsAre(Named("fooWithValue:")));
-  EXPECT_THAT(C, ElementsAre(Kind(CompletionItemKind::Method)));
-  EXPECT_THAT(C, ElementsAre(ReturnType("id")));
-  EXPECT_THAT(C, ElementsAre(Signature("(int) fooey:(unsigned int)")));
-  EXPECT_THAT(
-      C, ElementsAre(SnippetSuffix("${1:(int)} fooey:${2:(unsigned int)}")));
-}
-
-TEST(CompletionTest, ObjectiveCMethodTwoArgumentsFromMiddle) {
-  auto Results = completions(R"objc(
-      @interface Foo
-      + (id)fooWithValue:(int)value fooey:(unsigned int)fooey;
-      @end
-      id val = [Foo fooWithValue:10 f^]
-    )objc",
-                             /*IndexSymbols=*/{},
-                             /*Opts=*/{}, "Foo.m");
-
-  auto C = Results.Completions;
-  EXPECT_THAT(C, ElementsAre(Named("fooey:")));
-  EXPECT_THAT(C, ElementsAre(Kind(CompletionItemKind::Method)));
-  EXPECT_THAT(C, ElementsAre(ReturnType("id")));
-  EXPECT_THAT(C, ElementsAre(Signature("(unsigned int)")));
-  EXPECT_THAT(C, ElementsAre(SnippetSuffix("${1:(unsigned int)}")));
-}
-
-TEST(CompletionTest, WorksWithNullType) {
-  auto R = completions(R"cpp(
-    int main() {
-      for (auto [loopVar] : y ) { // y has to be unresolved.
-        int z = loopV^;
-      }
-    }
-  )cpp");
-  EXPECT_THAT(R.Completions, ElementsAre(Named("loopVar")));
-}
-
-TEST(CompletionTest, UsingDecl) {
-  const char *Header(R"cpp(
-    void foo(int);
-    namespace std {
-      using ::foo;
-    })cpp");
-  const char *Source(R"cpp(
-    void bar() {
-      std::^;
-    })cpp");
-  auto Index = TestTU::withHeaderCode(Header).index();
-  clangd::CodeCompleteOptions Opts;
-  Opts.Index = Index.get();
-  Opts.AllScopes = true;
-  auto R = completions(Source, {}, Opts);
-  EXPECT_THAT(R.Completions,
-              ElementsAre(AllOf(Scope("std::"), Named("foo"),
-                                Kind(CompletionItemKind::Reference))));
-}
-
-TEST(CompletionTest, ScopeIsUnresolved) {
-  clangd::CodeCompleteOptions Opts = {};
-  Opts.AllScopes = true;
-
-  auto Results = completions(R"cpp(
-    namespace a {
-    void f() { b::X^ }
-    }
-  )cpp",
-                             {cls("a::b::XYZ")}, Opts);
-  EXPECT_THAT(Results.Completions,
-              UnorderedElementsAre(AllOf(Qualifier(""), Named("XYZ"))));
-}
-
-TEST(CompletionTest, NestedScopeIsUnresolved) {
-  clangd::CodeCompleteOptions Opts = {};
-  Opts.AllScopes = true;
-
-  auto Results = completions(R"cpp(
-    namespace a {
-    namespace b {}
-    void f() { b::c::X^ }
-    }
-  )cpp",
-                             {cls("a::b::c::XYZ")}, Opts);
-  EXPECT_THAT(Results.Completions,
-              UnorderedElementsAre(AllOf(Qualifier(""), Named("XYZ"))));
-}
-
-// Clang parser gets confused here and doesn't report the ns:: prefix.
-// Naive behavior is to insert it again. We examine the source and recover.
-TEST(CompletionTest, NamespaceDoubleInsertion) {
-  clangd::CodeCompleteOptions Opts = {};
-
-  auto Results = completions(R"cpp(
-    namespace foo {
-    namespace ns {}
-    #define M(X) < X
-    M(ns::ABC^
-    }
-  )cpp",
-                             {cls("foo::ns::ABCDE")}, Opts);
-  EXPECT_THAT(Results.Completions,
-              UnorderedElementsAre(AllOf(Qualifier(""), Named("ABCDE"))));
-}
-
-TEST(NoCompileCompletionTest, Basic) {
-  auto Results = completionsNoCompile(R"cpp(
-    void func() {
-      int xyz;
-      int abc;
-      ^
-    }
-  )cpp");
-  EXPECT_THAT(Results.Completions,
-              UnorderedElementsAre(Named("void"), Named("func"), Named("int"),
-                                   Named("xyz"), Named("abc")));
-}
-
-TEST(NoCompileCompletionTest, WithFilter) {
-  auto Results = completionsNoCompile(R"cpp(
-    void func() {
-      int sym1;
-      int sym2;
-      int xyz1;
-      int xyz2;
-      sy^
-    }
-  )cpp");
-  EXPECT_THAT(Results.Completions,
-              UnorderedElementsAre(Named("sym1"), Named("sym2")));
-}
-
-TEST(NoCompileCompletionTest, WithIndex) {
-  std::vector<Symbol> Syms = {func("xxx"), func("a::xxx"), func("ns::b::xxx"),
-                              func("c::xxx"), func("ns::d::xxx")};
-  auto Results = completionsNoCompile(
-      R"cpp(
-        // Current-scopes, unqualified completion.
-        using namespace a;
-        namespace ns {
-        using namespace b;
-        void foo() {
-        xx^
-        }
-      )cpp",
-      Syms);
-  EXPECT_THAT(Results.Completions,
-              UnorderedElementsAre(AllOf(Qualifier(""), Scope("")),
-                                   AllOf(Qualifier(""), Scope("a::")),
-                                   AllOf(Qualifier(""), Scope("ns::b::"))));
-  CodeCompleteOptions Opts;
-  Opts.AllScopes = true;
-  Results = completionsNoCompile(
-      R"cpp(
-        // All-scopes unqualified completion.
-        using namespace a;
-        namespace ns {
-        using namespace b;
-        void foo() {
-        xx^
-        }
-      )cpp",
-      Syms, Opts);
-  EXPECT_THAT(Results.Completions,
-              UnorderedElementsAre(AllOf(Qualifier(""), Scope("")),
-                                   AllOf(Qualifier(""), Scope("a::")),
-                                   AllOf(Qualifier(""), Scope("ns::b::")),
-                                   AllOf(Qualifier("c::"), Scope("c::")),
-                                   AllOf(Qualifier("d::"), Scope("ns::d::"))));
-  Results = completionsNoCompile(
-      R"cpp(
-        // Qualified completion.
-        using namespace a;
-        namespace ns {
-        using namespace b;
-        void foo() {
-        b::xx^
-        }
-      )cpp",
-      Syms, Opts);
-  EXPECT_THAT(Results.Completions,
-              ElementsAre(AllOf(Qualifier(""), Scope("ns::b::"))));
-  Results = completionsNoCompile(
-      R"cpp(
-        // Absolutely qualified completion.
-        using namespace a;
-        namespace ns {
-        using namespace b;
-        void foo() {
-        ::a::xx^
-        }
-      )cpp",
-      Syms, Opts);
-  EXPECT_THAT(Results.Completions,
-              ElementsAre(AllOf(Qualifier(""), Scope("a::"))));
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/CodeCompletionStringsTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/CodeCompletionStringsTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/CodeCompletionStringsTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/CodeCompletionStringsTests.cpp (removed)
@@ -1,160 +0,0 @@
-//===-- CodeCompletionStringsTests.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 "CodeCompletionStrings.h"
-#include "clang/Sema/CodeCompleteConsumer.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-
-class CompletionStringTest : public ::testing::Test {
-public:
-  CompletionStringTest()
-      : Allocator(std::make_shared<clang::GlobalCodeCompletionAllocator>()),
-        CCTUInfo(Allocator), Builder(*Allocator, CCTUInfo) {}
-
-protected:
-  void computeSignature(const CodeCompletionString &CCS) {
-    Signature.clear();
-    Snippet.clear();
-    getSignature(CCS, &Signature, &Snippet);
-  }
-
-  std::shared_ptr<clang::GlobalCodeCompletionAllocator> Allocator;
-  CodeCompletionTUInfo CCTUInfo;
-  CodeCompletionBuilder Builder;
-  std::string Signature;
-  std::string Snippet;
-};
-
-TEST_F(CompletionStringTest, ReturnType) {
-  Builder.AddResultTypeChunk("result");
-  Builder.AddResultTypeChunk("redundant result no no");
-  EXPECT_EQ(getReturnType(*Builder.TakeString()), "result");
-}
-
-TEST_F(CompletionStringTest, Documentation) {
-  Builder.addBriefComment("This is ignored");
-  EXPECT_EQ(formatDocumentation(*Builder.TakeString(), "Is this brief?"),
-            "Is this brief?");
-}
-
-TEST_F(CompletionStringTest, DocumentationWithAnnotation) {
-  Builder.addBriefComment("This is ignored");
-  Builder.AddAnnotation("Ano");
-  EXPECT_EQ(formatDocumentation(*Builder.TakeString(), "Is this brief?"),
-            "Annotation: Ano\n\nIs this brief?");
-}
-
-TEST_F(CompletionStringTest, MultipleAnnotations) {
-  Builder.AddAnnotation("Ano1");
-  Builder.AddAnnotation("Ano2");
-  Builder.AddAnnotation("Ano3");
-
-  EXPECT_EQ(formatDocumentation(*Builder.TakeString(), ""),
-            "Annotations: Ano1 Ano2 Ano3\n");
-}
-
-TEST_F(CompletionStringTest, EmptySignature) {
-  Builder.AddTypedTextChunk("X");
-  Builder.AddResultTypeChunk("result no no");
-  computeSignature(*Builder.TakeString());
-  EXPECT_EQ(Signature, "");
-  EXPECT_EQ(Snippet, "");
-}
-
-TEST_F(CompletionStringTest, Function) {
-  Builder.AddResultTypeChunk("result no no");
-  Builder.addBriefComment("This comment is ignored");
-  Builder.AddTypedTextChunk("Foo");
-  Builder.AddChunk(CodeCompletionString::CK_LeftParen);
-  Builder.AddPlaceholderChunk("p1");
-  Builder.AddChunk(CodeCompletionString::CK_Comma);
-  Builder.AddPlaceholderChunk("p2");
-  Builder.AddChunk(CodeCompletionString::CK_RightParen);
-
-  auto *CCS = Builder.TakeString();
-  computeSignature(*CCS);
-  EXPECT_EQ(Signature, "(p1, p2)");
-  EXPECT_EQ(Snippet, "(${1:p1}, ${2:p2})");
-  EXPECT_EQ(formatDocumentation(*CCS, "Foo's comment"), "Foo's comment");
-}
-
-TEST_F(CompletionStringTest, EscapeSnippet) {
-  Builder.AddTypedTextChunk("Foo");
-  Builder.AddChunk(CodeCompletionString::CK_LeftParen);
-  Builder.AddPlaceholderChunk("$p}1\\");
-  Builder.AddChunk(CodeCompletionString::CK_RightParen);
-
-  computeSignature(*Builder.TakeString());
-  EXPECT_EQ(Signature, "($p}1\\)");
-  EXPECT_EQ(Snippet, "(${1:\\$p\\}1\\\\})");
-}
-
-TEST_F(CompletionStringTest, IgnoreInformativeQualifier) {
-  Builder.AddTypedTextChunk("X");
-  Builder.AddInformativeChunk("info ok");
-  Builder.AddInformativeChunk("info no no::");
-  computeSignature(*Builder.TakeString());
-  EXPECT_EQ(Signature, "info ok");
-  EXPECT_EQ(Snippet, "");
-}
-
-TEST_F(CompletionStringTest, ObjectiveCMethodNoArguments) {
-  Builder.AddResultTypeChunk("void");
-  Builder.AddTypedTextChunk("methodName");
-
-  auto *CCS = Builder.TakeString();
-  computeSignature(*CCS);
-  EXPECT_EQ(Signature, "");
-  EXPECT_EQ(Snippet, "");
-}
-
-TEST_F(CompletionStringTest, ObjectiveCMethodOneArgument) {
-  Builder.AddResultTypeChunk("void");
-  Builder.AddTypedTextChunk("methodWithArg:");
-  Builder.AddPlaceholderChunk("(type)");
-
-  auto *CCS = Builder.TakeString();
-  computeSignature(*CCS);
-  EXPECT_EQ(Signature, "(type)");
-  EXPECT_EQ(Snippet, "${1:(type)}");
-}
-
-TEST_F(CompletionStringTest, ObjectiveCMethodTwoArgumentsFromBeginning) {
-  Builder.AddResultTypeChunk("int");
-  Builder.AddTypedTextChunk("withFoo:");
-  Builder.AddPlaceholderChunk("(type)");
-  Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
-  Builder.AddTypedTextChunk("bar:");
-  Builder.AddPlaceholderChunk("(type2)");
-
-  auto *CCS = Builder.TakeString();
-  computeSignature(*CCS);
-  EXPECT_EQ(Signature, "(type) bar:(type2)");
-  EXPECT_EQ(Snippet, "${1:(type)} bar:${2:(type2)}");
-}
-
-TEST_F(CompletionStringTest, ObjectiveCMethodTwoArgumentsFromMiddle) {
-  Builder.AddResultTypeChunk("int");
-  Builder.AddInformativeChunk("withFoo:");
-  Builder.AddTypedTextChunk("bar:");
-  Builder.AddPlaceholderChunk("(type2)");
-
-  auto *CCS = Builder.TakeString();
-  computeSignature(*CCS);
-  EXPECT_EQ(Signature, "(type2)");
-  EXPECT_EQ(Snippet, "${1:(type2)}");
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/ContextTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/ContextTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/ContextTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/ContextTests.cpp (removed)
@@ -1,56 +0,0 @@
-//===-- ContextTests.cpp - Context 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 "Context.h"
-
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-
-TEST(ContextTests, Simple) {
-  Key<int> IntParam;
-  Key<int> ExtraIntParam;
-
-  Context Ctx = Context::empty().derive(IntParam, 10).derive(ExtraIntParam, 20);
-
-  EXPECT_EQ(*Ctx.get(IntParam), 10);
-  EXPECT_EQ(*Ctx.get(ExtraIntParam), 20);
-}
-
-TEST(ContextTests, MoveOps) {
-  Key<std::unique_ptr<int>> Param;
-
-  Context Ctx = Context::empty().derive(Param, llvm::make_unique<int>(10));
-  EXPECT_EQ(**Ctx.get(Param), 10);
-
-  Context NewCtx = std::move(Ctx);
-  EXPECT_EQ(**NewCtx.get(Param), 10);
-}
-
-TEST(ContextTests, Builders) {
-  Key<int> ParentParam;
-  Key<int> ParentAndChildParam;
-  Key<int> ChildParam;
-
-  Context ParentCtx =
-      Context::empty().derive(ParentParam, 10).derive(ParentAndChildParam, 20);
-  Context ChildCtx =
-      ParentCtx.derive(ParentAndChildParam, 30).derive(ChildParam, 40);
-
-  EXPECT_EQ(*ParentCtx.get(ParentParam), 10);
-  EXPECT_EQ(*ParentCtx.get(ParentAndChildParam), 20);
-  EXPECT_EQ(ParentCtx.get(ChildParam), nullptr);
-
-  EXPECT_EQ(*ChildCtx.get(ParentParam), 10);
-  EXPECT_EQ(*ChildCtx.get(ParentAndChildParam), 30);
-  EXPECT_EQ(*ChildCtx.get(ChildParam), 40);
-}
-
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/DexTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/DexTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/DexTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/DexTests.cpp (removed)
@@ -1,753 +0,0 @@
-//===-- DexTests.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 "FuzzyMatch.h"
-#include "TestFS.h"
-#include "TestIndex.h"
-#include "index/Index.h"
-#include "index/Merge.h"
-#include "index/SymbolID.h"
-#include "index/dex/Dex.h"
-#include "index/dex/Iterator.h"
-#include "index/dex/Token.h"
-#include "index/dex/Trigram.h"
-#include "llvm/Support/ScopedPrinter.h"
-#include "llvm/Support/raw_ostream.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-#include <string>
-#include <vector>
-
-using ::testing::AnyOf;
-using ::testing::ElementsAre;
-using ::testing::IsEmpty;
-using ::testing::UnorderedElementsAre;
-
-namespace clang {
-namespace clangd {
-namespace dex {
-namespace {
-
-//===----------------------------------------------------------------------===//
-// Query iterator tests.
-//===----------------------------------------------------------------------===//
-
-std::vector<DocID> consumeIDs(Iterator &It) {
-  auto IDAndScore = consume(It);
-  std::vector<DocID> IDs(IDAndScore.size());
-  for (size_t I = 0; I < IDAndScore.size(); ++I)
-    IDs[I] = IDAndScore[I].first;
-  return IDs;
-}
-
-TEST(DexIterators, DocumentIterator) {
-  const PostingList L({4, 7, 8, 20, 42, 100});
-  auto DocIterator = L.iterator();
-
-  EXPECT_EQ(DocIterator->peek(), 4U);
-  EXPECT_FALSE(DocIterator->reachedEnd());
-
-  DocIterator->advance();
-  EXPECT_EQ(DocIterator->peek(), 7U);
-  EXPECT_FALSE(DocIterator->reachedEnd());
-
-  DocIterator->advanceTo(20);
-  EXPECT_EQ(DocIterator->peek(), 20U);
-  EXPECT_FALSE(DocIterator->reachedEnd());
-
-  DocIterator->advanceTo(65);
-  EXPECT_EQ(DocIterator->peek(), 100U);
-  EXPECT_FALSE(DocIterator->reachedEnd());
-
-  DocIterator->advanceTo(420);
-  EXPECT_TRUE(DocIterator->reachedEnd());
-}
-
-TEST(DexIterators, AndTwoLists) {
-  Corpus C{10000};
-  const PostingList L0({0, 5, 7, 10, 42, 320, 9000});
-  const PostingList L1({0, 4, 7, 10, 30, 60, 320, 9000});
-
-  auto And = C.intersect(L1.iterator(), L0.iterator());
-
-  EXPECT_FALSE(And->reachedEnd());
-  EXPECT_THAT(consumeIDs(*And), ElementsAre(0U, 7U, 10U, 320U, 9000U));
-
-  And = C.intersect(L0.iterator(), L1.iterator());
-
-  And->advanceTo(0);
-  EXPECT_EQ(And->peek(), 0U);
-  And->advanceTo(5);
-  EXPECT_EQ(And->peek(), 7U);
-  And->advanceTo(10);
-  EXPECT_EQ(And->peek(), 10U);
-  And->advanceTo(42);
-  EXPECT_EQ(And->peek(), 320U);
-  And->advanceTo(8999);
-  EXPECT_EQ(And->peek(), 9000U);
-  And->advanceTo(9001);
-}
-
-TEST(DexIterators, AndThreeLists) {
-  Corpus C{10000};
-  const PostingList L0({0, 5, 7, 10, 42, 320, 9000});
-  const PostingList L1({0, 4, 7, 10, 30, 60, 320, 9000});
-  const PostingList L2({1, 4, 7, 11, 30, 60, 320, 9000});
-
-  auto And = C.intersect(L0.iterator(), L1.iterator(), L2.iterator());
-  EXPECT_EQ(And->peek(), 7U);
-  And->advanceTo(300);
-  EXPECT_EQ(And->peek(), 320U);
-  And->advanceTo(100000);
-
-  EXPECT_TRUE(And->reachedEnd());
-}
-
-TEST(DexIterators, AndEmpty) {
-  Corpus C{10000};
-  const PostingList L1{1};
-  const PostingList L2{2};
-  // These iterators are empty, but the optimizer can't tell.
-  auto Empty1 = C.intersect(L1.iterator(), L2.iterator());
-  auto Empty2 = C.intersect(L1.iterator(), L2.iterator());
-  // And syncs iterators on construction, and used to fail on empty children.
-  auto And = C.intersect(std::move(Empty1), std::move(Empty2));
-  EXPECT_TRUE(And->reachedEnd());
-}
-
-TEST(DexIterators, OrTwoLists) {
-  Corpus C{10000};
-  const PostingList L0({0, 5, 7, 10, 42, 320, 9000});
-  const PostingList L1({0, 4, 7, 10, 30, 60, 320, 9000});
-
-  auto Or = C.unionOf(L0.iterator(), L1.iterator());
-
-  EXPECT_FALSE(Or->reachedEnd());
-  EXPECT_EQ(Or->peek(), 0U);
-  Or->advance();
-  EXPECT_EQ(Or->peek(), 4U);
-  Or->advance();
-  EXPECT_EQ(Or->peek(), 5U);
-  Or->advance();
-  EXPECT_EQ(Or->peek(), 7U);
-  Or->advance();
-  EXPECT_EQ(Or->peek(), 10U);
-  Or->advance();
-  EXPECT_EQ(Or->peek(), 30U);
-  Or->advanceTo(42);
-  EXPECT_EQ(Or->peek(), 42U);
-  Or->advanceTo(300);
-  EXPECT_EQ(Or->peek(), 320U);
-  Or->advanceTo(9000);
-  EXPECT_EQ(Or->peek(), 9000U);
-  Or->advanceTo(9001);
-  EXPECT_TRUE(Or->reachedEnd());
-
-  Or = C.unionOf(L0.iterator(), L1.iterator());
-
-  EXPECT_THAT(consumeIDs(*Or),
-              ElementsAre(0U, 4U, 5U, 7U, 10U, 30U, 42U, 60U, 320U, 9000U));
-}
-
-TEST(DexIterators, OrThreeLists) {
-  Corpus C{10000};
-  const PostingList L0({0, 5, 7, 10, 42, 320, 9000});
-  const PostingList L1({0, 4, 7, 10, 30, 60, 320, 9000});
-  const PostingList L2({1, 4, 7, 11, 30, 60, 320, 9000});
-
-  auto Or = C.unionOf(L0.iterator(), L1.iterator(), L2.iterator());
-
-  EXPECT_FALSE(Or->reachedEnd());
-  EXPECT_EQ(Or->peek(), 0U);
-
-  Or->advance();
-  EXPECT_EQ(Or->peek(), 1U);
-
-  Or->advance();
-  EXPECT_EQ(Or->peek(), 4U);
-
-  Or->advanceTo(7);
-
-  Or->advanceTo(59);
-  EXPECT_EQ(Or->peek(), 60U);
-
-  Or->advanceTo(9001);
-  EXPECT_TRUE(Or->reachedEnd());
-}
-
-// FIXME(kbobyrev): The testcase below is similar to what is expected in real
-// queries. It should be updated once new iterators (such as boosting, limiting,
-// etc iterators) appear. However, it is not exhaustive and it would be
-// beneficial to implement automatic generation (e.g. fuzzing) of query trees
-// for more comprehensive testing.
-TEST(DexIterators, QueryTree) {
-  //
-  //                      +-----------------+
-  //                      |And Iterator:1, 5|
-  //                      +--------+--------+
-  //                               |
-  //                               |
-  //                 +-------------+----------------------+
-  //                 |                                    |
-  //                 |                                    |
-  //      +----------v----------+              +----------v------------+
-  //      |And Iterator: 1, 5, 9|              |Or Iterator: 0, 1, 3, 5|
-  //      +----------+----------+              +----------+------------+
-  //                 |                                    |
-  //          +------+-----+                        ------------+
-  //          |            |                        |           |
-  //  +-------v-----+ +----+---+                +---v----+ +----v---+
-  //  |1, 3, 5, 8, 9| |Boost: 2|                |Boost: 3| |Boost: 4|
-  //  +-------------+ +----+---+                +---+----+ +----+---+
-  //                       |                        |           |
-  //                  +----v-----+                +-v--+    +---v---+
-  //                  |1, 5, 7, 9|                |1, 5|    |0, 3, 5|
-  //                  +----------+                +----+    +-------+
-  //
-  Corpus C{10};
-  const PostingList L0({1, 3, 5, 8, 9});
-  const PostingList L1({1, 5, 7, 9});
-  const PostingList L2({1, 5});
-  const PostingList L3({0, 3, 5});
-
-  // Root of the query tree: [1, 5]
-  auto Root = C.intersect(
-      // Lower And Iterator: [1, 5, 9]
-      C.intersect(L0.iterator(), C.boost(L1.iterator(), 2U)),
-      // Lower Or Iterator: [0, 1, 5]
-      C.unionOf(C.boost(L2.iterator(), 3U), C.boost(L3.iterator(), 4U)));
-
-  EXPECT_FALSE(Root->reachedEnd());
-  EXPECT_EQ(Root->peek(), 1U);
-  Root->advanceTo(0);
-  // Advance multiple times. Shouldn't do anything.
-  Root->advanceTo(1);
-  Root->advanceTo(0);
-  EXPECT_EQ(Root->peek(), 1U);
-  auto ElementBoost = Root->consume();
-  EXPECT_THAT(ElementBoost, 6);
-  Root->advance();
-  EXPECT_EQ(Root->peek(), 5U);
-  Root->advanceTo(5);
-  EXPECT_EQ(Root->peek(), 5U);
-  ElementBoost = Root->consume();
-  EXPECT_THAT(ElementBoost, 8);
-  Root->advanceTo(9000);
-  EXPECT_TRUE(Root->reachedEnd());
-}
-
-TEST(DexIterators, StringRepresentation) {
-  Corpus C{10};
-  const PostingList L1({1, 3, 5});
-  const PostingList L2({1, 7, 9});
-
-  // No token given, prints full posting list.
-  auto I1 = L1.iterator();
-  EXPECT_EQ(llvm::to_string(*I1), "[1 3 5]");
-
-  // Token given, uses token's string representation.
-  Token Tok(Token::Kind::Trigram, "L2");
-  auto I2 = L1.iterator(&Tok);
-  EXPECT_EQ(llvm::to_string(*I2), "T=L2");
-
-  auto Tree = C.limit(C.intersect(move(I1), move(I2)), 10);
-  // AND reorders its children, we don't care which order it prints.
-  EXPECT_THAT(llvm::to_string(*Tree), AnyOf("(LIMIT 10 (& [1 3 5] T=L2))",
-                                            "(LIMIT 10 (& T=L2 [1 3 5]))"));
-}
-
-TEST(DexIterators, Limit) {
-  Corpus C{10000};
-  const PostingList L0({3, 6, 7, 20, 42, 100});
-  const PostingList L1({1, 3, 5, 6, 7, 30, 100});
-  const PostingList L2({0, 3, 5, 7, 8, 100});
-
-  auto DocIterator = C.limit(L0.iterator(), 42);
-  EXPECT_THAT(consumeIDs(*DocIterator), ElementsAre(3, 6, 7, 20, 42, 100));
-
-  DocIterator = C.limit(L0.iterator(), 3);
-  EXPECT_THAT(consumeIDs(*DocIterator), ElementsAre(3, 6, 7));
-
-  DocIterator = C.limit(L0.iterator(), 0);
-  EXPECT_THAT(consumeIDs(*DocIterator), ElementsAre());
-
-  auto AndIterator =
-      C.intersect(C.limit(C.all(), 343), C.limit(L0.iterator(), 2),
-                  C.limit(L1.iterator(), 3), C.limit(L2.iterator(), 42));
-  EXPECT_THAT(consumeIDs(*AndIterator), ElementsAre(3, 7));
-}
-
-TEST(DexIterators, True) {
-  EXPECT_TRUE(Corpus{0}.all()->reachedEnd());
-  EXPECT_THAT(consumeIDs(*Corpus{4}.all()), ElementsAre(0, 1, 2, 3));
-}
-
-TEST(DexIterators, Boost) {
-  Corpus C{5};
-  auto BoostIterator = C.boost(C.all(), 42U);
-  EXPECT_FALSE(BoostIterator->reachedEnd());
-  auto ElementBoost = BoostIterator->consume();
-  EXPECT_THAT(ElementBoost, 42U);
-
-  const PostingList L0({2, 4});
-  const PostingList L1({1, 4});
-  auto Root = C.unionOf(C.all(), C.boost(L0.iterator(), 2U),
-                        C.boost(L1.iterator(), 3U));
-
-  ElementBoost = Root->consume();
-  EXPECT_THAT(ElementBoost, 1);
-  Root->advance();
-  EXPECT_THAT(Root->peek(), 1U);
-  ElementBoost = Root->consume();
-  EXPECT_THAT(ElementBoost, 3);
-
-  Root->advance();
-  EXPECT_THAT(Root->peek(), 2U);
-  ElementBoost = Root->consume();
-  EXPECT_THAT(ElementBoost, 2);
-
-  Root->advanceTo(4);
-  ElementBoost = Root->consume();
-  EXPECT_THAT(ElementBoost, 3);
-}
-
-TEST(DexIterators, Optimizations) {
-  Corpus C{5};
-  const PostingList L1{1};
-  const PostingList L2{2};
-  const PostingList L3{3};
-
-  // empty and/or yield true/false
-  EXPECT_EQ(llvm::to_string(*C.intersect()), "true");
-  EXPECT_EQ(llvm::to_string(*C.unionOf()), "false");
-
-  // true/false inside and/or short-circuit
-  EXPECT_EQ(llvm::to_string(*C.intersect(L1.iterator(), C.all())), "[1]");
-  EXPECT_EQ(llvm::to_string(*C.intersect(L1.iterator(), C.none())), "false");
-  // Not optimized to avoid breaking boosts.
-  EXPECT_EQ(llvm::to_string(*C.unionOf(L1.iterator(), C.all())),
-            "(| [1] true)");
-  EXPECT_EQ(llvm::to_string(*C.unionOf(L1.iterator(), C.none())), "[1]");
-
-  // and/or nested inside and/or are flattened
-  EXPECT_EQ(llvm::to_string(*C.intersect(
-                L1.iterator(), C.intersect(L1.iterator(), L1.iterator()))),
-            "(& [1] [1] [1])");
-  EXPECT_EQ(llvm::to_string(*C.unionOf(
-                L1.iterator(), C.unionOf(L2.iterator(), L3.iterator()))),
-            "(| [1] [2] [3])");
-
-  // optimizations combine over multiple levels
-  EXPECT_EQ(llvm::to_string(*C.intersect(
-                C.intersect(L1.iterator(), C.intersect()), C.unionOf(C.all()))),
-            "[1]");
-}
-
-//===----------------------------------------------------------------------===//
-// Search token tests.
-//===----------------------------------------------------------------------===//
-
-testing::Matcher<std::vector<Token>>
-tokensAre(std::initializer_list<std::string> Strings, Token::Kind Kind) {
-  std::vector<Token> Tokens;
-  for (const auto &TokenData : Strings) {
-    Tokens.push_back(Token(Kind, TokenData));
-  }
-  return testing::UnorderedElementsAreArray(Tokens);
-}
-
-testing::Matcher<std::vector<Token>>
-trigramsAre(std::initializer_list<std::string> Trigrams) {
-  return tokensAre(Trigrams, Token::Kind::Trigram);
-}
-
-TEST(DexTrigrams, IdentifierTrigrams) {
-  EXPECT_THAT(generateIdentifierTrigrams("X86"),
-              trigramsAre({"x86", "x", "x8"}));
-
-  EXPECT_THAT(generateIdentifierTrigrams("nl"), trigramsAre({"nl", "n"}));
-
-  EXPECT_THAT(generateIdentifierTrigrams("n"), trigramsAre({"n"}));
-
-  EXPECT_THAT(generateIdentifierTrigrams("clangd"),
-              trigramsAre({"c", "cl", "cla", "lan", "ang", "ngd"}));
-
-  EXPECT_THAT(generateIdentifierTrigrams("abc_def"),
-              trigramsAre({"a", "ab", "ad", "abc", "abd", "ade", "bcd", "bde",
-                           "cde", "def"}));
-
-  EXPECT_THAT(generateIdentifierTrigrams("a_b_c_d_e_"),
-              trigramsAre({"a", "a_", "ab", "abc", "bcd", "cde"}));
-
-  EXPECT_THAT(generateIdentifierTrigrams("unique_ptr"),
-              trigramsAre({"u", "un", "up", "uni", "unp", "upt", "niq", "nip",
-                           "npt", "iqu", "iqp", "ipt", "que", "qup", "qpt",
-                           "uep", "ept", "ptr"}));
-
-  EXPECT_THAT(
-      generateIdentifierTrigrams("TUDecl"),
-      trigramsAre({"t", "tu", "td", "tud", "tde", "ude", "dec", "ecl"}));
-
-  EXPECT_THAT(generateIdentifierTrigrams("IsOK"),
-              trigramsAre({"i", "is", "io", "iso", "iok", "sok"}));
-
-  EXPECT_THAT(
-      generateIdentifierTrigrams("abc_defGhij__klm"),
-      trigramsAre({"a",   "ab",  "ad",  "abc", "abd", "ade", "adg", "bcd",
-                   "bde", "bdg", "cde", "cdg", "def", "deg", "dgh", "dgk",
-                   "efg", "egh", "egk", "fgh", "fgk", "ghi", "ghk", "gkl",
-                   "hij", "hik", "hkl", "ijk", "ikl", "jkl", "klm"}));
-}
-
-TEST(DexTrigrams, QueryTrigrams) {
-  EXPECT_THAT(generateQueryTrigrams("c"), trigramsAre({"c"}));
-  EXPECT_THAT(generateQueryTrigrams("cl"), trigramsAre({"cl"}));
-  EXPECT_THAT(generateQueryTrigrams("cla"), trigramsAre({"cla"}));
-
-  EXPECT_THAT(generateQueryTrigrams(""), trigramsAre({}));
-  EXPECT_THAT(generateQueryTrigrams("_"), trigramsAre({"_"}));
-  EXPECT_THAT(generateQueryTrigrams("__"), trigramsAre({"__"}));
-  EXPECT_THAT(generateQueryTrigrams("___"), trigramsAre({}));
-
-  EXPECT_THAT(generateQueryTrigrams("X86"), trigramsAre({"x86"}));
-
-  EXPECT_THAT(generateQueryTrigrams("clangd"),
-              trigramsAre({"cla", "lan", "ang", "ngd"}));
-
-  EXPECT_THAT(generateQueryTrigrams("abc_def"),
-              trigramsAre({"abc", "bcd", "cde", "def"}));
-
-  EXPECT_THAT(generateQueryTrigrams("a_b_c_d_e_"),
-              trigramsAre({"abc", "bcd", "cde"}));
-
-  EXPECT_THAT(generateQueryTrigrams("unique_ptr"),
-              trigramsAre({"uni", "niq", "iqu", "que", "uep", "ept", "ptr"}));
-
-  EXPECT_THAT(generateQueryTrigrams("TUDecl"),
-              trigramsAre({"tud", "ude", "dec", "ecl"}));
-
-  EXPECT_THAT(generateQueryTrigrams("IsOK"), trigramsAre({"iso", "sok"}));
-
-  EXPECT_THAT(generateQueryTrigrams("abc_defGhij__klm"),
-              trigramsAre({"abc", "bcd", "cde", "def", "efg", "fgh", "ghi",
-                           "hij", "ijk", "jkl", "klm"}));
-}
-
-TEST(DexSearchTokens, SymbolPath) {
-  EXPECT_THAT(generateProximityURIs(
-                  "unittest:///clang-tools-extra/clangd/index/Token.h"),
-              ElementsAre("unittest:///clang-tools-extra/clangd/index/Token.h",
-                          "unittest:///clang-tools-extra/clangd/index",
-                          "unittest:///clang-tools-extra/clangd",
-                          "unittest:///clang-tools-extra", "unittest:///"));
-
-  EXPECT_THAT(generateProximityURIs("unittest:///a/b/c.h"),
-              ElementsAre("unittest:///a/b/c.h", "unittest:///a/b",
-                          "unittest:///a", "unittest:///"));
-}
-
-//===----------------------------------------------------------------------===//
-// Index tests.
-//===----------------------------------------------------------------------===//
-
-TEST(Dex, Lookup) {
-  auto I = Dex::build(generateSymbols({"ns::abc", "ns::xyz"}), RefSlab());
-  EXPECT_THAT(lookup(*I, SymbolID("ns::abc")), UnorderedElementsAre("ns::abc"));
-  EXPECT_THAT(lookup(*I, {SymbolID("ns::abc"), SymbolID("ns::xyz")}),
-              UnorderedElementsAre("ns::abc", "ns::xyz"));
-  EXPECT_THAT(lookup(*I, {SymbolID("ns::nonono"), SymbolID("ns::xyz")}),
-              UnorderedElementsAre("ns::xyz"));
-  EXPECT_THAT(lookup(*I, SymbolID("ns::nonono")), UnorderedElementsAre());
-}
-
-TEST(Dex, FuzzyFind) {
-  auto Index =
-      Dex::build(generateSymbols({"ns::ABC", "ns::BCD", "::ABC",
-                                  "ns::nested::ABC", "other::ABC", "other::A"}),
-                 RefSlab());
-  FuzzyFindRequest Req;
-  Req.Query = "ABC";
-  Req.Scopes = {"ns::"};
-  EXPECT_THAT(match(*Index, Req), UnorderedElementsAre("ns::ABC"));
-  Req.Scopes = {"ns::", "ns::nested::"};
-  EXPECT_THAT(match(*Index, Req),
-              UnorderedElementsAre("ns::ABC", "ns::nested::ABC"));
-  Req.Query = "A";
-  Req.Scopes = {"other::"};
-  EXPECT_THAT(match(*Index, Req),
-              UnorderedElementsAre("other::A", "other::ABC"));
-  Req.Query = "";
-  Req.Scopes = {};
-  Req.AnyScope = true;
-  EXPECT_THAT(match(*Index, Req),
-              UnorderedElementsAre("ns::ABC", "ns::BCD", "::ABC",
-                                   "ns::nested::ABC", "other::ABC",
-                                   "other::A"));
-}
-
-TEST(DexTest, DexLimitedNumMatches) {
-  auto I = Dex::build(generateNumSymbols(0, 100), RefSlab());
-  FuzzyFindRequest Req;
-  Req.Query = "5";
-  Req.AnyScope = true;
-  Req.Limit = 3;
-  bool Incomplete;
-  auto Matches = match(*I, Req, &Incomplete);
-  EXPECT_TRUE(Req.Limit);
-  EXPECT_EQ(Matches.size(), *Req.Limit);
-  EXPECT_TRUE(Incomplete);
-}
-
-TEST(DexTest, FuzzyMatch) {
-  auto I = Dex::build(
-      generateSymbols({"LaughingOutLoud", "LionPopulation", "LittleOldLady"}),
-      RefSlab());
-  FuzzyFindRequest Req;
-  Req.Query = "lol";
-  Req.AnyScope = true;
-  Req.Limit = 2;
-  EXPECT_THAT(match(*I, Req),
-              UnorderedElementsAre("LaughingOutLoud", "LittleOldLady"));
-}
-
-TEST(DexTest, ShortQuery) {
-  auto I = Dex::build(generateSymbols({"OneTwoThreeFour"}), RefSlab());
-  FuzzyFindRequest Req;
-  Req.AnyScope = true;
-  bool Incomplete;
-
-  EXPECT_THAT(match(*I, Req, &Incomplete), ElementsAre("OneTwoThreeFour"));
-  EXPECT_FALSE(Incomplete) << "Empty string is not a short query";
-
-  Req.Query = "t";
-  EXPECT_THAT(match(*I, Req, &Incomplete), ElementsAre());
-  EXPECT_TRUE(Incomplete) << "Short queries have different semantics";
-
-  Req.Query = "tt";
-  EXPECT_THAT(match(*I, Req, &Incomplete), ElementsAre());
-  EXPECT_TRUE(Incomplete) << "Short queries have different semantics";
-
-  Req.Query = "ttf";
-  EXPECT_THAT(match(*I, Req, &Incomplete), ElementsAre("OneTwoThreeFour"));
-  EXPECT_FALSE(Incomplete) << "3-char string is not a short query";
-}
-
-TEST(DexTest, MatchQualifiedNamesWithoutSpecificScope) {
-  auto I = Dex::build(generateSymbols({"a::y1", "b::y2", "y3"}), RefSlab());
-  FuzzyFindRequest Req;
-  Req.AnyScope = true;
-  Req.Query = "y";
-  EXPECT_THAT(match(*I, Req), UnorderedElementsAre("a::y1", "b::y2", "y3"));
-}
-
-TEST(DexTest, MatchQualifiedNamesWithGlobalScope) {
-  auto I = Dex::build(generateSymbols({"a::y1", "b::y2", "y3"}), RefSlab());
-  FuzzyFindRequest Req;
-  Req.Query = "y";
-  Req.Scopes = {""};
-  EXPECT_THAT(match(*I, Req), UnorderedElementsAre("y3"));
-}
-
-TEST(DexTest, MatchQualifiedNamesWithOneScope) {
-  auto I = Dex::build(
-      generateSymbols({"a::y1", "a::y2", "a::x", "b::y2", "y3"}), RefSlab());
-  FuzzyFindRequest Req;
-  Req.Query = "y";
-  Req.Scopes = {"a::"};
-  EXPECT_THAT(match(*I, Req), UnorderedElementsAre("a::y1", "a::y2"));
-}
-
-TEST(DexTest, MatchQualifiedNamesWithMultipleScopes) {
-  auto I = Dex::build(
-      generateSymbols({"a::y1", "a::y2", "a::x", "b::y3", "y3"}), RefSlab());
-  FuzzyFindRequest Req;
-  Req.Query = "y";
-  Req.Scopes = {"a::", "b::"};
-  EXPECT_THAT(match(*I, Req), UnorderedElementsAre("a::y1", "a::y2", "b::y3"));
-}
-
-TEST(DexTest, NoMatchNestedScopes) {
-  auto I = Dex::build(generateSymbols({"a::y1", "a::b::y2"}), RefSlab());
-  FuzzyFindRequest Req;
-  Req.Query = "y";
-  Req.Scopes = {"a::"};
-  EXPECT_THAT(match(*I, Req), UnorderedElementsAre("a::y1"));
-}
-
-TEST(DexTest, WildcardScope) {
-  auto I =
-      Dex::build(generateSymbols({"a::y1", "a::b::y2", "c::y3"}), RefSlab());
-  FuzzyFindRequest Req;
-  Req.AnyScope = true;
-  Req.Query = "y";
-  Req.Scopes = {"a::"};
-  EXPECT_THAT(match(*I, Req),
-              UnorderedElementsAre("a::y1", "a::b::y2", "c::y3"));
-}
-
-TEST(DexTest, IgnoreCases) {
-  auto I = Dex::build(generateSymbols({"ns::ABC", "ns::abc"}), RefSlab());
-  FuzzyFindRequest Req;
-  Req.Query = "AB";
-  Req.Scopes = {"ns::"};
-  EXPECT_THAT(match(*I, Req), UnorderedElementsAre("ns::ABC", "ns::abc"));
-}
-
-TEST(DexTest, UnknownPostingList) {
-  // Regression test: we used to ignore unknown scopes and accept any symbol.
-  auto I = Dex::build(generateSymbols({"ns::ABC", "ns::abc"}), RefSlab());
-  FuzzyFindRequest Req;
-  Req.Scopes = {"ns2::"};
-  EXPECT_THAT(match(*I, Req), UnorderedElementsAre());
-}
-
-TEST(DexTest, Lookup) {
-  auto I = Dex::build(generateSymbols({"ns::abc", "ns::xyz"}), RefSlab());
-  EXPECT_THAT(lookup(*I, SymbolID("ns::abc")), UnorderedElementsAre("ns::abc"));
-  EXPECT_THAT(lookup(*I, {SymbolID("ns::abc"), SymbolID("ns::xyz")}),
-              UnorderedElementsAre("ns::abc", "ns::xyz"));
-  EXPECT_THAT(lookup(*I, {SymbolID("ns::nonono"), SymbolID("ns::xyz")}),
-              UnorderedElementsAre("ns::xyz"));
-  EXPECT_THAT(lookup(*I, SymbolID("ns::nonono")), UnorderedElementsAre());
-}
-
-TEST(DexTest, SymbolIndexOptionsFilter) {
-  auto CodeCompletionSymbol = symbol("Completion");
-  auto NonCodeCompletionSymbol = symbol("NoCompletion");
-  CodeCompletionSymbol.Flags = Symbol::SymbolFlag::IndexedForCodeCompletion;
-  NonCodeCompletionSymbol.Flags = Symbol::SymbolFlag::None;
-  std::vector<Symbol> Symbols{CodeCompletionSymbol, NonCodeCompletionSymbol};
-  Dex I(Symbols, RefSlab());
-  FuzzyFindRequest Req;
-  Req.AnyScope = true;
-  Req.RestrictForCodeCompletion = false;
-  EXPECT_THAT(match(I, Req), ElementsAre("Completion", "NoCompletion"));
-  Req.RestrictForCodeCompletion = true;
-  EXPECT_THAT(match(I, Req), ElementsAre("Completion"));
-}
-
-TEST(DexTest, ProximityPathsBoosting) {
-  auto RootSymbol = symbol("root::abc");
-  RootSymbol.CanonicalDeclaration.FileURI = "unittest:///file.h";
-  auto CloseSymbol = symbol("close::abc");
-  CloseSymbol.CanonicalDeclaration.FileURI = "unittest:///a/b/c/d/e/f/file.h";
-
-  std::vector<Symbol> Symbols{CloseSymbol, RootSymbol};
-  Dex I(Symbols, RefSlab());
-
-  FuzzyFindRequest Req;
-  Req.AnyScope = true;
-  Req.Query = "abc";
-  // The best candidate can change depending on the proximity paths.
-  Req.Limit = 1;
-
-  // FuzzyFind request comes from the file which is far from the root: expect
-  // CloseSymbol to come out.
-  Req.ProximityPaths = {testPath("a/b/c/d/e/f/file.h")};
-  EXPECT_THAT(match(I, Req), ElementsAre("close::abc"));
-
-  // FuzzyFind request comes from the file which is close to the root: expect
-  // RootSymbol to come out.
-  Req.ProximityPaths = {testPath("file.h")};
-  EXPECT_THAT(match(I, Req), ElementsAre("root::abc"));
-}
-
-TEST(DexTests, Refs) {
-  llvm::DenseMap<SymbolID, std::vector<Ref>> Refs;
-  auto AddRef = [&](const Symbol &Sym, const char *Filename, RefKind Kind) {
-    auto &SymbolRefs = Refs[Sym.ID];
-    SymbolRefs.emplace_back();
-    SymbolRefs.back().Kind = Kind;
-    SymbolRefs.back().Location.FileURI = Filename;
-  };
-  auto Foo = symbol("foo");
-  auto Bar = symbol("bar");
-  AddRef(Foo, "foo.h", RefKind::Declaration);
-  AddRef(Foo, "foo.cc", RefKind::Definition);
-  AddRef(Foo, "reffoo.h", RefKind::Reference);
-  AddRef(Bar, "bar.h", RefKind::Declaration);
-
-  RefsRequest Req;
-  Req.IDs.insert(Foo.ID);
-  Req.Filter = RefKind::Declaration | RefKind::Definition;
-
-  std::vector<std::string> Files;
-  Dex(std::vector<Symbol>{Foo, Bar}, Refs).refs(Req, [&](const Ref &R) {
-    Files.push_back(R.Location.FileURI);
-  });
-  EXPECT_THAT(Files, UnorderedElementsAre("foo.h", "foo.cc"));
-
-  Req.Limit = 1;
-  Files.clear();
-  Dex(std::vector<Symbol>{Foo, Bar}, Refs).refs(Req, [&](const Ref &R) {
-    Files.push_back(R.Location.FileURI);
-  });
-  EXPECT_THAT(Files, ElementsAre(AnyOf("foo.h", "foo.cc")));
-}
-
-TEST(DexTest, PreferredTypesBoosting) {
-  auto Sym1 = symbol("t1");
-  Sym1.Type = "T1";
-  auto Sym2 = symbol("t2");
-  Sym2.Type = "T2";
-
-  std::vector<Symbol> Symbols{Sym1, Sym2};
-  Dex I(Symbols, RefSlab());
-
-  FuzzyFindRequest Req;
-  Req.AnyScope = true;
-  Req.Query = "t";
-  // The best candidate can change depending on the preferred type.
-  Req.Limit = 1;
-
-  Req.PreferredTypes = {Sym1.Type};
-  EXPECT_THAT(match(I, Req), ElementsAre("t1"));
-
-  Req.PreferredTypes = {Sym2.Type};
-  EXPECT_THAT(match(I, Req), ElementsAre("t2"));
-}
-
-TEST(DexTest, TemplateSpecialization) {
-  SymbolSlab::Builder B;
-
-  Symbol S = symbol("TempSpec");
-  S.ID = SymbolID("0");
-  B.insert(S);
-
-  S = symbol("TempSpec");
-  S.ID = SymbolID("1");
-  S.TemplateSpecializationArgs = "<int, bool>";
-  S.SymInfo.Properties = static_cast<index::SymbolPropertySet>(
-      index::SymbolProperty::TemplateSpecialization);
-  B.insert(S);
-
-  S = symbol("TempSpec");
-  S.ID = SymbolID("2");
-  S.TemplateSpecializationArgs = "<int, U>";
-  S.SymInfo.Properties = static_cast<index::SymbolPropertySet>(
-      index::SymbolProperty::TemplatePartialSpecialization);
-  B.insert(S);
-
-  auto I = dex::Dex::build(std::move(B).build(), RefSlab());
-  FuzzyFindRequest Req;
-  Req.AnyScope = true;
-
-  Req.Query = "TempSpec";
-  EXPECT_THAT(match(*I, Req),
-              UnorderedElementsAre("TempSpec", "TempSpec<int, bool>",
-                                   "TempSpec<int, U>"));
-
-  // FIXME: Add filtering for template argument list.
-  Req.Query = "TempSpec<int";
-  EXPECT_THAT(match(*I, Req), IsEmpty());
-}
-
-} // namespace
-} // namespace dex
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/DiagnosticsTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/DiagnosticsTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/DiagnosticsTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/DiagnosticsTests.cpp (removed)
@@ -1,652 +0,0 @@
-//===--- DiagnosticsTests.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 "Annotations.h"
-#include "ClangdUnit.h"
-#include "Diagnostics.h"
-#include "Protocol.h"
-#include "SourceCode.h"
-#include "TestIndex.h"
-#include "TestFS.h"
-#include "TestTU.h"
-#include "index/MemIndex.h"
-#include "clang/Basic/Diagnostic.h"
-#include "clang/Basic/DiagnosticSema.h"
-#include "llvm/Support/ScopedPrinter.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-
-using testing::_;
-using testing::ElementsAre;
-using testing::Field;
-using testing::IsEmpty;
-using testing::Pair;
-using testing::UnorderedElementsAre;
-
-testing::Matcher<const Diag &> WithFix(testing::Matcher<Fix> FixMatcher) {
-  return Field(&Diag::Fixes, ElementsAre(FixMatcher));
-}
-
-testing::Matcher<const Diag &> WithFix(testing::Matcher<Fix> FixMatcher1,
-                                       testing::Matcher<Fix> FixMatcher2) {
-  return Field(&Diag::Fixes, UnorderedElementsAre(FixMatcher1, FixMatcher2));
-}
-
-testing::Matcher<const Diag &> WithNote(testing::Matcher<Note> NoteMatcher) {
-  return Field(&Diag::Notes, ElementsAre(NoteMatcher));
-}
-
-MATCHER_P2(Diag, Range, Message,
-           "Diag at " + llvm::to_string(Range) + " = [" + Message + "]") {
-  return arg.Range == Range && arg.Message == Message;
-}
-
-MATCHER_P3(Fix, Range, Replacement, Message,
-           "Fix " + llvm::to_string(Range) + " => " +
-               testing::PrintToString(Replacement) + " = [" + Message + "]") {
-  return arg.Message == Message && arg.Edits.size() == 1 &&
-         arg.Edits[0].range == Range && arg.Edits[0].newText == Replacement;
-}
-
-MATCHER_P(EqualToLSPDiag, LSPDiag,
-          "LSP diagnostic " + llvm::to_string(LSPDiag)) {
-  if (toJSON(arg) != toJSON(LSPDiag)) {
-    *result_listener << llvm::formatv("expected:\n{0:2}\ngot\n{1:2}",
-                                      toJSON(LSPDiag), toJSON(arg)).str();
-    return false;
-  }
-  return true;
-}
-
-MATCHER_P(DiagSource, S, "") { return arg.Source == S; }
-MATCHER_P(DiagName, N, "") { return arg.Name == N; }
-
-MATCHER_P(EqualToFix, Fix, "LSP fix " + llvm::to_string(Fix)) {
-  if (arg.Message != Fix.Message)
-    return false;
-  if (arg.Edits.size() != Fix.Edits.size())
-    return false;
-  for (std::size_t I = 0; I < arg.Edits.size(); ++I) {
-    if (arg.Edits[I].range != Fix.Edits[I].range ||
-        arg.Edits[I].newText != Fix.Edits[I].newText)
-      return false;
-  }
-  return true;
-}
-
-
-// Helper function to make tests shorter.
-Position pos(int line, int character) {
-  Position Res;
-  Res.line = line;
-  Res.character = character;
-  return Res;
-}
-
-TEST(DiagnosticsTest, DiagnosticRanges) {
-  // Check we report correct ranges, including various edge-cases.
-  Annotations Test(R"cpp(
-    namespace test{};
-    void $decl[[foo]]();
-    int main() {
-      $typo[[go\
-o]]();
-      foo()$semicolon[[]]//with comments
-      $unk[[unknown]]();
-      double $type[[bar]] = "foo";
-      struct Foo { int x; }; Foo a;
-      a.$nomember[[y]];
-      test::$nomembernamespace[[test]];
-    }
-  )cpp");
-  EXPECT_THAT(
-      TestTU::withCode(Test.code()).build().getDiagnostics(),
-      ElementsAre(
-          // This range spans lines.
-          AllOf(Diag(Test.range("typo"),
-                     "use of undeclared identifier 'goo'; did you mean 'foo'?"),
-                DiagSource(Diag::Clang),
-                DiagName("undeclared_var_use_suggest"),
-                WithFix(
-                    Fix(Test.range("typo"), "foo", "change 'go\\ o' to 'foo'")),
-                // This is a pretty normal range.
-                WithNote(Diag(Test.range("decl"), "'foo' declared here"))),
-          // This range is zero-width and insertion. Therefore make sure we are
-          // not expanding it into other tokens. Since we are not going to
-          // replace those.
-          AllOf(Diag(Test.range("semicolon"), "expected ';' after expression"),
-                WithFix(Fix(Test.range("semicolon"), ";", "insert ';'"))),
-          // This range isn't provided by clang, we expand to the token.
-          Diag(Test.range("unk"), "use of undeclared identifier 'unknown'"),
-          Diag(Test.range("type"),
-               "cannot initialize a variable of type 'double' with an lvalue "
-               "of type 'const char [4]'"),
-          Diag(Test.range("nomember"), "no member named 'y' in 'Foo'"),
-          Diag(Test.range("nomembernamespace"),
-               "no member named 'test' in namespace 'test'")));
-}
-
-TEST(DiagnosticsTest, FlagsMatter) {
-  Annotations Test("[[void]] main() {}");
-  auto TU = TestTU::withCode(Test.code());
-  EXPECT_THAT(TU.build().getDiagnostics(),
-              ElementsAre(AllOf(Diag(Test.range(), "'main' must return 'int'"),
-                                WithFix(Fix(Test.range(), "int",
-                                            "change 'void' to 'int'")))));
-  // Same code built as C gets different diagnostics.
-  TU.Filename = "Plain.c";
-  EXPECT_THAT(
-      TU.build().getDiagnostics(),
-      ElementsAre(AllOf(
-          Diag(Test.range(), "return type of 'main' is not 'int'"),
-          WithFix(Fix(Test.range(), "int", "change return type to 'int'")))));
-}
-
-TEST(DiagnosticsTest, DiagnosticPreamble) {
-  Annotations Test(R"cpp(
-    #include $[["not-found.h"]]
-  )cpp");
-
-  auto TU = TestTU::withCode(Test.code());
-  EXPECT_THAT(TU.build().getDiagnostics(),
-              ElementsAre(testing::AllOf(
-                  Diag(Test.range(), "'not-found.h' file not found"),
-                  DiagSource(Diag::Clang), DiagName("pp_file_not_found"))));
-}
-
-TEST(DiagnosticsTest, ClangTidy) {
-  Annotations Test(R"cpp(
-    #include $deprecated[["assert.h"]]
-
-    #define $macrodef[[SQUARE]](X) (X)*(X)
-    int main() {
-      return $doubled[[sizeof]](sizeof(int));
-      int y = 4;
-      return SQUARE($macroarg[[++]]y);
-    }
-  )cpp");
-  auto TU = TestTU::withCode(Test.code());
-  TU.HeaderFilename = "assert.h"; // Suppress "not found" error.
-  TU.ClangTidyChecks =
-      "-*, bugprone-sizeof-expression, bugprone-macro-repeated-side-effects, "
-      "modernize-deprecated-headers";
-  EXPECT_THAT(
-      TU.build().getDiagnostics(),
-      UnorderedElementsAre(
-          AllOf(Diag(Test.range("deprecated"),
-                     "inclusion of deprecated C++ header 'assert.h'; consider "
-                     "using 'cassert' instead"),
-                DiagSource(Diag::ClangTidy),
-                DiagName("modernize-deprecated-headers"),
-                WithFix(Fix(Test.range("deprecated"), "<cassert>",
-                            "change '\"assert.h\"' to '<cassert>'"))),
-          Diag(Test.range("doubled"),
-               "suspicious usage of 'sizeof(sizeof(...))'"),
-          AllOf(
-              Diag(Test.range("macroarg"),
-                   "side effects in the 1st macro argument 'X' are repeated in "
-                   "macro expansion"),
-              DiagSource(Diag::ClangTidy),
-              DiagName("bugprone-macro-repeated-side-effects"),
-              WithNote(
-                  Diag(Test.range("macrodef"), "macro 'SQUARE' defined here"))),
-          Diag(Test.range("macroarg"),
-               "multiple unsequenced modifications to 'y'")));
-}
-
-TEST(DiagnosticsTest, Preprocessor) {
-  // This looks like a preamble, but there's an #else in the middle!
-  // Check that:
-  //  - the #else doesn't generate diagnostics (we had this bug)
-  //  - we get diagnostics from the taken branch
-  //  - we get no diagnostics from the not taken branch
-  Annotations Test(R"cpp(
-    #ifndef FOO
-    #define FOO
-      int a = [[b]];
-    #else
-      int x = y;
-    #endif
-    )cpp");
-  EXPECT_THAT(
-      TestTU::withCode(Test.code()).build().getDiagnostics(),
-      ElementsAre(Diag(Test.range(), "use of undeclared identifier 'b'")));
-}
-
-TEST(DiagnosticsTest, InsideMacros) {
-  Annotations Test(R"cpp(
-    #define TEN 10
-    #define RET(x) return x + 10
-
-    int* foo() {
-      RET($foo[[0]]);
-    }
-    int* bar() {
-      return $bar[[TEN]];
-    }
-    )cpp");
-  EXPECT_THAT(TestTU::withCode(Test.code()).build().getDiagnostics(),
-              ElementsAre(Diag(Test.range("foo"),
-                               "cannot initialize return object of type "
-                               "'int *' with an rvalue of type 'int'"),
-                          Diag(Test.range("bar"),
-                               "cannot initialize return object of type "
-                               "'int *' with an rvalue of type 'int'")));
-}
-
-TEST(DiagnosticsTest, NoFixItInMacro) {
-  Annotations Test(R"cpp(
-    #define Define(name) void name() {}
-
-    [[Define]](main)
-  )cpp");
-  auto TU = TestTU::withCode(Test.code());
-  EXPECT_THAT(TU.build().getDiagnostics(),
-              ElementsAre(AllOf(Diag(Test.range(), "'main' must return 'int'"),
-                                Not(WithFix(_)))));
-}
-
-TEST(DiagnosticsTest, ToLSP) {
-  URIForFile MainFile =
-      URIForFile::canonicalize(testPath("foo/bar/main.cpp"), "");
-  URIForFile HeaderFile =
-      URIForFile::canonicalize(testPath("foo/bar/header.h"), "");
-
-  clangd::Diag D;
-  D.ID = clang::diag::err_enum_class_reference;
-  D.Name = "enum_class_reference";
-  D.Source = clangd::Diag::Clang;
-  D.Message = "something terrible happened";
-  D.Range = {pos(1, 2), pos(3, 4)};
-  D.InsideMainFile = true;
-  D.Severity = DiagnosticsEngine::Error;
-  D.File = "foo/bar/main.cpp";
-  D.AbsFile = MainFile.file();
-
-  clangd::Note NoteInMain;
-  NoteInMain.Message = "declared somewhere in the main file";
-  NoteInMain.Range = {pos(5, 6), pos(7, 8)};
-  NoteInMain.Severity = DiagnosticsEngine::Remark;
-  NoteInMain.File = "../foo/bar/main.cpp";
-  NoteInMain.InsideMainFile = true;
-  NoteInMain.AbsFile = MainFile.file();
-
-  D.Notes.push_back(NoteInMain);
-
-  clangd::Note NoteInHeader;
-  NoteInHeader.Message = "declared somewhere in the header file";
-  NoteInHeader.Range = {pos(9, 10), pos(11, 12)};
-  NoteInHeader.Severity = DiagnosticsEngine::Note;
-  NoteInHeader.File = "../foo/baz/header.h";
-  NoteInHeader.InsideMainFile = false;
-  NoteInHeader.AbsFile = HeaderFile.file();
-  D.Notes.push_back(NoteInHeader);
-
-  clangd::Fix F;
-  F.Message = "do something";
-  D.Fixes.push_back(F);
-
-  // Diagnostics should turn into these:
-  clangd::Diagnostic MainLSP;
-  MainLSP.range = D.Range;
-  MainLSP.severity = getSeverity(DiagnosticsEngine::Error);
-  MainLSP.code = "enum_class_reference";
-  MainLSP.source = "clang";
-  MainLSP.message = R"(Something terrible happened (fix available)
-
-main.cpp:6:7: remark: declared somewhere in the main file
-
-../foo/baz/header.h:10:11:
-note: declared somewhere in the header file)";
-
-  clangd::Diagnostic NoteInMainLSP;
-  NoteInMainLSP.range = NoteInMain.Range;
-  NoteInMainLSP.severity = getSeverity(DiagnosticsEngine::Remark);
-  NoteInMainLSP.message = R"(Declared somewhere in the main file
-
-main.cpp:2:3: error: something terrible happened)";
-
-  ClangdDiagnosticOptions Opts;
-  // Transform diagnostics and check the results.
-  std::vector<std::pair<clangd::Diagnostic, std::vector<clangd::Fix>>> LSPDiags;
-  toLSPDiags(D, MainFile, Opts,
-             [&](clangd::Diagnostic LSPDiag, ArrayRef<clangd::Fix> Fixes) {
-               LSPDiags.push_back(
-                   {std::move(LSPDiag),
-                    std::vector<clangd::Fix>(Fixes.begin(), Fixes.end())});
-             });
-
-  EXPECT_THAT(
-      LSPDiags,
-      ElementsAre(Pair(EqualToLSPDiag(MainLSP), ElementsAre(EqualToFix(F))),
-                  Pair(EqualToLSPDiag(NoteInMainLSP), IsEmpty())));
-  EXPECT_EQ(LSPDiags[0].first.code, "enum_class_reference");
-  EXPECT_EQ(LSPDiags[0].first.source, "clang");
-  EXPECT_EQ(LSPDiags[1].first.code, "");
-  EXPECT_EQ(LSPDiags[1].first.source, "");
-
-  // Same thing, but don't flatten notes into the main list.
-  LSPDiags.clear();
-  Opts.EmitRelatedLocations = true;
-  toLSPDiags(D, MainFile, Opts,
-             [&](clangd::Diagnostic LSPDiag, ArrayRef<clangd::Fix> Fixes) {
-               LSPDiags.push_back(
-                   {std::move(LSPDiag),
-                    std::vector<clangd::Fix>(Fixes.begin(), Fixes.end())});
-             });
-  MainLSP.message = "Something terrible happened (fix available)";
-  DiagnosticRelatedInformation NoteInMainDRI;
-  NoteInMainDRI.message = "Declared somewhere in the main file";
-  NoteInMainDRI.location.range = NoteInMain.Range;
-  NoteInMainDRI.location.uri = MainFile;
-  MainLSP.relatedInformation = {NoteInMainDRI};
-  DiagnosticRelatedInformation NoteInHeaderDRI;
-  NoteInHeaderDRI.message = "Declared somewhere in the header file";
-  NoteInHeaderDRI.location.range = NoteInHeader.Range;
-  NoteInHeaderDRI.location.uri = HeaderFile;
-  MainLSP.relatedInformation = {NoteInMainDRI, NoteInHeaderDRI};
-  EXPECT_THAT(
-      LSPDiags,
-      ElementsAre(Pair(EqualToLSPDiag(MainLSP), ElementsAre(EqualToFix(F)))));
-}
-
-struct SymbolWithHeader {
-  std::string QName;
-  std::string DeclaringFile;
-  std::string IncludeHeader;
-};
-
-std::unique_ptr<SymbolIndex>
-buildIndexWithSymbol(llvm::ArrayRef<SymbolWithHeader> Syms) {
-  SymbolSlab::Builder Slab;
-  for (const auto &S : Syms) {
-    Symbol Sym = cls(S.QName);
-    Sym.Flags |= Symbol::IndexedForCodeCompletion;
-    Sym.CanonicalDeclaration.FileURI = S.DeclaringFile.c_str();
-    Sym.Definition.FileURI = S.DeclaringFile.c_str();
-    Sym.IncludeHeaders.emplace_back(S.IncludeHeader, 1);
-    Slab.insert(Sym);
-  }
-  return MemIndex::build(std::move(Slab).build(), RefSlab());
-}
-
-TEST(IncludeFixerTest, IncompleteType) {
-  Annotations Test(R"cpp(
-$insert[[]]namespace ns {
-  class X;
-  $nested[[X::]]Nested n;
-}
-class Y : $base[[public ns::X]] {};
-int main() {
-  ns::X *x;
-  x$access[[->]]f();
-}
-  )cpp");
-  auto TU = TestTU::withCode(Test.code());
-  auto Index = buildIndexWithSymbol(
-      {SymbolWithHeader{"ns::X", "unittest:///x.h", "\"x.h\""}});
-  TU.ExternalIndex = Index.get();
-
-  EXPECT_THAT(
-      TU.build().getDiagnostics(),
-      UnorderedElementsAre(
-          AllOf(Diag(Test.range("nested"),
-                     "incomplete type 'ns::X' named in nested name specifier"),
-                WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
-                            "Add include \"x.h\" for symbol ns::X"))),
-          AllOf(Diag(Test.range("base"), "base class has incomplete type"),
-                WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
-                            "Add include \"x.h\" for symbol ns::X"))),
-          AllOf(Diag(Test.range("access"),
-                     "member access into incomplete type 'ns::X'"),
-                WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
-                            "Add include \"x.h\" for symbol ns::X")))));
-}
-
-TEST(IncludeFixerTest, NoSuggestIncludeWhenNoDefinitionInHeader) {
-  Annotations Test(R"cpp(
-$insert[[]]namespace ns {
-  class X;
-}
-class Y : $base[[public ns::X]] {};
-int main() {
-  ns::X *x;
-  x$access[[->]]f();
-}
-  )cpp");
-  auto TU = TestTU::withCode(Test.code());
-  Symbol Sym = cls("ns::X");
-  Sym.Flags |= Symbol::IndexedForCodeCompletion;
-  Sym.CanonicalDeclaration.FileURI = "unittest:///x.h";
-  Sym.Definition.FileURI = "unittest:///x.cc";
-  Sym.IncludeHeaders.emplace_back("\"x.h\"", 1);
-
-  SymbolSlab::Builder Slab;
-  Slab.insert(Sym);
-  auto Index = MemIndex::build(std::move(Slab).build(), RefSlab());
-  TU.ExternalIndex = Index.get();
-
-  EXPECT_THAT(TU.build().getDiagnostics(),
-              UnorderedElementsAre(
-                  Diag(Test.range("base"), "base class has incomplete type"),
-                  Diag(Test.range("access"),
-                       "member access into incomplete type 'ns::X'")));
-}
-
-TEST(IncludeFixerTest, Typo) {
-  Annotations Test(R"cpp(
-$insert[[]]namespace ns {
-void foo() {
-  $unqualified1[[X]] x;
-  // No fix if the unresolved type is used as specifier. (ns::)X::Nested will be
-  // considered the unresolved type.
-  $unqualified2[[X]]::Nested n;
-}
-}
-void bar() {
-  ns::$qualified1[[X]] x; // ns:: is valid.
-  ns::$qualified2[[X]](); // Error: no member in namespace
-
-  ::$global[[Global]] glob;
-}
-  )cpp");
-  auto TU = TestTU::withCode(Test.code());
-  auto Index = buildIndexWithSymbol(
-      {SymbolWithHeader{"ns::X", "unittest:///x.h", "\"x.h\""},
-       SymbolWithHeader{"Global", "unittest:///global.h", "\"global.h\""}});
-  TU.ExternalIndex = Index.get();
-
-  EXPECT_THAT(
-      TU.build().getDiagnostics(),
-      UnorderedElementsAre(
-          AllOf(Diag(Test.range("unqualified1"), "unknown type name 'X'"),
-                WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
-                            "Add include \"x.h\" for symbol ns::X"))),
-          Diag(Test.range("unqualified2"), "use of undeclared identifier 'X'"),
-          AllOf(Diag(Test.range("qualified1"),
-                     "no type named 'X' in namespace 'ns'"),
-                WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
-                            "Add include \"x.h\" for symbol ns::X"))),
-          AllOf(Diag(Test.range("qualified2"),
-                     "no member named 'X' in namespace 'ns'"),
-                WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
-                            "Add include \"x.h\" for symbol ns::X"))),
-          AllOf(Diag(Test.range("global"),
-                     "no type named 'Global' in the global namespace"),
-                WithFix(Fix(Test.range("insert"), "#include \"global.h\"\n",
-                            "Add include \"global.h\" for symbol Global")))));
-}
-
-TEST(IncludeFixerTest, MultipleMatchedSymbols) {
-  Annotations Test(R"cpp(
-$insert[[]]namespace na {
-namespace nb {
-void foo() {
-  $unqualified[[X]] x;
-}
-}
-}
-  )cpp");
-  auto TU = TestTU::withCode(Test.code());
-  auto Index = buildIndexWithSymbol(
-      {SymbolWithHeader{"na::X", "unittest:///a.h", "\"a.h\""},
-       SymbolWithHeader{"na::nb::X", "unittest:///b.h", "\"b.h\""}});
-  TU.ExternalIndex = Index.get();
-
-  EXPECT_THAT(TU.build().getDiagnostics(),
-              UnorderedElementsAre(AllOf(
-                  Diag(Test.range("unqualified"), "unknown type name 'X'"),
-                  WithFix(Fix(Test.range("insert"), "#include \"a.h\"\n",
-                              "Add include \"a.h\" for symbol na::X"),
-                          Fix(Test.range("insert"), "#include \"b.h\"\n",
-                              "Add include \"b.h\" for symbol na::nb::X")))));
-}
-
-TEST(IncludeFixerTest, NoCrashMemebrAccess) {
-  Annotations Test(R"cpp(
-    struct X { int  xyz; };
-    void g() { X x; x.$[[xy]] }
-  )cpp");
-  auto TU = TestTU::withCode(Test.code());
-  auto Index = buildIndexWithSymbol(
-      SymbolWithHeader{"na::X", "unittest:///a.h", "\"a.h\""});
-  TU.ExternalIndex = Index.get();
-
-  EXPECT_THAT(
-      TU.build().getDiagnostics(),
-      UnorderedElementsAre(Diag(Test.range(), "no member named 'xy' in 'X'")));
-}
-
-TEST(IncludeFixerTest, UseCachedIndexResults) {
-  // As index results for the identical request are cached, more than 5 fixes
-  // are generated.
-  Annotations Test(R"cpp(
-$insert[[]]void foo() {
-  $x1[[X]] x;
-  $x2[[X]] x;
-  $x3[[X]] x;
-  $x4[[X]] x;
-  $x5[[X]] x;
-  $x6[[X]] x;
-  $x7[[X]] x;
-}
-
-class X;
-void bar(X *x) {
-  x$a1[[->]]f();
-  x$a2[[->]]f();
-  x$a3[[->]]f();
-  x$a4[[->]]f();
-  x$a5[[->]]f();
-  x$a6[[->]]f();
-  x$a7[[->]]f();
-}
-  )cpp");
-  auto TU = TestTU::withCode(Test.code());
-  auto Index =
-      buildIndexWithSymbol(SymbolWithHeader{"X", "unittest:///a.h", "\"a.h\""});
-  TU.ExternalIndex = Index.get();
-
-  auto Parsed = TU.build();
-  for (const auto &D : Parsed.getDiagnostics()) {
-    EXPECT_EQ(D.Fixes.size(), 1u);
-    EXPECT_EQ(D.Fixes[0].Message,
-              std::string("Add include \"a.h\" for symbol X"));
-  }
-}
-
-TEST(IncludeFixerTest, UnresolvedNameAsSpecifier) {
-  Annotations Test(R"cpp(
-$insert[[]]namespace ns {
-}
-void g() {  ns::$[[scope]]::X_Y();  }
-  )cpp");
-  auto TU = TestTU::withCode(Test.code());
-  auto Index = buildIndexWithSymbol(
-      SymbolWithHeader{"ns::scope::X_Y", "unittest:///x.h", "\"x.h\""});
-  TU.ExternalIndex = Index.get();
-
-  EXPECT_THAT(
-      TU.build().getDiagnostics(),
-      UnorderedElementsAre(AllOf(
-          Diag(Test.range(), "no member named 'scope' in namespace 'ns'"),
-          WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
-                      "Add include \"x.h\" for symbol ns::scope::X_Y")))));
-}
-
-TEST(IncludeFixerTest, UnresolvedSpecifierWithSemaCorrection) {
-  Annotations Test(R"cpp(
-$insert[[]]namespace clang {
-void f() {
-  // "clangd::" will be corrected to "clang::" by Sema.
-  $q1[[clangd]]::$x[[X]] x;
-  $q2[[clangd]]::$ns[[ns]]::Y y;
-}
-}
-  )cpp");
-  auto TU = TestTU::withCode(Test.code());
-  auto Index = buildIndexWithSymbol(
-      {SymbolWithHeader{"clang::clangd::X", "unittest:///x.h", "\"x.h\""},
-       SymbolWithHeader{"clang::clangd::ns::Y", "unittest:///y.h", "\"y.h\""}});
-  TU.ExternalIndex = Index.get();
-
-  EXPECT_THAT(
-      TU.build().getDiagnostics(),
-      UnorderedElementsAre(
-          AllOf(
-              Diag(Test.range("q1"), "use of undeclared identifier 'clangd'; "
-                                     "did you mean 'clang'?"),
-              WithFix(_, // change clangd to clang
-                      Fix(Test.range("insert"), "#include \"x.h\"\n",
-                          "Add include \"x.h\" for symbol clang::clangd::X"))),
-          AllOf(
-              Diag(Test.range("x"), "no type named 'X' in namespace 'clang'"),
-              WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
-                          "Add include \"x.h\" for symbol clang::clangd::X"))),
-          AllOf(
-              Diag(Test.range("q2"), "use of undeclared identifier 'clangd'; "
-                                     "did you mean 'clang'?"),
-              WithFix(
-                  _, // change clangd to clangd
-                  Fix(Test.range("insert"), "#include \"y.h\"\n",
-                      "Add include \"y.h\" for symbol clang::clangd::ns::Y"))),
-          AllOf(Diag(Test.range("ns"),
-                     "no member named 'ns' in namespace 'clang'"),
-                WithFix(Fix(
-                    Test.range("insert"), "#include \"y.h\"\n",
-                    "Add include \"y.h\" for symbol clang::clangd::ns::Y")))));
-}
-
-TEST(IncludeFixerTest, SpecifiedScopeIsNamespaceAlias) {
-  Annotations Test(R"cpp(
-$insert[[]]namespace a {}
-namespace b = a;
-namespace c {
-  b::$[[X]] x;
-}
-  )cpp");
-  auto TU = TestTU::withCode(Test.code());
-  auto Index = buildIndexWithSymbol(
-      SymbolWithHeader{"a::X", "unittest:///x.h", "\"x.h\""});
-  TU.ExternalIndex = Index.get();
-
-  EXPECT_THAT(TU.build().getDiagnostics(),
-              UnorderedElementsAre(AllOf(
-                  Diag(Test.range(), "no type named 'X' in namespace 'a'"),
-                  WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
-                              "Add include \"x.h\" for symbol a::X")))));
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang
-

Removed: clang-tools-extra/trunk/unittests/clangd/DraftStoreTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/DraftStoreTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/DraftStoreTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/DraftStoreTests.cpp (removed)
@@ -1,347 +0,0 @@
-//===-- DraftStoreTests.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 "Annotations.h"
-#include "DraftStore.h"
-#include "SourceCode.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-
-struct IncrementalTestStep {
-  llvm::StringRef Src;
-  llvm::StringRef Contents;
-};
-
-int rangeLength(llvm::StringRef Code, const Range &Rng) {
-  llvm::Expected<size_t> Start = positionToOffset(Code, Rng.start);
-  llvm::Expected<size_t> End = positionToOffset(Code, Rng.end);
-  assert(Start);
-  assert(End);
-  return *End - *Start;
-}
-
-/// Send the changes one by one to updateDraft, verify the intermediate results.
-void stepByStep(llvm::ArrayRef<IncrementalTestStep> Steps) {
-  DraftStore DS;
-  Annotations InitialSrc(Steps.front().Src);
-  constexpr llvm::StringLiteral Path("/hello.cpp");
-
-  // Set the initial content.
-  DS.addDraft(Path, InitialSrc.code());
-
-  for (size_t i = 1; i < Steps.size(); i++) {
-    Annotations SrcBefore(Steps[i - 1].Src);
-    Annotations SrcAfter(Steps[i].Src);
-    llvm::StringRef Contents = Steps[i - 1].Contents;
-    TextDocumentContentChangeEvent Event{
-        SrcBefore.range(),
-        rangeLength(SrcBefore.code(), SrcBefore.range()),
-        Contents.str(),
-    };
-
-    llvm::Expected<std::string> Result = DS.updateDraft(Path, {Event});
-    ASSERT_TRUE(!!Result);
-    EXPECT_EQ(*Result, SrcAfter.code());
-    EXPECT_EQ(*DS.getDraft(Path), SrcAfter.code());
-  }
-}
-
-/// Send all the changes at once to updateDraft, check only the final result.
-void allAtOnce(llvm::ArrayRef<IncrementalTestStep> Steps) {
-  DraftStore DS;
-  Annotations InitialSrc(Steps.front().Src);
-  Annotations FinalSrc(Steps.back().Src);
-  constexpr llvm::StringLiteral Path("/hello.cpp");
-  std::vector<TextDocumentContentChangeEvent> Changes;
-
-  for (size_t i = 0; i < Steps.size() - 1; i++) {
-    Annotations Src(Steps[i].Src);
-    llvm::StringRef Contents = Steps[i].Contents;
-
-    Changes.push_back({
-        Src.range(),
-        rangeLength(Src.code(), Src.range()),
-        Contents.str(),
-    });
-  }
-
-  // Set the initial content.
-  DS.addDraft(Path, InitialSrc.code());
-
-  llvm::Expected<std::string> Result = DS.updateDraft(Path, Changes);
-
-  ASSERT_TRUE(!!Result) << llvm::toString(Result.takeError());
-  EXPECT_EQ(*Result, FinalSrc.code());
-  EXPECT_EQ(*DS.getDraft(Path), FinalSrc.code());
-}
-
-TEST(DraftStoreIncrementalUpdateTest, Simple) {
-  // clang-format off
-  IncrementalTestStep Steps[] =
-    {
-      // Replace a range
-      {
-R"cpp(static int
-hello[[World]]()
-{})cpp",
-        "Universe"
-      },
-      // Delete a range
-      {
-R"cpp(static int
-hello[[Universe]]()
-{})cpp",
-        ""
-      },
-      // Add a range
-      {
-R"cpp(static int
-hello[[]]()
-{})cpp",
-        "Monde"
-      },
-      {
-R"cpp(static int
-helloMonde()
-{})cpp",
-        ""
-      }
-    };
-  // clang-format on
-
-  stepByStep(Steps);
-  allAtOnce(Steps);
-}
-
-TEST(DraftStoreIncrementalUpdateTest, MultiLine) {
-  // clang-format off
-  IncrementalTestStep Steps[] =
-    {
-      // Replace a range
-      {
-R"cpp(static [[int
-helloWorld]]()
-{})cpp",
-R"cpp(char
-welcome)cpp"
-      },
-      // Delete a range
-      {
-R"cpp(static char[[
-welcome]]()
-{})cpp",
-        ""
-      },
-      // Add a range
-      {
-R"cpp(static char[[]]()
-{})cpp",
-        R"cpp(
-cookies)cpp"
-      },
-      // Replace the whole file
-      {
-R"cpp([[static char
-cookies()
-{}]])cpp",
-        R"cpp(#include <stdio.h>
-)cpp"
-      },
-      // Delete the whole file
-      {
-        R"cpp([[#include <stdio.h>
-]])cpp",
-        "",
-      },
-      // Add something to an empty file
-      {
-        "[[]]",
-        R"cpp(int main() {
-)cpp",
-      },
-      {
-        R"cpp(int main() {
-)cpp",
-        ""
-      }
-    };
-  // clang-format on
-
-  stepByStep(Steps);
-  allAtOnce(Steps);
-}
-
-TEST(DraftStoreIncrementalUpdateTest, WrongRangeLength) {
-  DraftStore DS;
-  Path File = "foo.cpp";
-
-  DS.addDraft(File, "int main() {}\n");
-
-  TextDocumentContentChangeEvent Change;
-  Change.range.emplace();
-  Change.range->start.line = 0;
-  Change.range->start.character = 0;
-  Change.range->end.line = 0;
-  Change.range->end.character = 2;
-  Change.rangeLength = 10;
-
-  Expected<std::string> Result = DS.updateDraft(File, {Change});
-
-  EXPECT_TRUE(!Result);
-  EXPECT_EQ(
-      toString(Result.takeError()),
-      "Change's rangeLength (10) doesn't match the computed range length (2).");
-}
-
-TEST(DraftStoreIncrementalUpdateTest, EndBeforeStart) {
-  DraftStore DS;
-  Path File = "foo.cpp";
-
-  DS.addDraft(File, "int main() {}\n");
-
-  TextDocumentContentChangeEvent Change;
-  Change.range.emplace();
-  Change.range->start.line = 0;
-  Change.range->start.character = 5;
-  Change.range->end.line = 0;
-  Change.range->end.character = 3;
-
-  Expected<std::string> Result = DS.updateDraft(File, {Change});
-
-  EXPECT_TRUE(!Result);
-  EXPECT_EQ(toString(Result.takeError()),
-            "Range's end position (0:3) is before start position (0:5)");
-}
-
-TEST(DraftStoreIncrementalUpdateTest, StartCharOutOfRange) {
-  DraftStore DS;
-  Path File = "foo.cpp";
-
-  DS.addDraft(File, "int main() {}\n");
-
-  TextDocumentContentChangeEvent Change;
-  Change.range.emplace();
-  Change.range->start.line = 0;
-  Change.range->start.character = 100;
-  Change.range->end.line = 0;
-  Change.range->end.character = 100;
-  Change.text = "foo";
-
-  Expected<std::string> Result = DS.updateDraft(File, {Change});
-
-  EXPECT_TRUE(!Result);
-  EXPECT_EQ(toString(Result.takeError()),
-            "utf-16 offset 100 is invalid for line 0");
-}
-
-TEST(DraftStoreIncrementalUpdateTest, EndCharOutOfRange) {
-  DraftStore DS;
-  Path File = "foo.cpp";
-
-  DS.addDraft(File, "int main() {}\n");
-
-  TextDocumentContentChangeEvent Change;
-  Change.range.emplace();
-  Change.range->start.line = 0;
-  Change.range->start.character = 0;
-  Change.range->end.line = 0;
-  Change.range->end.character = 100;
-  Change.text = "foo";
-
-  Expected<std::string> Result = DS.updateDraft(File, {Change});
-
-  EXPECT_TRUE(!Result);
-  EXPECT_EQ(toString(Result.takeError()),
-            "utf-16 offset 100 is invalid for line 0");
-}
-
-TEST(DraftStoreIncrementalUpdateTest, StartLineOutOfRange) {
-  DraftStore DS;
-  Path File = "foo.cpp";
-
-  DS.addDraft(File, "int main() {}\n");
-
-  TextDocumentContentChangeEvent Change;
-  Change.range.emplace();
-  Change.range->start.line = 100;
-  Change.range->start.character = 0;
-  Change.range->end.line = 100;
-  Change.range->end.character = 0;
-  Change.text = "foo";
-
-  Expected<std::string> Result = DS.updateDraft(File, {Change});
-
-  EXPECT_TRUE(!Result);
-  EXPECT_EQ(toString(Result.takeError()), "Line value is out of range (100)");
-}
-
-TEST(DraftStoreIncrementalUpdateTest, EndLineOutOfRange) {
-  DraftStore DS;
-  Path File = "foo.cpp";
-
-  DS.addDraft(File, "int main() {}\n");
-
-  TextDocumentContentChangeEvent Change;
-  Change.range.emplace();
-  Change.range->start.line = 0;
-  Change.range->start.character = 0;
-  Change.range->end.line = 100;
-  Change.range->end.character = 0;
-  Change.text = "foo";
-
-  Expected<std::string> Result = DS.updateDraft(File, {Change});
-
-  EXPECT_TRUE(!Result);
-  EXPECT_EQ(toString(Result.takeError()), "Line value is out of range (100)");
-}
-
-/// Check that if a valid change is followed by an invalid change, the original
-/// version of the document (prior to all changes) is kept.
-TEST(DraftStoreIncrementalUpdateTest, InvalidRangeInASequence) {
-  DraftStore DS;
-  Path File = "foo.cpp";
-
-  StringRef OriginalContents = "int main() {}\n";
-  DS.addDraft(File, OriginalContents);
-
-  // The valid change
-  TextDocumentContentChangeEvent Change1;
-  Change1.range.emplace();
-  Change1.range->start.line = 0;
-  Change1.range->start.character = 0;
-  Change1.range->end.line = 0;
-  Change1.range->end.character = 0;
-  Change1.text = "Hello ";
-
-  // The invalid change
-  TextDocumentContentChangeEvent Change2;
-  Change2.range.emplace();
-  Change2.range->start.line = 0;
-  Change2.range->start.character = 5;
-  Change2.range->end.line = 0;
-  Change2.range->end.character = 100;
-  Change2.text = "something";
-
-  Expected<std::string> Result = DS.updateDraft(File, {Change1, Change2});
-
-  EXPECT_TRUE(!Result);
-  EXPECT_EQ(toString(Result.takeError()),
-            "utf-16 offset 100 is invalid for line 0");
-
-  Optional<std::string> Contents = DS.getDraft(File);
-  EXPECT_TRUE(Contents);
-  EXPECT_EQ(*Contents, OriginalContents);
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/ExpectedTypeTest.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/ExpectedTypeTest.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/ExpectedTypeTest.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/ExpectedTypeTest.cpp (removed)
@@ -1,153 +0,0 @@
-//===-- ExpectedTypeTest.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 "ClangdUnit.h"
-#include "ExpectedTypes.h"
-#include "TestTU.h"
-#include "clang/AST/ASTContext.h"
-#include "clang/AST/Decl.h"
-#include "llvm/ADT/StringRef.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-
-using ::testing::Field;
-using ::testing::Matcher;
-using ::testing::SizeIs;
-using ::testing::UnorderedElementsAreArray;
-
-class ExpectedTypeConversionTest : public ::testing::Test {
-protected:
-  void build(llvm::StringRef Code) {
-    assert(!AST && "AST built twice");
-    AST = TestTU::withCode(Code).build();
-  }
-
-  const ValueDecl *decl(llvm::StringRef Name) {
-    return &cast<ValueDecl>(findDecl(*AST, Name));
-  }
-
-  QualType typeOf(llvm::StringRef Name) {
-    return decl(Name)->getType().getCanonicalType();
-  }
-
-  /// An overload for convenience.
-  llvm::Optional<OpaqueType> fromCompletionResult(const ValueDecl *D) {
-    return OpaqueType::fromCompletionResult(
-        ASTCtx(), CodeCompletionResult(D, CCP_Declaration));
-  }
-
-  /// A set of DeclNames whose type match each other computed by
-  /// OpaqueType::fromCompletionResult.
-  using EquivClass = std::set<std::string>;
-
-  Matcher<std::map<std::string, EquivClass>>
-  ClassesAre(llvm::ArrayRef<EquivClass> Classes) {
-    using MapEntry = std::map<std::string, EquivClass>::value_type;
-
-    std::vector<Matcher<MapEntry>> Elements;
-    Elements.reserve(Classes.size());
-    for (auto &Cls : Classes)
-      Elements.push_back(Field(&MapEntry::second, Cls));
-    return UnorderedElementsAreArray(Elements);
-  }
-
-  // Groups \p Decls into equivalence classes based on the result of
-  // 'OpaqueType::fromCompletionResult'.
-  std::map<std::string, EquivClass>
-  buildEquivClasses(llvm::ArrayRef<llvm::StringRef> DeclNames) {
-    std::map<std::string, EquivClass> Classes;
-    for (llvm::StringRef Name : DeclNames) {
-      auto Type = OpaqueType::fromType(ASTCtx(), typeOf(Name));
-      Classes[Type->raw()].insert(Name);
-    }
-    return Classes;
-  }
-
-  ASTContext &ASTCtx() { return AST->getASTContext(); }
-
-private:
-  // Set after calling build().
-  llvm::Optional<ParsedAST> AST;
-};
-
-TEST_F(ExpectedTypeConversionTest, BasicTypes) {
-  build(R"cpp(
-    // ints.
-    bool b;
-    int i;
-    unsigned int ui;
-    long long ll;
-
-    // floats.
-    float f;
-    double d;
-
-    // pointers
-    int* iptr;
-    bool* bptr;
-
-    // user-defined types.
-    struct X {};
-    X user_type;
-  )cpp");
-
-  EXPECT_THAT(buildEquivClasses({"b", "i", "ui", "ll", "f", "d", "iptr", "bptr",
-                                 "user_type"}),
-              ClassesAre({{"b"},
-                          {"i", "ui", "ll"},
-                          {"f", "d"},
-                          {"iptr"},
-                          {"bptr"},
-                          {"user_type"}}));
-}
-
-TEST_F(ExpectedTypeConversionTest, ReferencesDontMatter) {
-  build(R"cpp(
-    int noref;
-    int & ref = noref;
-    const int & const_ref = noref;
-    int && rv_ref = 10;
-  )cpp");
-
-  EXPECT_THAT(buildEquivClasses({"noref", "ref", "const_ref", "rv_ref"}),
-              SizeIs(1));
-}
-
-TEST_F(ExpectedTypeConversionTest, ArraysDecay) {
-  build(R"cpp(
-     int arr[2];
-     int (&arr_ref)[2] = arr;
-     int *ptr;
-  )cpp");
-
-  EXPECT_THAT(buildEquivClasses({"arr", "arr_ref", "ptr"}), SizeIs(1));
-}
-
-TEST_F(ExpectedTypeConversionTest, FunctionReturns) {
-  build(R"cpp(
-     int returns_int();
-     int* returns_ptr();
-
-     int int_;
-     int* int_ptr;
-  )cpp");
-
-  OpaqueType IntTy = *OpaqueType::fromType(ASTCtx(), typeOf("int_"));
-  EXPECT_EQ(fromCompletionResult(decl("returns_int")), IntTy);
-
-  OpaqueType IntPtrTy = *OpaqueType::fromType(ASTCtx(), typeOf("int_ptr"));
-  EXPECT_EQ(fromCompletionResult(decl("returns_ptr")), IntPtrTy);
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/FSTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/FSTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/FSTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/FSTests.cpp (removed)
@@ -1,50 +0,0 @@
-//===-- FSTests.cpp - File system related 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 "FS.h"
-#include "TestFS.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-
-TEST(FSTests, PreambleStatusCache) {
-  llvm::StringMap<std::string> Files;
-  Files["x"] = "";
-  Files["y"] = "";
-  Files["main"] = "";
-  auto FS = buildTestFS(Files);
-  FS->setCurrentWorkingDirectory(testRoot());
-
-  PreambleFileStatusCache StatCache(testPath("main"));
-  auto ProduceFS = StatCache.getProducingFS(FS);
-  EXPECT_TRUE(ProduceFS->openFileForRead("x"));
-  EXPECT_TRUE(ProduceFS->status("y"));
-  EXPECT_TRUE(ProduceFS->status("main"));
-
-  EXPECT_TRUE(StatCache.lookup(testPath("x")).hasValue());
-  EXPECT_TRUE(StatCache.lookup(testPath("y")).hasValue());
-  // Main file is not cached.
-  EXPECT_FALSE(StatCache.lookup(testPath("main")).hasValue());
-
-  llvm::vfs::Status S("fake", llvm::sys::fs::UniqueID(0, 0),
-                      std::chrono::system_clock::now(), 0, 0, 1024,
-                      llvm::sys::fs::file_type::regular_file,
-                      llvm::sys::fs::all_all);
-  StatCache.update(*FS, S);
-  auto ConsumeFS = StatCache.getConsumingFS(FS);
-  auto Cached = ConsumeFS->status(testPath("fake"));
-  EXPECT_TRUE(Cached);
-  EXPECT_EQ(Cached->getName(), S.getName());
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/FileDistanceTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/FileDistanceTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/FileDistanceTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/FileDistanceTests.cpp (removed)
@@ -1,123 +0,0 @@
-//===-- FileDistanceTests.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 "FileDistance.h"
-#include "TestFS.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-
-TEST(FileDistanceTests, Distance) {
-  FileDistanceOptions Opts;
-  Opts.UpCost = 5;
-  Opts.DownCost = 3;
-  SourceParams CostTwo;
-  CostTwo.Cost = 2;
-  FileDistance D(
-      {{"tools/clang/lib/Format/FormatToken.cpp", SourceParams()},
-       {"tools/clang/include/clang/Format/FormatToken.h", SourceParams()},
-       {"include/llvm/ADT/StringRef.h", CostTwo}},
-      Opts);
-
-  // Source
-  EXPECT_EQ(D.distance("tools/clang/lib/Format/FormatToken.cpp"), 0u);
-  EXPECT_EQ(D.distance("include/llvm/ADT/StringRef.h"), 2u);
-  // Parent
-  EXPECT_EQ(D.distance("tools/clang/lib/Format/"), 5u);
-  // Child
-  EXPECT_EQ(D.distance("tools/clang/lib/Format/FormatToken.cpp/Oops"), 3u);
-  // Ancestor (up+up+up+up)
-  EXPECT_EQ(D.distance("/"), 22u);
-  // Sibling (up+down)
-  EXPECT_EQ(D.distance("tools/clang/lib/Format/AnotherFile.cpp"), 8u);
-  // Cousin (up+up+down+down)
-  EXPECT_EQ(D.distance("include/llvm/Support/Allocator.h"), 18u);
-  // First cousin, once removed (up+up+up+down+down)
-  EXPECT_EQ(D.distance("include/llvm-c/Core.h"), 23u);
-}
-
-TEST(FileDistanceTests, BadSource) {
-  // We mustn't assume that paths above sources are best reached via them.
-  FileDistanceOptions Opts;
-  Opts.UpCost = 5;
-  Opts.DownCost = 3;
-  SourceParams CostLots;
-  CostLots.Cost = 100;
-  FileDistance D({{"a", SourceParams()}, {"b/b/b", CostLots}}, Opts);
-  EXPECT_EQ(D.distance("b"), 8u);        // a+up+down, not b+up+up
-  EXPECT_EQ(D.distance("b/b/b"), 14u);   // a+up+down+down+down, not b
-  EXPECT_EQ(D.distance("b/b/b/c"), 17u); // a+up+down+down+down+down, not b+down
-}
-
-// Force the unittest URI scheme to be linked,
-static int LLVM_ATTRIBUTE_UNUSED UseUnittestScheme = UnittestSchemeAnchorSource;
-
-TEST(FileDistanceTests, URI) {
-  FileDistanceOptions Opts;
-  Opts.UpCost = 5;
-  Opts.DownCost = 3;
-  SourceParams CostLots;
-  CostLots.Cost = 1000;
-
-  URIDistance D({{testPath("foo"), CostLots},
-                 {"/not/a/testpath", SourceParams()},
-                 {"C:\\not\\a\\testpath", SourceParams()}},
-                Opts);
-#ifdef _WIN32
-  EXPECT_EQ(D.distance("file:///C%3a/not/a/testpath/either"), 3u);
-#else
-  EXPECT_EQ(D.distance("file:///not/a/testpath/either"), 3u);
-#endif
-  EXPECT_EQ(D.distance("unittest:///foo"), 1000u);
-  EXPECT_EQ(D.distance("unittest:///bar"), 1008u);
-}
-
-TEST(FileDistance, LimitUpTraversals) {
-  FileDistanceOptions Opts;
-  Opts.UpCost = Opts.DownCost = 1;
-  SourceParams CheapButLimited, CostLots;
-  CheapButLimited.MaxUpTraversals = 1;
-  CostLots.Cost = 100;
-
-  FileDistance D({{"/", CostLots}, {"/a/b/c", CheapButLimited}}, Opts);
-  EXPECT_EQ(D.distance("/a"), 101u);
-  EXPECT_EQ(D.distance("/a/z"), 102u);
-  EXPECT_EQ(D.distance("/a/b"), 1u);
-  EXPECT_EQ(D.distance("/a/b/z"), 2u);
-}
-
-TEST(FileDistance, DisallowDownTraversalsFromRoot) {
-  FileDistanceOptions Opts;
-  Opts.UpCost = Opts.DownCost = 1;
-  Opts.AllowDownTraversalFromRoot = false;
-  SourceParams CostLots;
-  CostLots.Cost = 100;
-
-  FileDistance D({{"/", SourceParams()}, {"/a/b/c", CostLots}}, Opts);
-  EXPECT_EQ(D.distance("/"), 0u);
-  EXPECT_EQ(D.distance("/a"), 102u);
-  EXPECT_EQ(D.distance("/a/b"), 101u);
-  EXPECT_EQ(D.distance("/x"), FileDistance::Unreachable);
-}
-
-TEST(ScopeDistance, Smoke) {
-  ScopeDistance D({"x::y::z", "x::", "", "a::"});
-  EXPECT_EQ(D.distance("x::y::z::"), 0u);
-  EXPECT_GT(D.distance("x::y::"), D.distance("x::y::z::"));
-  EXPECT_GT(D.distance("x::"), D.distance("x::y::"));
-  EXPECT_GT(D.distance("x::y::z::down::"), D.distance("x::y::"));
-  EXPECT_GT(D.distance(""), D.distance("a::"));
-  EXPECT_GT(D.distance("x::"), D.distance("a::"));
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/FileIndexTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/FileIndexTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/FileIndexTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/FileIndexTests.cpp (removed)
@@ -1,371 +0,0 @@
-//===-- FileIndexTests.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 "AST.h"
-#include "Annotations.h"
-#include "ClangdUnit.h"
-#include "SyncAPI.h"
-#include "TestFS.h"
-#include "TestTU.h"
-#include "index/CanonicalIncludes.h"
-#include "index/FileIndex.h"
-#include "index/Index.h"
-#include "clang/Frontend/CompilerInvocation.h"
-#include "clang/Frontend/Utils.h"
-#include "clang/Index/IndexSymbol.h"
-#include "clang/Lex/Preprocessor.h"
-#include "clang/Tooling/CompilationDatabase.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-using testing::_;
-using testing::AllOf;
-using testing::Contains;
-using testing::ElementsAre;
-using testing::IsEmpty;
-using testing::Pair;
-using testing::UnorderedElementsAre;
-
-MATCHER_P(RefRange, Range, "") {
-  return std::make_tuple(arg.Location.Start.line(), arg.Location.Start.column(),
-                         arg.Location.End.line(), arg.Location.End.column()) ==
-         std::make_tuple(Range.start.line, Range.start.character,
-                         Range.end.line, Range.end.character);
-}
-MATCHER_P(FileURI, F, "") { return llvm::StringRef(arg.Location.FileURI) == F; }
-MATCHER_P(DeclURI, U, "") {
-  return llvm::StringRef(arg.CanonicalDeclaration.FileURI) == U;
-}
-MATCHER_P(DefURI, U, "") {
-  return llvm::StringRef(arg.Definition.FileURI) == U;
-}
-MATCHER_P(QName, N, "") { return (arg.Scope + arg.Name).str() == N; }
-
-namespace clang {
-namespace clangd {
-namespace {
-testing::Matcher<const RefSlab &>
-RefsAre(std::vector<testing::Matcher<Ref>> Matchers) {
-  return ElementsAre(testing::Pair(_, UnorderedElementsAreArray(Matchers)));
-}
-
-Symbol symbol(llvm::StringRef ID) {
-  Symbol Sym;
-  Sym.ID = SymbolID(ID);
-  Sym.Name = ID;
-  return Sym;
-}
-
-std::unique_ptr<SymbolSlab> numSlab(int Begin, int End) {
-  SymbolSlab::Builder Slab;
-  for (int i = Begin; i <= End; i++)
-    Slab.insert(symbol(std::to_string(i)));
-  return llvm::make_unique<SymbolSlab>(std::move(Slab).build());
-}
-
-std::unique_ptr<RefSlab> refSlab(const SymbolID &ID, const char *Path) {
-  RefSlab::Builder Slab;
-  Ref R;
-  R.Location.FileURI = Path;
-  R.Kind = RefKind::Reference;
-  Slab.insert(ID, R);
-  return llvm::make_unique<RefSlab>(std::move(Slab).build());
-}
-
-TEST(FileSymbolsTest, UpdateAndGet) {
-  FileSymbols FS;
-  EXPECT_THAT(runFuzzyFind(*FS.buildIndex(IndexType::Light), ""), IsEmpty());
-
-  FS.update("f1", numSlab(1, 3), refSlab(SymbolID("1"), "f1.cc"));
-  EXPECT_THAT(runFuzzyFind(*FS.buildIndex(IndexType::Light), ""),
-              UnorderedElementsAre(QName("1"), QName("2"), QName("3")));
-  EXPECT_THAT(getRefs(*FS.buildIndex(IndexType::Light), SymbolID("1")),
-              RefsAre({FileURI("f1.cc")}));
-}
-
-TEST(FileSymbolsTest, Overlap) {
-  FileSymbols FS;
-  FS.update("f1", numSlab(1, 3), nullptr);
-  FS.update("f2", numSlab(3, 5), nullptr);
-  for (auto Type : {IndexType::Light, IndexType::Heavy})
-    EXPECT_THAT(runFuzzyFind(*FS.buildIndex(Type), ""),
-                UnorderedElementsAre(QName("1"), QName("2"), QName("3"),
-                                     QName("4"), QName("5")));
-}
-
-TEST(FileSymbolsTest, MergeOverlap) {
-  FileSymbols FS;
-  auto OneSymboSlab = [](Symbol Sym) {
-    SymbolSlab::Builder S;
-    S.insert(Sym);
-    return llvm::make_unique<SymbolSlab>(std::move(S).build());
-  };
-  auto X1 = symbol("x");
-  X1.CanonicalDeclaration.FileURI = "file:///x1";
-  auto X2 = symbol("x");
-  X2.Definition.FileURI = "file:///x2";
-
-  FS.update("f1", OneSymboSlab(X1), nullptr);
-  FS.update("f2", OneSymboSlab(X2), nullptr);
-  for (auto Type : {IndexType::Light, IndexType::Heavy})
-    EXPECT_THAT(
-        runFuzzyFind(*FS.buildIndex(Type, DuplicateHandling::Merge), "x"),
-        UnorderedElementsAre(
-            AllOf(QName("x"), DeclURI("file:///x1"), DefURI("file:///x2"))));
-}
-
-TEST(FileSymbolsTest, SnapshotAliveAfterRemove) {
-  FileSymbols FS;
-
-  SymbolID ID("1");
-  FS.update("f1", numSlab(1, 3), refSlab(ID, "f1.cc"));
-
-  auto Symbols = FS.buildIndex(IndexType::Light);
-  EXPECT_THAT(runFuzzyFind(*Symbols, ""),
-              UnorderedElementsAre(QName("1"), QName("2"), QName("3")));
-  EXPECT_THAT(getRefs(*Symbols, ID), RefsAre({FileURI("f1.cc")}));
-
-  FS.update("f1", nullptr, nullptr);
-  auto Empty = FS.buildIndex(IndexType::Light);
-  EXPECT_THAT(runFuzzyFind(*Empty, ""), IsEmpty());
-  EXPECT_THAT(getRefs(*Empty, ID), ElementsAre());
-
-  EXPECT_THAT(runFuzzyFind(*Symbols, ""),
-              UnorderedElementsAre(QName("1"), QName("2"), QName("3")));
-  EXPECT_THAT(getRefs(*Symbols, ID), RefsAre({FileURI("f1.cc")}));
-}
-
-// Adds Basename.cpp, which includes Basename.h, which contains Code.
-void update(FileIndex &M, llvm::StringRef Basename, llvm::StringRef Code) {
-  TestTU File;
-  File.Filename = (Basename + ".cpp").str();
-  File.HeaderFilename = (Basename + ".h").str();
-  File.HeaderCode = Code;
-  auto AST = File.build();
-  M.updatePreamble(File.Filename, AST.getASTContext(), AST.getPreprocessorPtr(),
-                   AST.getCanonicalIncludes());
-}
-
-TEST(FileIndexTest, CustomizedURIScheme) {
-  FileIndex M;
-  update(M, "f", "class string {};");
-
-  EXPECT_THAT(runFuzzyFind(M, ""), ElementsAre(DeclURI("unittest:///f.h")));
-}
-
-TEST(FileIndexTest, IndexAST) {
-  FileIndex M;
-  update(M, "f1", "namespace ns { void f() {} class X {}; }");
-
-  FuzzyFindRequest Req;
-  Req.Query = "";
-  Req.Scopes = {"ns::"};
-  EXPECT_THAT(runFuzzyFind(M, Req),
-              UnorderedElementsAre(QName("ns::f"), QName("ns::X")));
-}
-
-TEST(FileIndexTest, NoLocal) {
-  FileIndex M;
-  update(M, "f1", "namespace ns { void f() { int local = 0; } class X {}; }");
-
-  EXPECT_THAT(
-      runFuzzyFind(M, ""),
-      UnorderedElementsAre(QName("ns"), QName("ns::f"), QName("ns::X")));
-}
-
-TEST(FileIndexTest, IndexMultiASTAndDeduplicate) {
-  FileIndex M;
-  update(M, "f1", "namespace ns { void f() {} class X {}; }");
-  update(M, "f2", "namespace ns { void ff() {} class X {}; }");
-
-  FuzzyFindRequest Req;
-  Req.Scopes = {"ns::"};
-  EXPECT_THAT(
-      runFuzzyFind(M, Req),
-      UnorderedElementsAre(QName("ns::f"), QName("ns::X"), QName("ns::ff")));
-}
-
-TEST(FileIndexTest, ClassMembers) {
-  FileIndex M;
-  update(M, "f1", "class X { static int m1; int m2; static void f(); };");
-
-  EXPECT_THAT(runFuzzyFind(M, ""),
-              UnorderedElementsAre(QName("X"), QName("X::m1"), QName("X::m2"),
-                                   QName("X::f")));
-}
-
-TEST(FileIndexTest, IncludeCollected) {
-  FileIndex M;
-  update(
-      M, "f",
-      "// IWYU pragma: private, include <the/good/header.h>\nclass string {};");
-
-  auto Symbols = runFuzzyFind(M, "");
-  EXPECT_THAT(Symbols, ElementsAre(_));
-  EXPECT_THAT(Symbols.begin()->IncludeHeaders.front().IncludeHeader,
-              "<the/good/header.h>");
-}
-
-TEST(FileIndexTest, HasSystemHeaderMappingsInPreamble) {
-  TestTU TU;
-  TU.HeaderCode = "class Foo{};";
-  TU.HeaderFilename = "algorithm";
-
-  auto Symbols = runFuzzyFind(*TU.index(), "");
-  EXPECT_THAT(Symbols, ElementsAre(_));
-  EXPECT_THAT(Symbols.begin()->IncludeHeaders.front().IncludeHeader,
-              "<algorithm>");
-}
-
-TEST(FileIndexTest, TemplateParamsInLabel) {
-  auto Source = R"cpp(
-template <class Ty>
-class vector {
-};
-
-template <class Ty, class Arg>
-vector<Ty> make_vector(Arg A) {}
-)cpp";
-
-  FileIndex M;
-  update(M, "f", Source);
-
-  auto Symbols = runFuzzyFind(M, "");
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAre(QName("vector"), QName("make_vector")));
-  auto It = Symbols.begin();
-  Symbol Vector = *It++;
-  Symbol MakeVector = *It++;
-  if (MakeVector.Name == "vector")
-    std::swap(MakeVector, Vector);
-
-  EXPECT_EQ(Vector.Signature, "<class Ty>");
-  EXPECT_EQ(Vector.CompletionSnippetSuffix, "<${1:class Ty}>");
-
-  EXPECT_EQ(MakeVector.Signature, "<class Ty>(Arg A)");
-  EXPECT_EQ(MakeVector.CompletionSnippetSuffix, "<${1:class Ty}>(${2:Arg A})");
-}
-
-TEST(FileIndexTest, RebuildWithPreamble) {
-  auto FooCpp = testPath("foo.cpp");
-  auto FooH = testPath("foo.h");
-  // Preparse ParseInputs.
-  ParseInputs PI;
-  PI.CompileCommand.Directory = testRoot();
-  PI.CompileCommand.Filename = FooCpp;
-  PI.CompileCommand.CommandLine = {"clang", "-xc++", FooCpp};
-
-  llvm::StringMap<std::string> Files;
-  Files[FooCpp] = "";
-  Files[FooH] = R"cpp(
-    namespace ns_in_header {
-      int func_in_header();
-    }
-  )cpp";
-  PI.FS = buildTestFS(std::move(Files));
-
-  PI.Contents = R"cpp(
-    #include "foo.h"
-    namespace ns_in_source {
-      int func_in_source();
-    }
-  )cpp";
-
-  // Rebuild the file.
-  auto CI = buildCompilerInvocation(PI);
-
-  FileIndex Index;
-  bool IndexUpdated = false;
-  buildPreamble(
-      FooCpp, *CI, /*OldPreamble=*/nullptr, tooling::CompileCommand(), PI,
-      /*StoreInMemory=*/true,
-      [&](ASTContext &Ctx, std::shared_ptr<Preprocessor> PP,
-          const CanonicalIncludes &CanonIncludes) {
-        EXPECT_FALSE(IndexUpdated) << "Expected only a single index update";
-        IndexUpdated = true;
-        Index.updatePreamble(FooCpp, Ctx, std::move(PP), CanonIncludes);
-      });
-  ASSERT_TRUE(IndexUpdated);
-
-  // Check the index contains symbols from the preamble, but not from the main
-  // file.
-  FuzzyFindRequest Req;
-  Req.Query = "";
-  Req.Scopes = {"", "ns_in_header::"};
-
-  EXPECT_THAT(runFuzzyFind(Index, Req),
-              UnorderedElementsAre(QName("ns_in_header"),
-                                   QName("ns_in_header::func_in_header")));
-}
-
-TEST(FileIndexTest, Refs) {
-  const char *HeaderCode = "class Foo {};";
-  Annotations MainCode(R"cpp(
-  void f() {
-    $foo[[Foo]] foo;
-  }
-  )cpp");
-
-  auto Foo =
-      findSymbol(TestTU::withHeaderCode(HeaderCode).headerSymbols(), "Foo");
-
-  RefsRequest Request;
-  Request.IDs = {Foo.ID};
-
-  FileIndex Index;
-  // Add test.cc
-  TestTU Test;
-  Test.HeaderCode = HeaderCode;
-  Test.Code = MainCode.code();
-  Test.Filename = "test.cc";
-  auto AST = Test.build();
-  Index.updateMain(Test.Filename, AST);
-  // Add test2.cc
-  TestTU Test2;
-  Test2.HeaderCode = HeaderCode;
-  Test2.Code = MainCode.code();
-  Test2.Filename = "test2.cc";
-  AST = Test2.build();
-  Index.updateMain(Test2.Filename, AST);
-
-  EXPECT_THAT(getRefs(Index, Foo.ID),
-              RefsAre({AllOf(RefRange(MainCode.range("foo")),
-                             FileURI("unittest:///test.cc")),
-                       AllOf(RefRange(MainCode.range("foo")),
-                             FileURI("unittest:///test2.cc"))}));
-}
-
-TEST(FileIndexTest, CollectMacros) {
-  FileIndex M;
-  update(M, "f", "#define CLANGD 1");
-  EXPECT_THAT(runFuzzyFind(M, ""), Contains(QName("CLANGD")));
-}
-
-TEST(FileIndexTest, ReferencesInMainFileWithPreamble) {
-  TestTU TU;
-  TU.HeaderCode = "class Foo{};";
-  Annotations Main(R"cpp(
-    #include "foo.h"
-    void f() {
-      [[Foo]] foo;
-    }
-  )cpp");
-  TU.Code = Main.code();
-  auto AST = TU.build();
-  FileIndex Index;
-  Index.updateMain(testPath(TU.Filename), AST);
-
-  // Expect to see references in main file, references in headers are excluded
-  // because we only index main AST.
-  EXPECT_THAT(getRefs(Index, findSymbol(TU.headerSymbols(), "Foo").ID),
-              RefsAre({RefRange(Main.range())}));
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/FindSymbolsTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/FindSymbolsTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/FindSymbolsTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/FindSymbolsTests.cpp (removed)
@@ -1,688 +0,0 @@
-//===-- FindSymbolsTests.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 "Annotations.h"
-#include "ClangdServer.h"
-#include "FindSymbols.h"
-#include "SyncAPI.h"
-#include "TestFS.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-
-namespace {
-
-using ::testing::AllOf;
-using ::testing::AnyOf;
-using ::testing::ElementsAre;
-using ::testing::ElementsAreArray;
-using ::testing::Field;
-using ::testing::IsEmpty;
-using ::testing::UnorderedElementsAre;
-
-class IgnoreDiagnostics : public DiagnosticsConsumer {
-  void onDiagnosticsReady(PathRef File,
-                          std::vector<Diag> Diagnostics) override {}
-};
-
-// GMock helpers for matching SymbolInfos items.
-MATCHER_P(QName, Name, "") {
-  if (arg.containerName.empty())
-    return arg.name == Name;
-  return (arg.containerName + "::" + arg.name) == Name;
-}
-MATCHER_P(WithName, N, "") { return arg.name == N; }
-MATCHER_P(WithKind, Kind, "") { return arg.kind == Kind; }
-MATCHER_P(SymRange, Range, "") { return arg.location.range == Range; }
-
-// GMock helpers for matching DocumentSymbol.
-MATCHER_P(SymNameRange, Range, "") { return arg.selectionRange == Range; }
-template <class... ChildMatchers>
-testing::Matcher<DocumentSymbol> Children(ChildMatchers... ChildrenM) {
-  return Field(&DocumentSymbol::children, ElementsAre(ChildrenM...));
-}
-
-ClangdServer::Options optsForTests() {
-  auto ServerOpts = ClangdServer::optsForTest();
-  ServerOpts.WorkspaceRoot = testRoot();
-  ServerOpts.BuildDynamicSymbolIndex = true;
-  return ServerOpts;
-}
-
-class WorkspaceSymbolsTest : public ::testing::Test {
-public:
-  WorkspaceSymbolsTest()
-      : Server(CDB, FSProvider, DiagConsumer, optsForTests()) {
-    // Make sure the test root directory is created.
-    FSProvider.Files[testPath("unused")] = "";
-    CDB.ExtraClangFlags = {"-xc++"};
-  }
-
-protected:
-  MockFSProvider FSProvider;
-  MockCompilationDatabase CDB;
-  IgnoreDiagnostics DiagConsumer;
-  ClangdServer Server;
-  int Limit = 0;
-
-  std::vector<SymbolInformation> getSymbols(llvm::StringRef Query) {
-    EXPECT_TRUE(Server.blockUntilIdleForTest()) << "Waiting for preamble";
-    auto SymbolInfos = runWorkspaceSymbols(Server, Query, Limit);
-    EXPECT_TRUE(bool(SymbolInfos)) << "workspaceSymbols returned an error";
-    return *SymbolInfos;
-  }
-
-  void addFile(llvm::StringRef FileName, llvm::StringRef Contents) {
-    auto Path = testPath(FileName);
-    FSProvider.Files[Path] = Contents;
-    Server.addDocument(Path, Contents);
-  }
-};
-
-} // namespace
-
-TEST_F(WorkspaceSymbolsTest, Macros) {
-  addFile("foo.cpp", R"cpp(
-       #define MACRO X
-       )cpp");
-
-  // LSP's SymbolKind doesn't have a "Macro" kind, and
-  // indexSymbolKindToSymbolKind() currently maps macros
-  // to SymbolKind::String.
-  EXPECT_THAT(getSymbols("macro"),
-              ElementsAre(AllOf(QName("MACRO"), WithKind(SymbolKind::String))));
-}
-
-TEST_F(WorkspaceSymbolsTest, NoLocals) {
-  addFile("foo.cpp", R"cpp(
-      void test(int FirstParam, int SecondParam) {
-        struct LocalClass {};
-        int local_var;
-      })cpp");
-  EXPECT_THAT(getSymbols("l"), IsEmpty());
-  EXPECT_THAT(getSymbols("p"), IsEmpty());
-}
-
-TEST_F(WorkspaceSymbolsTest, Globals) {
-  addFile("foo.h", R"cpp(
-      int global_var;
-
-      int global_func();
-
-      struct GlobalStruct {};)cpp");
-  addFile("foo.cpp", R"cpp(
-      #include "foo.h"
-      )cpp");
-  EXPECT_THAT(getSymbols("global"),
-              UnorderedElementsAre(
-                  AllOf(QName("GlobalStruct"), WithKind(SymbolKind::Struct)),
-                  AllOf(QName("global_func"), WithKind(SymbolKind::Function)),
-                  AllOf(QName("global_var"), WithKind(SymbolKind::Variable))));
-}
-
-TEST_F(WorkspaceSymbolsTest, Unnamed) {
-  addFile("foo.h", R"cpp(
-      struct {
-        int InUnnamed;
-      } UnnamedStruct;)cpp");
-  addFile("foo.cpp", R"cpp(
-      #include "foo.h"
-      )cpp");
-  EXPECT_THAT(getSymbols("UnnamedStruct"),
-              ElementsAre(AllOf(QName("UnnamedStruct"),
-                                WithKind(SymbolKind::Variable))));
-  EXPECT_THAT(getSymbols("InUnnamed"),
-              ElementsAre(AllOf(QName("(anonymous struct)::InUnnamed"),
-                                WithKind(SymbolKind::Field))));
-}
-
-TEST_F(WorkspaceSymbolsTest, InMainFile) {
-  addFile("foo.cpp", R"cpp(
-      int test() {}
-      static test2() {}
-      )cpp");
-  EXPECT_THAT(getSymbols("test"), ElementsAre(QName("test"), QName("test2")));
-}
-
-TEST_F(WorkspaceSymbolsTest, Namespaces) {
-  addFile("foo.h", R"cpp(
-      namespace ans1 {
-        int ai1;
-      namespace ans2 {
-        int ai2;
-      }
-      }
-      )cpp");
-  addFile("foo.cpp", R"cpp(
-      #include "foo.h"
-      )cpp");
-  EXPECT_THAT(getSymbols("a"),
-              UnorderedElementsAre(QName("ans1"), QName("ans1::ai1"),
-                                   QName("ans1::ans2"),
-                                   QName("ans1::ans2::ai2")));
-  EXPECT_THAT(getSymbols("::"), ElementsAre(QName("ans1")));
-  EXPECT_THAT(getSymbols("::a"), ElementsAre(QName("ans1")));
-  EXPECT_THAT(getSymbols("ans1::"),
-              UnorderedElementsAre(QName("ans1::ai1"), QName("ans1::ans2")));
-  EXPECT_THAT(getSymbols("::ans1"), ElementsAre(QName("ans1")));
-  EXPECT_THAT(getSymbols("::ans1::"),
-              UnorderedElementsAre(QName("ans1::ai1"), QName("ans1::ans2")));
-  EXPECT_THAT(getSymbols("::ans1::ans2"), ElementsAre(QName("ans1::ans2")));
-  EXPECT_THAT(getSymbols("::ans1::ans2::"),
-              ElementsAre(QName("ans1::ans2::ai2")));
-}
-
-TEST_F(WorkspaceSymbolsTest, AnonymousNamespace) {
-  addFile("foo.h", R"cpp(
-      namespace {
-      void test() {}
-      }
-      )cpp");
-  addFile("foo.cpp", R"cpp(
-      #include "foo.h"
-      )cpp");
-  EXPECT_THAT(getSymbols("test"), ElementsAre(QName("test")));
-}
-
-TEST_F(WorkspaceSymbolsTest, MultiFile) {
-  addFile("foo.h", R"cpp(
-      int foo() {
-      }
-      )cpp");
-  addFile("foo2.h", R"cpp(
-      int foo2() {
-      }
-      )cpp");
-  addFile("foo.cpp", R"cpp(
-      #include "foo.h"
-      #include "foo2.h"
-      )cpp");
-  EXPECT_THAT(getSymbols("foo"),
-              UnorderedElementsAre(QName("foo"), QName("foo2")));
-}
-
-TEST_F(WorkspaceSymbolsTest, GlobalNamespaceQueries) {
-  addFile("foo.h", R"cpp(
-      int foo() {
-      }
-      class Foo {
-        int a;
-      };
-      namespace ns {
-      int foo2() {
-      }
-      }
-      )cpp");
-  addFile("foo.cpp", R"cpp(
-      #include "foo.h"
-      )cpp");
-  EXPECT_THAT(getSymbols("::"),
-              UnorderedElementsAre(
-                  AllOf(QName("Foo"), WithKind(SymbolKind::Class)),
-                  AllOf(QName("foo"), WithKind(SymbolKind::Function)),
-                  AllOf(QName("ns"), WithKind(SymbolKind::Namespace))));
-  EXPECT_THAT(getSymbols(":"), IsEmpty());
-  EXPECT_THAT(getSymbols(""), IsEmpty());
-}
-
-TEST_F(WorkspaceSymbolsTest, Enums) {
-  addFile("foo.h", R"cpp(
-    enum {
-      Red
-    };
-    enum Color {
-      Green
-    };
-    enum class Color2 {
-      Yellow
-    };
-    namespace ns {
-      enum {
-        Black
-      };
-      enum Color3 {
-        Blue
-      };
-      enum class Color4 {
-        White
-      };
-    }
-      )cpp");
-  addFile("foo.cpp", R"cpp(
-      #include "foo.h"
-      )cpp");
-  EXPECT_THAT(getSymbols("Red"), ElementsAre(QName("Red")));
-  EXPECT_THAT(getSymbols("::Red"), ElementsAre(QName("Red")));
-  EXPECT_THAT(getSymbols("Green"), ElementsAre(QName("Green")));
-  EXPECT_THAT(getSymbols("Green"), ElementsAre(QName("Green")));
-  EXPECT_THAT(getSymbols("Color2::Yellow"),
-              ElementsAre(QName("Color2::Yellow")));
-  EXPECT_THAT(getSymbols("Yellow"), ElementsAre(QName("Color2::Yellow")));
-
-  EXPECT_THAT(getSymbols("ns::Black"), ElementsAre(QName("ns::Black")));
-  EXPECT_THAT(getSymbols("ns::Blue"), ElementsAre(QName("ns::Blue")));
-  EXPECT_THAT(getSymbols("ns::Color4::White"),
-              ElementsAre(QName("ns::Color4::White")));
-}
-
-TEST_F(WorkspaceSymbolsTest, Ranking) {
-  addFile("foo.h", R"cpp(
-      namespace ns{}
-      void func();
-      )cpp");
-  addFile("foo.cpp", R"cpp(
-      #include "foo.h"
-      )cpp");
-  EXPECT_THAT(getSymbols("::"), ElementsAre(QName("func"), QName("ns")));
-}
-
-TEST_F(WorkspaceSymbolsTest, WithLimit) {
-  addFile("foo.h", R"cpp(
-      int foo;
-      int foo2;
-      )cpp");
-  addFile("foo.cpp", R"cpp(
-      #include "foo.h"
-      )cpp");
-  // Foo is higher ranked because of exact name match.
-  EXPECT_THAT(getSymbols("foo"),
-              UnorderedElementsAre(
-                  AllOf(QName("foo"), WithKind(SymbolKind::Variable)),
-                  AllOf(QName("foo2"), WithKind(SymbolKind::Variable))));
-
-  Limit = 1;
-  EXPECT_THAT(getSymbols("foo"), ElementsAre(QName("foo")));
-}
-
-TEST_F(WorkspaceSymbolsTest, TempSpecs) {
-  addFile("foo.h", R"cpp(
-      template <typename T, typename U, int X = 5> class Foo {};
-      template <typename T> class Foo<int, T> {};
-      template <> class Foo<bool, int> {};
-      template <> class Foo<bool, int, 3> {};
-      )cpp");
-  // Foo is higher ranked because of exact name match.
-  EXPECT_THAT(
-      getSymbols("Foo"),
-      UnorderedElementsAre(
-          AllOf(QName("Foo"), WithKind(SymbolKind::Class)),
-          AllOf(QName("Foo<int, T>"), WithKind(SymbolKind::Class)),
-          AllOf(QName("Foo<bool, int>"), WithKind(SymbolKind::Class)),
-          AllOf(QName("Foo<bool, int, 3>"), WithKind(SymbolKind::Class))));
-}
-
-namespace {
-class DocumentSymbolsTest : public ::testing::Test {
-public:
-  DocumentSymbolsTest()
-      : Server(CDB, FSProvider, DiagConsumer, optsForTests()) {}
-
-protected:
-  MockFSProvider FSProvider;
-  MockCompilationDatabase CDB;
-  IgnoreDiagnostics DiagConsumer;
-  ClangdServer Server;
-
-  std::vector<DocumentSymbol> getSymbols(PathRef File) {
-    EXPECT_TRUE(Server.blockUntilIdleForTest()) << "Waiting for preamble";
-    auto SymbolInfos = runDocumentSymbols(Server, File);
-    EXPECT_TRUE(bool(SymbolInfos)) << "documentSymbols returned an error";
-    return *SymbolInfos;
-  }
-
-  void addFile(llvm::StringRef FilePath, llvm::StringRef Contents) {
-    FSProvider.Files[FilePath] = Contents;
-    Server.addDocument(FilePath, Contents);
-  }
-};
-} // namespace
-
-TEST_F(DocumentSymbolsTest, BasicSymbols) {
-  std::string FilePath = testPath("foo.cpp");
-  Annotations Main(R"(
-      class Foo;
-      class Foo {
-        Foo() {}
-        Foo(int a) {}
-        void $decl[[f]]();
-        friend void f1();
-        friend class Friend;
-        Foo& operator=(const Foo&);
-        ~Foo();
-        class Nested {
-        void f();
-        };
-      };
-      class Friend {
-      };
-
-      void f1();
-      inline void f2() {}
-      static const int KInt = 2;
-      const char* kStr = "123";
-
-      void f1() {}
-
-      namespace foo {
-      // Type alias
-      typedef int int32;
-      using int32_t = int32;
-
-      // Variable
-      int v1;
-
-      // Namespace
-      namespace bar {
-      int v2;
-      }
-      // Namespace alias
-      namespace baz = bar;
-
-      using bar::v2;
-      } // namespace foo
-    )");
-
-  addFile(FilePath, Main.code());
-  EXPECT_THAT(
-      getSymbols(FilePath),
-      ElementsAreArray(
-          {AllOf(WithName("Foo"), WithKind(SymbolKind::Class), Children()),
-           AllOf(WithName("Foo"), WithKind(SymbolKind::Class),
-                 Children(AllOf(WithName("Foo"), WithKind(SymbolKind::Method),
-                                Children()),
-                          AllOf(WithName("Foo"), WithKind(SymbolKind::Method),
-                                Children()),
-                          AllOf(WithName("f"), WithKind(SymbolKind::Method),
-                                Children()),
-                          AllOf(WithName("operator="),
-                                WithKind(SymbolKind::Method), Children()),
-                          AllOf(WithName("~Foo"), WithKind(SymbolKind::Method),
-                                Children()),
-                          AllOf(WithName("Nested"), WithKind(SymbolKind::Class),
-                                Children(AllOf(WithName("f"),
-                                               WithKind(SymbolKind::Method),
-                                               Children()))))),
-           AllOf(WithName("Friend"), WithKind(SymbolKind::Class), Children()),
-           AllOf(WithName("f1"), WithKind(SymbolKind::Function), Children()),
-           AllOf(WithName("f2"), WithKind(SymbolKind::Function), Children()),
-           AllOf(WithName("KInt"), WithKind(SymbolKind::Variable), Children()),
-           AllOf(WithName("kStr"), WithKind(SymbolKind::Variable), Children()),
-           AllOf(WithName("f1"), WithKind(SymbolKind::Function), Children()),
-           AllOf(WithName("foo"), WithKind(SymbolKind::Namespace),
-                 Children(
-                     AllOf(WithName("int32"), WithKind(SymbolKind::Class),
-                           Children()),
-                     AllOf(WithName("int32_t"), WithKind(SymbolKind::Class),
-                           Children()),
-                     AllOf(WithName("v1"), WithKind(SymbolKind::Variable),
-                           Children()),
-                     AllOf(WithName("bar"), WithKind(SymbolKind::Namespace),
-                           Children(AllOf(WithName("v2"),
-                                          WithKind(SymbolKind::Variable),
-                                          Children()))),
-                     AllOf(WithName("baz"), WithKind(SymbolKind::Namespace),
-                           Children()),
-                     AllOf(WithName("v2"), WithKind(SymbolKind::Namespace))))}));
-}
-
-TEST_F(DocumentSymbolsTest, DeclarationDefinition) {
-  std::string FilePath = testPath("foo.cpp");
-  Annotations Main(R"(
-      class Foo {
-        void $decl[[f]]();
-      };
-      void Foo::$def[[f]]() {
-      }
-    )");
-
-  addFile(FilePath, Main.code());
-  EXPECT_THAT(getSymbols(FilePath),
-              ElementsAre(AllOf(WithName("Foo"), WithKind(SymbolKind::Class),
-                                Children(AllOf(
-                                    WithName("f"), WithKind(SymbolKind::Method),
-                                    SymNameRange(Main.range("decl"))))),
-                          AllOf(WithName("f"), WithKind(SymbolKind::Method),
-                                SymNameRange(Main.range("def")))));
-}
-
-TEST_F(DocumentSymbolsTest, ExternSymbol) {
-  std::string FilePath = testPath("foo.cpp");
-  addFile(testPath("foo.h"), R"cpp(
-      extern int var;
-      )cpp");
-  addFile(FilePath, R"cpp(
-      #include "foo.h"
-      )cpp");
-
-  EXPECT_THAT(getSymbols(FilePath), IsEmpty());
-}
-
-TEST_F(DocumentSymbolsTest, NoLocals) {
-  std::string FilePath = testPath("foo.cpp");
-  addFile(FilePath,
-          R"cpp(
-      void test(int FirstParam, int SecondParam) {
-        struct LocalClass {};
-        int local_var;
-      })cpp");
-  EXPECT_THAT(getSymbols(FilePath), ElementsAre(WithName("test")));
-}
-
-TEST_F(DocumentSymbolsTest, Unnamed) {
-  std::string FilePath = testPath("foo.h");
-  addFile(FilePath,
-          R"cpp(
-      struct {
-        int InUnnamed;
-      } UnnamedStruct;
-      )cpp");
-  EXPECT_THAT(
-      getSymbols(FilePath),
-      ElementsAre(
-          AllOf(WithName("(anonymous struct)"), WithKind(SymbolKind::Struct),
-                Children(AllOf(WithName("InUnnamed"),
-                               WithKind(SymbolKind::Field), Children()))),
-          AllOf(WithName("UnnamedStruct"), WithKind(SymbolKind::Variable),
-                Children())));
-}
-
-TEST_F(DocumentSymbolsTest, InHeaderFile) {
-  addFile(testPath("bar.h"), R"cpp(
-      int foo() {
-      }
-      )cpp");
-  std::string FilePath = testPath("foo.h");
-  addFile(FilePath, R"cpp(
-      #include "bar.h"
-      int test() {
-      }
-      )cpp");
-  addFile(testPath("foo.cpp"), R"cpp(
-      #include "foo.h"
-      )cpp");
-  EXPECT_THAT(getSymbols(FilePath), ElementsAre(WithName("test")));
-}
-
-TEST_F(DocumentSymbolsTest, Template) {
-  std::string FilePath = testPath("foo.cpp");
-  addFile(FilePath, R"(
-    template <class T> struct Tmpl {T x = 0;};
-    template <> struct Tmpl<int> {
-      int y = 0;
-    };
-    extern template struct Tmpl<float>;
-    template struct Tmpl<double>;
-
-    template <class T, class U, class Z = float>
-    int funcTmpl(U a);
-    template <>
-    int funcTmpl<int>(double a);
-
-    template <class T, class U = double>
-    int varTmpl = T();
-    template <>
-    double varTmpl<int> = 10.0;
-  )");
-  EXPECT_THAT(
-      getSymbols(FilePath),
-      ElementsAre(
-          AllOf(WithName("Tmpl"), WithKind(SymbolKind::Struct),
-                Children(AllOf(WithName("x"), WithKind(SymbolKind::Field)))),
-          AllOf(WithName("Tmpl<int>"), WithKind(SymbolKind::Struct),
-                Children(WithName("y"))),
-          AllOf(WithName("Tmpl<float>"), WithKind(SymbolKind::Struct),
-                Children()),
-          AllOf(WithName("Tmpl<double>"), WithKind(SymbolKind::Struct),
-                Children()),
-          AllOf(WithName("funcTmpl"), Children()),
-          AllOf(WithName("funcTmpl<int>"), Children()),
-          AllOf(WithName("varTmpl"), Children()),
-          AllOf(WithName("varTmpl<int>"), Children())));
-}
-
-TEST_F(DocumentSymbolsTest, Namespaces) {
-  std::string FilePath = testPath("foo.cpp");
-  addFile(FilePath, R"cpp(
-      namespace ans1 {
-        int ai1;
-      namespace ans2 {
-        int ai2;
-      }
-      }
-      namespace {
-      void test() {}
-      }
-
-      namespace na {
-      inline namespace nb {
-      class Foo {};
-      }
-      }
-      namespace na {
-      // This is still inlined.
-      namespace nb {
-      class Bar {};
-      }
-      }
-      )cpp");
-  EXPECT_THAT(
-      getSymbols(FilePath),
-      ElementsAreArray<testing::Matcher<DocumentSymbol>>(
-          {AllOf(WithName("ans1"),
-                 Children(AllOf(WithName("ai1"), Children()),
-                          AllOf(WithName("ans2"), Children(WithName("ai2"))))),
-           AllOf(WithName("(anonymous namespace)"), Children(WithName("test"))),
-           AllOf(WithName("na"),
-                 Children(AllOf(WithName("nb"), Children(WithName("Foo"))))),
-           AllOf(WithName("na"),
-                 Children(AllOf(WithName("nb"), Children(WithName("Bar")))))}));
-}
-
-TEST_F(DocumentSymbolsTest, Enums) {
-  std::string FilePath = testPath("foo.cpp");
-  addFile(FilePath, R"(
-      enum {
-        Red
-      };
-      enum Color {
-        Green
-      };
-      enum class Color2 {
-        Yellow
-      };
-      namespace ns {
-      enum {
-        Black
-      };
-      }
-    )");
-  EXPECT_THAT(
-      getSymbols(FilePath),
-      ElementsAre(
-          AllOf(WithName("(anonymous enum)"), Children(WithName("Red"))),
-          AllOf(WithName("Color"), Children(WithName("Green"))),
-          AllOf(WithName("Color2"), Children(WithName("Yellow"))),
-          AllOf(WithName("ns"), Children(AllOf(WithName("(anonymous enum)"),
-                                               Children(WithName("Black")))))));
-}
-
-TEST_F(DocumentSymbolsTest, FromMacro) {
-  std::string FilePath = testPath("foo.cpp");
-  Annotations Main(R"(
-    #define FF(name) \
-      class name##_Test {};
-
-    $expansion[[FF]](abc);
-
-    #define FF2() \
-      class $spelling[[Test]] {};
-
-    FF2();
-  )");
-  addFile(FilePath, Main.code());
-  EXPECT_THAT(
-      getSymbols(FilePath),
-      ElementsAre(
-          AllOf(WithName("abc_Test"), SymNameRange(Main.range("expansion"))),
-          AllOf(WithName("Test"), SymNameRange(Main.range("spelling")))));
-}
-
-TEST_F(DocumentSymbolsTest, FuncTemplates) {
-  std::string FilePath = testPath("foo.cpp");
-  Annotations Source(R"cpp(
-    template <class T>
-    T foo() {}
-
-    auto x = foo<int>();
-    auto y = foo<double>()
-  )cpp");
-  addFile(FilePath, Source.code());
-  // Make sure we only see the template declaration, not instantiations.
-  EXPECT_THAT(getSymbols(FilePath),
-              ElementsAre(WithName("foo"), WithName("x"), WithName("y")));
-}
-
-TEST_F(DocumentSymbolsTest, UsingDirectives) {
-  std::string FilePath = testPath("foo.cpp");
-  Annotations Source(R"cpp(
-    namespace ns {
-      int foo;
-    }
-
-    namespace ns_alias = ns;
-
-    using namespace ::ns;     // check we don't loose qualifiers.
-    using namespace ns_alias; // and namespace aliases.
-  )cpp");
-  addFile(FilePath, Source.code());
-  EXPECT_THAT(getSymbols(FilePath),
-              ElementsAre(WithName("ns"), WithName("ns_alias"),
-                          WithName("using namespace ::ns"),
-                          WithName("using namespace ns_alias")));
-}
-
-TEST_F(DocumentSymbolsTest, TempSpecs) {
-  addFile("foo.cpp", R"cpp(
-      template <typename T, typename U, int X = 5> class Foo {};
-      template <typename T> class Foo<int, T> {};
-      template <> class Foo<bool, int> {};
-      template <> class Foo<bool, int, 3> {};
-      )cpp");
-  // Foo is higher ranked because of exact name match.
-  EXPECT_THAT(
-      getSymbols("foo.cpp"),
-      UnorderedElementsAre(
-          AllOf(WithName("Foo"), WithKind(SymbolKind::Class)),
-          AllOf(WithName("Foo<int, T>"), WithKind(SymbolKind::Class)),
-          AllOf(WithName("Foo<bool, int>"), WithKind(SymbolKind::Class)),
-          AllOf(WithName("Foo<bool, int, 3>"), WithKind(SymbolKind::Class))));
-}
-
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/FunctionTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/FunctionTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/FunctionTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/FunctionTests.cpp (removed)
@@ -1,51 +0,0 @@
-//===-- FunctionTests.cpp -------------------------------------------------===//
-//
-// 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 "Function.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-
-TEST(EventTest, Subscriptions) {
-  Event<int> E;
-  int N = 0;
-  {
-    Event<int>::Subscription SubA;
-    // No subscriptions are active.
-    E.broadcast(42);
-    EXPECT_EQ(0, N);
-
-    Event<int>::Subscription SubB = E.observe([&](int) { ++N; });
-    // Now one is active.
-    E.broadcast(42);
-    EXPECT_EQ(1, N);
-
-    SubA = E.observe([&](int) { ++N; });
-    // Both are active.
-    EXPECT_EQ(1, N);
-    E.broadcast(42);
-    EXPECT_EQ(3, N);
-
-    SubA = std::move(SubB);
-    // One is active.
-    EXPECT_EQ(3, N);
-    E.broadcast(42);
-    EXPECT_EQ(4, N);
-  }
-  // None are active.
-  EXPECT_EQ(4, N);
-  E.broadcast(42);
-  EXPECT_EQ(4, N);
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/FuzzyMatchTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/FuzzyMatchTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/FuzzyMatchTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/FuzzyMatchTests.cpp (removed)
@@ -1,312 +0,0 @@
-//===-- FuzzyMatchTests.cpp - String fuzzy matcher 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 "FuzzyMatch.h"
-
-#include "llvm/ADT/StringExtras.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-using testing::Not;
-
-struct ExpectedMatch {
-  // Annotations are optional, and will not be asserted if absent.
-  ExpectedMatch(llvm::StringRef Match) : Word(Match), Annotated(Match) {
-    for (char C : "[]")
-      Word.erase(std::remove(Word.begin(), Word.end(), C), Word.end());
-    if (Word.size() == Annotated->size())
-      Annotated = llvm::None;
-  }
-  bool accepts(llvm::StringRef ActualAnnotated) const {
-    return !Annotated || ActualAnnotated == *Annotated;
-  }
-
-  friend llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
-                                       const ExpectedMatch &M) {
-    OS << "'" << M.Word;
-    if (M.Annotated)
-      OS << "' as " << *M.Annotated;
-    return OS;
-  }
-
-  std::string Word;
-
-private:
-  llvm::Optional<llvm::StringRef> Annotated;
-};
-
-struct MatchesMatcher : public testing::MatcherInterface<llvm::StringRef> {
-  ExpectedMatch Candidate;
-  llvm::Optional<float> Score;
-  MatchesMatcher(ExpectedMatch Candidate, llvm::Optional<float> Score)
-      : Candidate(std::move(Candidate)), Score(Score) {}
-
-  void DescribeTo(::std::ostream *OS) const override {
-    llvm::raw_os_ostream(*OS) << "Matches " << Candidate;
-    if (Score)
-      *OS << " with score " << *Score;
-  }
-
-  bool MatchAndExplain(llvm::StringRef Pattern,
-                       testing::MatchResultListener *L) const override {
-    std::unique_ptr<llvm::raw_ostream> OS(
-        L->stream()
-            ? (llvm::raw_ostream *)(new llvm::raw_os_ostream(*L->stream()))
-            : new llvm::raw_null_ostream());
-    FuzzyMatcher Matcher(Pattern);
-    auto Result = Matcher.match(Candidate.Word);
-    auto AnnotatedMatch = Matcher.dumpLast(*OS << "\n");
-    return Result && Candidate.accepts(AnnotatedMatch) &&
-           (!Score || testing::Value(*Result, testing::FloatEq(*Score)));
-  }
-};
-
-// Accepts patterns that match a given word, optionally requiring a score.
-// Dumps the debug tables on match failure.
-testing::Matcher<llvm::StringRef> matches(llvm::StringRef M,
-                                          llvm::Optional<float> Score = {}) {
-  return testing::MakeMatcher<llvm::StringRef>(new MatchesMatcher(M, Score));
-}
-
-TEST(FuzzyMatch, Matches) {
-  EXPECT_THAT("", matches("unique_ptr"));
-  EXPECT_THAT("u_p", matches("[u]nique[_p]tr"));
-  EXPECT_THAT("up", matches("[u]nique_[p]tr"));
-  EXPECT_THAT("uq", Not(matches("unique_ptr")));
-  EXPECT_THAT("qp", Not(matches("unique_ptr")));
-  EXPECT_THAT("log", Not(matches("SVGFEMorphologyElement")));
-
-  EXPECT_THAT("tit", matches("win.[tit]"));
-  EXPECT_THAT("title", matches("win.[title]"));
-  EXPECT_THAT("WordCla", matches("[Word]Character[Cla]ssifier"));
-  EXPECT_THAT("WordCCla", matches("[WordC]haracter[Cla]ssifier"));
-
-  EXPECT_THAT("dete", Not(matches("editor.quickSuggestionsDelay")));
-
-  EXPECT_THAT("highlight", matches("editorHover[Highlight]"));
-  EXPECT_THAT("hhighlight", matches("editor[H]over[Highlight]"));
-  EXPECT_THAT("dhhighlight", Not(matches("editorHoverHighlight")));
-
-  EXPECT_THAT("-moz", matches("[-moz]-foo"));
-  EXPECT_THAT("moz", matches("-[moz]-foo"));
-  EXPECT_THAT("moza", matches("-[moz]-[a]nimation"));
-
-  EXPECT_THAT("ab", matches("[ab]A"));
-  EXPECT_THAT("ccm", Not(matches("cacmelCase")));
-  EXPECT_THAT("bti", Not(matches("the_black_knight")));
-  EXPECT_THAT("ccm", Not(matches("camelCase")));
-  EXPECT_THAT("cmcm", Not(matches("camelCase")));
-  EXPECT_THAT("BK", matches("the_[b]lack_[k]night"));
-  EXPECT_THAT("KeyboardLayout=", Not(matches("KeyboardLayout")));
-  EXPECT_THAT("LLL", matches("SVisual[L]ogger[L]ogs[L]ist"));
-  EXPECT_THAT("LLLL", Not(matches("SVilLoLosLi")));
-  EXPECT_THAT("LLLL", Not(matches("SVisualLoggerLogsList")));
-  EXPECT_THAT("TEdit", matches("[T]ext[Edit]"));
-  EXPECT_THAT("TEdit", matches("[T]ext[Edit]or"));
-  EXPECT_THAT("TEdit", Not(matches("[T]ext[edit]")));
-  EXPECT_THAT("TEdit", matches("[t]ext_[edit]"));
-  EXPECT_THAT("TEditDt", matches("[T]ext[Edit]or[D]ecoration[T]ype"));
-  EXPECT_THAT("TEdit", matches("[T]ext[Edit]orDecorationType"));
-  EXPECT_THAT("Tedit", matches("[T]ext[Edit]"));
-  EXPECT_THAT("ba", Not(matches("?AB?")));
-  EXPECT_THAT("bkn", matches("the_[b]lack_[kn]ight"));
-  EXPECT_THAT("bt", Not(matches("the_[b]lack_knigh[t]")));
-  EXPECT_THAT("ccm", Not(matches("[c]amelCase[cm]")));
-  EXPECT_THAT("fdm", Not(matches("[f]in[dM]odel")));
-  EXPECT_THAT("fob", Not(matches("[fo]o[b]ar")));
-  EXPECT_THAT("fobz", Not(matches("foobar")));
-  EXPECT_THAT("foobar", matches("[foobar]"));
-  EXPECT_THAT("form", matches("editor.[form]atOnSave"));
-  EXPECT_THAT("g p", matches("[G]it:[ P]ull"));
-  EXPECT_THAT("g p", matches("[G]it:[ P]ull"));
-  EXPECT_THAT("gip", matches("[Gi]t: [P]ull"));
-  EXPECT_THAT("gip", matches("[Gi]t: [P]ull"));
-  EXPECT_THAT("gp", matches("[G]it: [P]ull"));
-  EXPECT_THAT("gp", matches("[G]it_Git_[P]ull"));
-  EXPECT_THAT("is", matches("[I]mport[S]tatement"));
-  EXPECT_THAT("is", matches("[is]Valid"));
-  EXPECT_THAT("lowrd", Not(matches("[low]Wo[rd]")));
-  EXPECT_THAT("myvable", Not(matches("[myva]ria[ble]")));
-  EXPECT_THAT("no", Not(matches("")));
-  EXPECT_THAT("no", Not(matches("match")));
-  EXPECT_THAT("ob", Not(matches("foobar")));
-  EXPECT_THAT("sl", matches("[S]Visual[L]oggerLogsList"));
-  EXPECT_THAT("sllll", matches("[S]Visua[L]ogger[Ll]ama[L]ist"));
-  EXPECT_THAT("THRE", matches("H[T]ML[HRE]lement"));
-  EXPECT_THAT("b", Not(matches("NDEBUG")));
-  EXPECT_THAT("Three", matches("[Three]"));
-  EXPECT_THAT("fo", Not(matches("barfoo")));
-  EXPECT_THAT("fo", matches("bar_[fo]o"));
-  EXPECT_THAT("fo", matches("bar_[Fo]o"));
-  EXPECT_THAT("fo", matches("bar [fo]o"));
-  EXPECT_THAT("fo", matches("bar.[fo]o"));
-  EXPECT_THAT("fo", matches("bar/[fo]o"));
-  EXPECT_THAT("fo", matches("bar\\[fo]o"));
-
-  EXPECT_THAT(
-      "aaaaaa",
-      matches("[aaaaaa]aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-              "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
-  EXPECT_THAT("baba", Not(matches("ababababab")));
-  EXPECT_THAT("fsfsfs", Not(matches("dsafdsafdsafdsafdsafdsafdsafasdfdsa")));
-  EXPECT_THAT("fsfsfsfsfsfsfsf",
-              Not(matches("dsafdsafdsafdsafdsafdsafdsafasdfdsafdsafdsafdsafdsfd"
-                          "safdsfdfdfasdnfdsajfndsjnafjndsajlknfdsa")));
-
-  EXPECT_THAT("  g", matches("[  g]roup"));
-  EXPECT_THAT("g", matches("  [g]roup"));
-  EXPECT_THAT("g g", Not(matches("  groupGroup")));
-  EXPECT_THAT("g g", matches("  [g]roup[ G]roup"));
-  EXPECT_THAT(" g g", matches("[ ] [g]roup[ G]roup"));
-  EXPECT_THAT("zz", matches("[zz]Group"));
-  EXPECT_THAT("zzg", matches("[zzG]roup"));
-  EXPECT_THAT("g", matches("zz[G]roup"));
-
-  EXPECT_THAT("aaaa", matches("_a_[aaaa]")); // Prefer consecutive.
-  // These would ideally match, but would need special segmentation rules.
-  EXPECT_THAT("printf", Not(matches("s[printf]")));
-  EXPECT_THAT("str", Not(matches("o[str]eam")));
-  EXPECT_THAT("strcpy", Not(matches("strncpy")));
-  EXPECT_THAT("std", Not(matches("PTHREAD_MUTEX_STALLED")));
-  EXPECT_THAT("std", Not(matches("pthread_condattr_setpshared")));
-}
-
-struct RankMatcher : public testing::MatcherInterface<llvm::StringRef> {
-  std::vector<ExpectedMatch> RankedStrings;
-  RankMatcher(std::initializer_list<ExpectedMatch> RankedStrings)
-      : RankedStrings(RankedStrings) {}
-
-  void DescribeTo(::std::ostream *OS) const override {
-    llvm::raw_os_ostream O(*OS);
-    O << "Ranks strings in order: [";
-    for (const auto &Str : RankedStrings)
-      O << "\n\t" << Str;
-    O << "\n]";
-  }
-
-  bool MatchAndExplain(llvm::StringRef Pattern,
-                       testing::MatchResultListener *L) const override {
-    std::unique_ptr<llvm::raw_ostream> OS(
-        L->stream()
-            ? (llvm::raw_ostream *)(new llvm::raw_os_ostream(*L->stream()))
-            : new llvm::raw_null_ostream());
-    FuzzyMatcher Matcher(Pattern);
-    const ExpectedMatch *LastMatch;
-    llvm::Optional<float> LastScore;
-    bool Ok = true;
-    for (const auto &Str : RankedStrings) {
-      auto Score = Matcher.match(Str.Word);
-      if (!Score) {
-        *OS << "\nDoesn't match '" << Str.Word << "'";
-        Matcher.dumpLast(*OS << "\n");
-        Ok = false;
-      } else {
-        std::string Buf;
-        llvm::raw_string_ostream Info(Buf);
-        auto AnnotatedMatch = Matcher.dumpLast(Info);
-
-        if (!Str.accepts(AnnotatedMatch)) {
-          *OS << "\nDoesn't match " << Str << ", but " << AnnotatedMatch << "\n"
-              << Info.str();
-          Ok = false;
-        } else if (LastScore && *LastScore < *Score) {
-          *OS << "\nRanks '" << Str.Word << "'=" << *Score << " above '"
-              << LastMatch->Word << "'=" << *LastScore << "\n"
-              << Info.str();
-          Matcher.match(LastMatch->Word);
-          Matcher.dumpLast(*OS << "\n");
-          Ok = false;
-        }
-      }
-      LastMatch = &Str;
-      LastScore = Score;
-    }
-    return Ok;
-  }
-};
-
-// Accepts patterns that match all the strings and rank them in the given order.
-// Dumps the debug tables on match failure.
-template <typename... T>
-testing::Matcher<llvm::StringRef> ranks(T... RankedStrings) {
-  return testing::MakeMatcher<llvm::StringRef>(
-      new RankMatcher{ExpectedMatch(RankedStrings)...});
-}
-
-TEST(FuzzyMatch, Ranking) {
-  EXPECT_THAT("cons",
-              ranks("[cons]ole", "[Cons]ole", "ArrayBuffer[Cons]tructor"));
-  EXPECT_THAT("foo", ranks("[foo]", "[Foo]"));
-  EXPECT_THAT("onMes",
-              ranks("[onMes]sage", "[onmes]sage", "[on]This[M]ega[Es]capes"));
-  EXPECT_THAT("onmes",
-              ranks("[onmes]sage", "[onMes]sage", "[on]This[M]ega[Es]capes"));
-  EXPECT_THAT("CC", ranks("[C]amel[C]ase", "[c]amel[C]ase"));
-  EXPECT_THAT("cC", ranks("[c]amel[C]ase", "[C]amel[C]ase"));
-  EXPECT_THAT("p", ranks("[p]", "[p]arse", "[p]osix", "[p]afdsa", "[p]ath"));
-  EXPECT_THAT("pa", ranks("[pa]rse", "[pa]th", "[pa]fdsa"));
-  EXPECT_THAT("log", ranks("[log]", "Scroll[Log]icalPosition"));
-  EXPECT_THAT("e", ranks("[e]lse", "Abstract[E]lement"));
-  EXPECT_THAT("workbench.sideb",
-              ranks("[workbench.sideB]ar.location",
-                    "[workbench.]editor.default[SideB]ySideLayout"));
-  EXPECT_THAT("editor.r", ranks("[editor.r]enderControlCharacter",
-                                "[editor.]overview[R]ulerlanes",
-                                "diff[Editor.r]enderSideBySide"));
-  EXPECT_THAT("-mo", ranks("[-mo]z-columns", "[-]ms-ime-[mo]de"));
-  EXPECT_THAT("convertModelPosition",
-              ranks("[convertModelPosition]ToViewPosition",
-                    "[convert]ViewTo[ModelPosition]"));
-  EXPECT_THAT("is", ranks("[is]ValidViewletId", "[i]mport [s]tatement"));
-  EXPECT_THAT("strcpy", ranks("[strcpy]", "[strcpy]_s"));
-}
-
-// Verify some bounds so we know scores fall in the right range.
-// Testing exact scores is fragile, so we prefer Ranking tests.
-TEST(FuzzyMatch, Scoring) {
-  EXPECT_THAT("abs", matches("[a]w[B]xYz[S]", 7.f / 12.f));
-  EXPECT_THAT("abs", matches("[abs]l", 1.f));
-  EXPECT_THAT("abs", matches("[abs]", 2.f));
-  EXPECT_THAT("Abs", matches("[abs]", 2.f));
-}
-
-TEST(FuzzyMatch, InitialismAndPrefix) {
-  // We want these scores to be roughly the same.
-  EXPECT_THAT("up", matches("[u]nique_[p]tr", 3.f / 4.f));
-  EXPECT_THAT("up", matches("[up]per_bound", 1.f));
-}
-
-// Returns pretty-printed segmentation of Text.
-// e.g. std::basic_string --> +--  +---- +-----
-std::string segment(llvm::StringRef Text) {
-  std::vector<CharRole> Roles(Text.size());
-  calculateRoles(Text, Roles);
-  std::string Printed;
-  for (unsigned I = 0; I < Text.size(); ++I)
-    Printed.push_back("?-+ "[static_cast<unsigned>(Roles[I])]);
-  return Printed;
-}
-
-// this is a no-op hack so clang-format will vertically align our testcases.
-llvm::StringRef returns(llvm::StringRef Text) { return Text; }
-
-TEST(FuzzyMatch, Segmentation) {
-  EXPECT_THAT(segment("std::basic_string"), //
-              returns("+--  +---- +-----"));
-  EXPECT_THAT(segment("XMLHttpRequest"), //
-              returns("+--+---+------"));
-  EXPECT_THAT(segment("t3h PeNgU1N oF d00m!!!!!!!!"), //
-              returns("+-- +-+-+-+ ++ +---        "));
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/GlobalCompilationDatabaseTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/GlobalCompilationDatabaseTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/GlobalCompilationDatabaseTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/GlobalCompilationDatabaseTests.cpp (removed)
@@ -1,151 +0,0 @@
-//===-- GlobalCompilationDatabaseTests.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 "GlobalCompilationDatabase.h"
-
-#include "TestFS.h"
-#include "llvm/ADT/StringExtras.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-using ::testing::AllOf;
-using ::testing::Contains;
-using ::testing::ElementsAre;
-using ::testing::EndsWith;
-using ::testing::Not;
-
-TEST(GlobalCompilationDatabaseTest, FallbackCommand) {
-  DirectoryBasedGlobalCompilationDatabase DB(None);
-  auto Cmd = DB.getFallbackCommand(testPath("foo/bar.cc"));
-  EXPECT_EQ(Cmd.Directory, testPath("foo"));
-  EXPECT_THAT(Cmd.CommandLine,
-              ElementsAre(EndsWith("clang"), testPath("foo/bar.cc")));
-  EXPECT_EQ(Cmd.Output, "");
-
-  // .h files have unknown language, so they are parsed liberally as obj-c++.
-  Cmd = DB.getFallbackCommand(testPath("foo/bar.h"));
-  EXPECT_THAT(Cmd.CommandLine,
-              ElementsAre(EndsWith("clang"), "-xobjective-c++-header",
-                          testPath("foo/bar.h")));
-}
-
-static tooling::CompileCommand cmd(llvm::StringRef File, llvm::StringRef Arg) {
-  return tooling::CompileCommand(testRoot(), File, {"clang", Arg, File}, "");
-}
-
-class OverlayCDBTest : public ::testing::Test {
-  class BaseCDB : public GlobalCompilationDatabase {
-  public:
-    llvm::Optional<tooling::CompileCommand>
-    getCompileCommand(llvm::StringRef File,
-                      ProjectInfo *Project) const override {
-      if (File == testPath("foo.cc")) {
-        if (Project)
-          Project->SourceRoot = testRoot();
-        return cmd(File, "-DA=1");
-      }
-      return None;
-    }
-
-    tooling::CompileCommand
-    getFallbackCommand(llvm::StringRef File) const override {
-      return cmd(File, "-DA=2");
-    }
-  };
-
-protected:
-  OverlayCDBTest() : Base(llvm::make_unique<BaseCDB>()) {}
-  std::unique_ptr<GlobalCompilationDatabase> Base;
-};
-
-TEST_F(OverlayCDBTest, GetCompileCommand) {
-  OverlayCDB CDB(Base.get(), {}, std::string(""));
-  EXPECT_THAT(CDB.getCompileCommand(testPath("foo.cc"))->CommandLine,
-              AllOf(Contains(testPath("foo.cc")), Contains("-DA=1")));
-  EXPECT_EQ(CDB.getCompileCommand(testPath("missing.cc")), llvm::None);
-
-  auto Override = cmd(testPath("foo.cc"), "-DA=3");
-  CDB.setCompileCommand(testPath("foo.cc"), Override);
-  EXPECT_THAT(CDB.getCompileCommand(testPath("foo.cc"))->CommandLine,
-              Contains("-DA=3"));
-  EXPECT_EQ(CDB.getCompileCommand(testPath("missing.cc")), llvm::None);
-  CDB.setCompileCommand(testPath("missing.cc"), Override);
-  EXPECT_THAT(CDB.getCompileCommand(testPath("missing.cc"))->CommandLine,
-              Contains("-DA=3"));
-}
-
-TEST_F(OverlayCDBTest, GetFallbackCommand) {
-  OverlayCDB CDB(Base.get(), {"-DA=4"});
-  EXPECT_THAT(CDB.getFallbackCommand(testPath("bar.cc")).CommandLine,
-              ElementsAre("clang", "-DA=2", testPath("bar.cc"), "-DA=4"));
-}
-
-TEST_F(OverlayCDBTest, NoBase) {
-  OverlayCDB CDB(nullptr, {"-DA=6"}, std::string(""));
-  EXPECT_EQ(CDB.getCompileCommand(testPath("bar.cc")), None);
-  auto Override = cmd(testPath("bar.cc"), "-DA=5");
-  CDB.setCompileCommand(testPath("bar.cc"), Override);
-  EXPECT_THAT(CDB.getCompileCommand(testPath("bar.cc"))->CommandLine,
-              Contains("-DA=5"));
-
-  EXPECT_THAT(CDB.getFallbackCommand(testPath("foo.cc")).CommandLine,
-              ElementsAre(EndsWith("clang"), testPath("foo.cc"), "-DA=6"));
-}
-
-TEST_F(OverlayCDBTest, Watch) {
-  OverlayCDB Inner(nullptr);
-  OverlayCDB Outer(&Inner);
-
-  std::vector<std::vector<std::string>> Changes;
-  auto Sub = Outer.watch([&](const std::vector<std::string> &ChangedFiles) {
-    Changes.push_back(ChangedFiles);
-  });
-
-  Inner.setCompileCommand("A.cpp", tooling::CompileCommand());
-  Outer.setCompileCommand("B.cpp", tooling::CompileCommand());
-  Inner.setCompileCommand("A.cpp", llvm::None);
-  Outer.setCompileCommand("C.cpp", llvm::None);
-  EXPECT_THAT(Changes, ElementsAre(ElementsAre("A.cpp"), ElementsAre("B.cpp"),
-                                   ElementsAre("A.cpp"), ElementsAre("C.cpp")));
-}
-
-TEST_F(OverlayCDBTest, Adjustments) {
-  OverlayCDB CDB(Base.get(), {}, std::string(""));
-  auto Cmd = CDB.getCompileCommand(testPath("foo.cc")).getValue();
-  // Delete the file name.
-  Cmd.CommandLine.pop_back();
-
-  // Check dependency file commands are dropped.
-  Cmd.CommandLine.push_back("-MF");
-  Cmd.CommandLine.push_back("random-dependency");
-
-  // Check plugin-related commands are dropped.
-  Cmd.CommandLine.push_back("-Xclang");
-  Cmd.CommandLine.push_back("-load");
-  Cmd.CommandLine.push_back("-Xclang");
-  Cmd.CommandLine.push_back("random-plugin");
-
-  Cmd.CommandLine.push_back("-DA=5");
-  Cmd.CommandLine.push_back(Cmd.Filename);
-
-  CDB.setCompileCommand(testPath("foo.cc"), Cmd);
-
-  EXPECT_THAT(CDB.getCompileCommand(testPath("foo.cc"))->CommandLine,
-              AllOf(Contains("-fsyntax-only"), Contains("-DA=5"),
-                    Contains(testPath("foo.cc")), Not(Contains("-MF")),
-                    Not(Contains("random-dependency")),
-                    Not(Contains("-Xclang")), Not(Contains("-load")),
-                    Not(Contains("random-plugin"))));
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/HeadersTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/HeadersTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/HeadersTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/HeadersTests.cpp (removed)
@@ -1,279 +0,0 @@
-//===-- HeadersTests.cpp - Include headers unit 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 "Headers.h"
-
-#include "Compiler.h"
-#include "TestFS.h"
-#include "TestTU.h"
-#include "clang/Frontend/CompilerInstance.h"
-#include "clang/Frontend/CompilerInvocation.h"
-#include "clang/Frontend/FrontendActions.h"
-#include "clang/Lex/PreprocessorOptions.h"
-#include "llvm/Support/Path.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-
-using ::testing::AllOf;
-using ::testing::ElementsAre;
-using ::testing::UnorderedElementsAre;
-
-class HeadersTest : public ::testing::Test {
-public:
-  HeadersTest() {
-    CDB.ExtraClangFlags = {SearchDirArg.c_str()};
-    FS.Files[MainFile] = "";
-    // Make sure directory sub/ exists.
-    FS.Files[testPath("sub/EMPTY")] = "";
-  }
-
-private:
-  std::unique_ptr<CompilerInstance> setupClang() {
-    auto Cmd = CDB.getCompileCommand(MainFile);
-    assert(static_cast<bool>(Cmd));
-    auto VFS = FS.getFileSystem();
-    VFS->setCurrentWorkingDirectory(Cmd->Directory);
-
-    ParseInputs PI;
-    PI.CompileCommand = *Cmd;
-    PI.FS = VFS;
-    auto CI = buildCompilerInvocation(PI);
-    EXPECT_TRUE(static_cast<bool>(CI));
-    // The diagnostic options must be set before creating a CompilerInstance.
-    CI->getDiagnosticOpts().IgnoreWarnings = true;
-    auto Clang = prepareCompilerInstance(
-        std::move(CI), /*Preamble=*/nullptr,
-        llvm::MemoryBuffer::getMemBuffer(FS.Files[MainFile], MainFile), VFS,
-        IgnoreDiags);
-
-    EXPECT_FALSE(Clang->getFrontendOpts().Inputs.empty());
-    return Clang;
-  }
-
-protected:
-  IncludeStructure collectIncludes() {
-    auto Clang = setupClang();
-    PreprocessOnlyAction Action;
-    EXPECT_TRUE(
-        Action.BeginSourceFile(*Clang, Clang->getFrontendOpts().Inputs[0]));
-    IncludeStructure Includes;
-    Clang->getPreprocessor().addPPCallbacks(
-        collectIncludeStructureCallback(Clang->getSourceManager(), &Includes));
-    EXPECT_TRUE(Action.Execute());
-    Action.EndSourceFile();
-    return Includes;
-  }
-
-  // Calculates the include path, or returns "" on error or header should not be
-  // inserted.
-  std::string calculate(PathRef Original, PathRef Preferred = "",
-                        const std::vector<Inclusion> &Inclusions = {}) {
-    auto Clang = setupClang();
-    PreprocessOnlyAction Action;
-    EXPECT_TRUE(
-        Action.BeginSourceFile(*Clang, Clang->getFrontendOpts().Inputs[0]));
-
-    if (Preferred.empty())
-      Preferred = Original;
-    auto ToHeaderFile = [](llvm::StringRef Header) {
-      return HeaderFile{Header,
-                        /*Verbatim=*/!llvm::sys::path::is_absolute(Header)};
-    };
-
-    IncludeInserter Inserter(MainFile, /*Code=*/"", format::getLLVMStyle(),
-                             CDB.getCompileCommand(MainFile)->Directory,
-                             &Clang->getPreprocessor().getHeaderSearchInfo());
-    for (const auto &Inc : Inclusions)
-      Inserter.addExisting(Inc);
-    auto Inserted = ToHeaderFile(Preferred);
-    if (!Inserter.shouldInsertInclude(Original, Inserted))
-      return "";
-    std::string Path = Inserter.calculateIncludePath(Inserted);
-    Action.EndSourceFile();
-    return Path;
-  }
-
-  llvm::Optional<TextEdit> insert(llvm::StringRef VerbatimHeader) {
-    auto Clang = setupClang();
-    PreprocessOnlyAction Action;
-    EXPECT_TRUE(
-        Action.BeginSourceFile(*Clang, Clang->getFrontendOpts().Inputs[0]));
-
-    IncludeInserter Inserter(MainFile, /*Code=*/"", format::getLLVMStyle(),
-                             CDB.getCompileCommand(MainFile)->Directory,
-                             &Clang->getPreprocessor().getHeaderSearchInfo());
-    auto Edit = Inserter.insert(VerbatimHeader);
-    Action.EndSourceFile();
-    return Edit;
-  }
-
-  MockFSProvider FS;
-  MockCompilationDatabase CDB;
-  std::string MainFile = testPath("main.cpp");
-  std::string Subdir = testPath("sub");
-  std::string SearchDirArg = (llvm::Twine("-I") + Subdir).str();
-  IgnoringDiagConsumer IgnoreDiags;
-};
-
-MATCHER_P(Written, Name, "") { return arg.Written == Name; }
-MATCHER_P(Resolved, Name, "") { return arg.Resolved == Name; }
-MATCHER_P(IncludeLine, N, "") { return arg.R.start.line == N; }
-
-MATCHER_P2(Distance, File, D, "") {
-  if (arg.getKey() != File)
-    *result_listener << "file =" << arg.getKey().str();
-  if (arg.getValue() != D)
-    *result_listener << "distance =" << arg.getValue();
-  return arg.getKey() == File && arg.getValue() == D;
-}
-
-TEST_F(HeadersTest, CollectRewrittenAndResolved) {
-  FS.Files[MainFile] = R"cpp(
-#include "sub/bar.h" // not shortest
-)cpp";
-  std::string BarHeader = testPath("sub/bar.h");
-  FS.Files[BarHeader] = "";
-
-  EXPECT_THAT(collectIncludes().MainFileIncludes,
-              UnorderedElementsAre(
-                  AllOf(Written("\"sub/bar.h\""), Resolved(BarHeader))));
-  EXPECT_THAT(collectIncludes().includeDepth(MainFile),
-              UnorderedElementsAre(Distance(MainFile, 0u),
-                                   Distance(testPath("sub/bar.h"), 1u)));
-}
-
-TEST_F(HeadersTest, OnlyCollectInclusionsInMain) {
-  std::string BazHeader = testPath("sub/baz.h");
-  FS.Files[BazHeader] = "";
-  std::string BarHeader = testPath("sub/bar.h");
-  FS.Files[BarHeader] = R"cpp(
-#include "baz.h"
-)cpp";
-  FS.Files[MainFile] = R"cpp(
-#include "bar.h"
-)cpp";
-  EXPECT_THAT(
-      collectIncludes().MainFileIncludes,
-      UnorderedElementsAre(AllOf(Written("\"bar.h\""), Resolved(BarHeader))));
-  EXPECT_THAT(collectIncludes().includeDepth(MainFile),
-              UnorderedElementsAre(Distance(MainFile, 0u),
-                                   Distance(testPath("sub/bar.h"), 1u),
-                                   Distance(testPath("sub/baz.h"), 2u)));
-  // includeDepth() also works for non-main files.
-  EXPECT_THAT(collectIncludes().includeDepth(testPath("sub/bar.h")),
-              UnorderedElementsAre(Distance(testPath("sub/bar.h"), 0u),
-                                   Distance(testPath("sub/baz.h"), 1u)));
-}
-
-TEST_F(HeadersTest, PreambleIncludesPresentOnce) {
-  // We use TestTU here, to ensure we use the preamble replay logic.
-  // We're testing that the logic doesn't crash, and doesn't result in duplicate
-  // includes. (We'd test more directly, but it's pretty well encapsulated!)
-  auto TU = TestTU::withCode(R"cpp(
-    #include "a.h"
-    #include "a.h"
-    void foo();
-    #include "a.h"
-  )cpp");
-  TU.HeaderFilename = "a.h"; // suppress "not found".
-  EXPECT_THAT(TU.build().getIncludeStructure().MainFileIncludes,
-              ElementsAre(IncludeLine(1), IncludeLine(2), IncludeLine(4)));
-}
-
-TEST_F(HeadersTest, UnResolvedInclusion) {
-  FS.Files[MainFile] = R"cpp(
-#include "foo.h"
-)cpp";
-
-  EXPECT_THAT(collectIncludes().MainFileIncludes,
-              UnorderedElementsAre(AllOf(Written("\"foo.h\""), Resolved(""))));
-  EXPECT_THAT(collectIncludes().includeDepth(MainFile),
-              UnorderedElementsAre(Distance(MainFile, 0u)));
-}
-
-TEST_F(HeadersTest, InsertInclude) {
-  std::string Path = testPath("sub/bar.h");
-  FS.Files[Path] = "";
-  EXPECT_EQ(calculate(Path), "\"bar.h\"");
-}
-
-TEST_F(HeadersTest, DoNotInsertIfInSameFile) {
-  MainFile = testPath("main.h");
-  EXPECT_EQ(calculate(MainFile), "");
-}
-
-TEST_F(HeadersTest, ShortenedInclude) {
-  std::string BarHeader = testPath("sub/bar.h");
-  EXPECT_EQ(calculate(BarHeader), "\"bar.h\"");
-
-  SearchDirArg = (llvm::Twine("-I") + Subdir + "/..").str();
-  CDB.ExtraClangFlags = {SearchDirArg.c_str()};
-  BarHeader = testPath("sub/bar.h");
-  EXPECT_EQ(calculate(BarHeader), "\"sub/bar.h\"");
-}
-
-TEST_F(HeadersTest, NotShortenedInclude) {
-  std::string BarHeader =
-      llvm::sys::path::convert_to_slash(testPath("sub-2/bar.h"));
-  EXPECT_EQ(calculate(BarHeader, ""), "\"" + BarHeader + "\"");
-}
-
-TEST_F(HeadersTest, PreferredHeader) {
-  std::string BarHeader = testPath("sub/bar.h");
-  EXPECT_EQ(calculate(BarHeader, "<bar>"), "<bar>");
-
-  std::string BazHeader = testPath("sub/baz.h");
-  EXPECT_EQ(calculate(BarHeader, BazHeader), "\"baz.h\"");
-}
-
-TEST_F(HeadersTest, DontInsertDuplicatePreferred) {
-  Inclusion Inc;
-  Inc.Written = "\"bar.h\"";
-  Inc.Resolved = "";
-  EXPECT_EQ(calculate(testPath("sub/bar.h"), "\"bar.h\"", {Inc}), "");
-  EXPECT_EQ(calculate("\"x.h\"", "\"bar.h\"", {Inc}), "");
-}
-
-TEST_F(HeadersTest, DontInsertDuplicateResolved) {
-  Inclusion Inc;
-  Inc.Written = "fake-bar.h";
-  Inc.Resolved = testPath("sub/bar.h");
-  EXPECT_EQ(calculate(Inc.Resolved, "", {Inc}), "");
-  // Do not insert preferred.
-  EXPECT_EQ(calculate(Inc.Resolved, "\"BAR.h\"", {Inc}), "");
-}
-
-TEST_F(HeadersTest, PreferInserted) {
-  auto Edit = insert("<y>");
-  EXPECT_TRUE(Edit.hasValue());
-  EXPECT_TRUE(StringRef(Edit->newText).contains("<y>"));
-}
-
-TEST(Headers, NoHeaderSearchInfo) {
-  std::string MainFile = testPath("main.cpp");
-  IncludeInserter Inserter(MainFile, /*Code=*/"", format::getLLVMStyle(),
-                           /*BuildDir=*/"", /*HeaderSearchInfo=*/nullptr);
-
-  auto HeaderPath = testPath("sub/bar.h");
-  auto Inserting = HeaderFile{HeaderPath, /*Verbatim=*/false};
-  auto Verbatim = HeaderFile{"<x>", /*Verbatim=*/true};
-
-  EXPECT_EQ(Inserter.calculateIncludePath(Inserting), "\"" + HeaderPath + "\"");
-  EXPECT_EQ(Inserter.shouldInsertInclude(HeaderPath, Inserting), false);
-
-  EXPECT_EQ(Inserter.calculateIncludePath(Verbatim), "<x>");
-  EXPECT_EQ(Inserter.shouldInsertInclude(HeaderPath, Verbatim), true);
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/IndexActionTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/IndexActionTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/IndexActionTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/IndexActionTests.cpp (removed)
@@ -1,253 +0,0 @@
-//===------ IndexActionTests.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 "index/IndexAction.h"
-#include "clang/Tooling/Tooling.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-
-using ::testing::AllOf;
-using ::testing::ElementsAre;
-using ::testing::Not;
-using ::testing::Pair;
-using ::testing::UnorderedElementsAre;
-using ::testing::UnorderedPointwise;
-
-std::string toUri(llvm::StringRef Path) { return URI::create(Path).toString(); }
-
-MATCHER(IsTU, "") { return arg.IsTU; }
-
-MATCHER_P(HasDigest, Digest, "") { return arg.Digest == Digest; }
-
-MATCHER_P(HasName, Name, "") { return arg.Name == Name; }
-
-MATCHER(HasSameURI, "") {
-  llvm::StringRef URI = testing::get<0>(arg);
-  const std::string &Path = testing::get<1>(arg);
-  return toUri(Path) == URI;
-}
-
-testing::Matcher<const IncludeGraphNode &>
-IncludesAre(const std::vector<std::string> &Includes) {
-  return ::testing::Field(&IncludeGraphNode::DirectIncludes,
-                          UnorderedPointwise(HasSameURI(), Includes));
-}
-
-void checkNodesAreInitialized(const IndexFileIn &IndexFile,
-                              const std::vector<std::string> &Paths) {
-  ASSERT_TRUE(IndexFile.Sources);
-  EXPECT_THAT(Paths.size(), IndexFile.Sources->size());
-  for (llvm::StringRef Path : Paths) {
-    auto URI = toUri(Path);
-    const auto &Node = IndexFile.Sources->lookup(URI);
-    // Uninitialized nodes will have an empty URI.
-    EXPECT_EQ(Node.URI.data(), IndexFile.Sources->find(URI)->getKeyData());
-  }
-}
-
-std::map<std::string, const IncludeGraphNode &> toMap(const IncludeGraph &IG) {
-  std::map<std::string, const IncludeGraphNode &> Nodes;
-  for (auto &I : IG)
-    Nodes.emplace(I.getKey(), I.getValue());
-  return Nodes;
-}
-
-class IndexActionTest : public ::testing::Test {
-public:
-  IndexActionTest() : InMemoryFileSystem(new llvm::vfs::InMemoryFileSystem) {}
-
-  IndexFileIn
-  runIndexingAction(llvm::StringRef MainFilePath,
-                    const std::vector<std::string> &ExtraArgs = {}) {
-    IndexFileIn IndexFile;
-    llvm::IntrusiveRefCntPtr<FileManager> Files(
-        new FileManager(FileSystemOptions(), InMemoryFileSystem));
-
-    auto Action = createStaticIndexingAction(
-        SymbolCollector::Options(),
-        [&](SymbolSlab S) { IndexFile.Symbols = std::move(S); },
-        [&](RefSlab R) { IndexFile.Refs = std::move(R); },
-        [&](IncludeGraph IG) { IndexFile.Sources = std::move(IG); });
-
-    std::vector<std::string> Args = {"index_action", "-fsyntax-only",
-                                     "-xc++",        "-std=c++11",
-                                     "-iquote",      testRoot()};
-    Args.insert(Args.end(), ExtraArgs.begin(), ExtraArgs.end());
-    Args.push_back(MainFilePath);
-
-    tooling::ToolInvocation Invocation(
-        Args, Action.release(), Files.get(),
-        std::make_shared<PCHContainerOperations>());
-
-    Invocation.run();
-
-    checkNodesAreInitialized(IndexFile, FilePaths);
-    return IndexFile;
-  }
-
-  void addFile(llvm::StringRef Path, llvm::StringRef Content) {
-    InMemoryFileSystem->addFile(Path, 0,
-                                llvm::MemoryBuffer::getMemBuffer(Content));
-    FilePaths.push_back(Path);
-  }
-
-protected:
-  std::vector<std::string> FilePaths;
-  llvm::IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> InMemoryFileSystem;
-};
-
-TEST_F(IndexActionTest, CollectIncludeGraph) {
-  std::string MainFilePath = testPath("main.cpp");
-  std::string MainCode = "#include \"level1.h\"";
-  std::string Level1HeaderPath = testPath("level1.h");
-  std::string Level1HeaderCode = "#include \"level2.h\"";
-  std::string Level2HeaderPath = testPath("level2.h");
-  std::string Level2HeaderCode = "";
-
-  addFile(MainFilePath, MainCode);
-  addFile(Level1HeaderPath, Level1HeaderCode);
-  addFile(Level2HeaderPath, Level2HeaderCode);
-
-  IndexFileIn IndexFile = runIndexingAction(MainFilePath);
-  auto Nodes = toMap(*IndexFile.Sources);
-
-  EXPECT_THAT(Nodes,
-              UnorderedElementsAre(
-                  Pair(toUri(MainFilePath),
-                       AllOf(IsTU(), IncludesAre({Level1HeaderPath}),
-                             HasDigest(digest(MainCode)))),
-                  Pair(toUri(Level1HeaderPath),
-                       AllOf(Not(IsTU()), IncludesAre({Level2HeaderPath}),
-                             HasDigest(digest(Level1HeaderCode)))),
-                  Pair(toUri(Level2HeaderPath),
-                       AllOf(Not(IsTU()), IncludesAre({}),
-                             HasDigest(digest(Level2HeaderCode))))));
-}
-
-TEST_F(IndexActionTest, IncludeGraphSelfInclude) {
-  std::string MainFilePath = testPath("main.cpp");
-  std::string MainCode = "#include \"header.h\"";
-  std::string HeaderPath = testPath("header.h");
-  std::string HeaderCode = R"cpp(
-      #ifndef _GUARD_
-      #define _GUARD_
-      #include "header.h"
-      #endif)cpp";
-
-  addFile(MainFilePath, MainCode);
-  addFile(HeaderPath, HeaderCode);
-
-  IndexFileIn IndexFile = runIndexingAction(MainFilePath);
-  auto Nodes = toMap(*IndexFile.Sources);
-
-  EXPECT_THAT(
-      Nodes,
-      UnorderedElementsAre(
-          Pair(toUri(MainFilePath), AllOf(IsTU(), IncludesAre({HeaderPath}),
-                                          HasDigest(digest(MainCode)))),
-          Pair(toUri(HeaderPath), AllOf(Not(IsTU()), IncludesAre({HeaderPath}),
-                                        HasDigest(digest(HeaderCode))))));
-}
-
-TEST_F(IndexActionTest, IncludeGraphSkippedFile) {
-  std::string MainFilePath = testPath("main.cpp");
-  std::string MainCode = R"cpp(
-      #include "common.h"
-      #include "header.h"
-      )cpp";
-
-  std::string CommonHeaderPath = testPath("common.h");
-  std::string CommonHeaderCode = R"cpp(
-      #ifndef _GUARD_
-      #define _GUARD_
-      void f();
-      #endif)cpp";
-
-  std::string HeaderPath = testPath("header.h");
-  std::string HeaderCode = R"cpp(
-      #include "common.h"
-      void g();)cpp";
-
-  addFile(MainFilePath, MainCode);
-  addFile(HeaderPath, HeaderCode);
-  addFile(CommonHeaderPath, CommonHeaderCode);
-
-  IndexFileIn IndexFile = runIndexingAction(MainFilePath);
-  auto Nodes = toMap(*IndexFile.Sources);
-
-  EXPECT_THAT(
-      Nodes, UnorderedElementsAre(
-                 Pair(toUri(MainFilePath),
-                      AllOf(IsTU(), IncludesAre({HeaderPath, CommonHeaderPath}),
-                            HasDigest(digest(MainCode)))),
-                 Pair(toUri(HeaderPath),
-                      AllOf(Not(IsTU()), IncludesAre({CommonHeaderPath}),
-                            HasDigest(digest(HeaderCode)))),
-                 Pair(toUri(CommonHeaderPath),
-                      AllOf(Not(IsTU()), IncludesAre({}),
-                            HasDigest(digest(CommonHeaderCode))))));
-}
-
-TEST_F(IndexActionTest, IncludeGraphDynamicInclude) {
-  std::string MainFilePath = testPath("main.cpp");
-  std::string MainCode = R"cpp(
-      #ifndef FOO
-      #define FOO "main.cpp"
-      #else
-      #define FOO "header.h"
-      #endif
-
-      #include FOO)cpp";
-  std::string HeaderPath = testPath("header.h");
-  std::string HeaderCode = "";
-
-  addFile(MainFilePath, MainCode);
-  addFile(HeaderPath, HeaderCode);
-
-  IndexFileIn IndexFile = runIndexingAction(MainFilePath);
-  auto Nodes = toMap(*IndexFile.Sources);
-
-  EXPECT_THAT(
-      Nodes,
-      UnorderedElementsAre(
-          Pair(toUri(MainFilePath),
-               AllOf(IsTU(), IncludesAre({MainFilePath, HeaderPath}),
-                     HasDigest(digest(MainCode)))),
-          Pair(toUri(HeaderPath), AllOf(Not(IsTU()), IncludesAre({}),
-                                        HasDigest(digest(HeaderCode))))));
-}
-
-TEST_F(IndexActionTest, NoWarnings) {
-  std::string MainFilePath = testPath("main.cpp");
-  std::string MainCode = R"cpp(
-      void foo(int x) {
-        if (x = 1) // -Wparentheses
-          return;
-        if (x = 1) // -Wparentheses
-          return;
-      }
-      void bar() {}
-  )cpp";
-  addFile(MainFilePath, MainCode);
-  // We set -ferror-limit so the warning-promoted-to-error would be fatal.
-  // This would cause indexing to stop (if warnings weren't disabled).
-  IndexFileIn IndexFile = runIndexingAction(
-      MainFilePath, {"-ferror-limit=1", "-Wparentheses", "-Werror"});
-  ASSERT_TRUE(IndexFile.Sources);
-  ASSERT_NE(0u, IndexFile.Sources->size());
-  EXPECT_THAT(*IndexFile.Symbols, ElementsAre(HasName("foo"), HasName("bar")));
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/IndexTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/IndexTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/IndexTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/IndexTests.cpp (removed)
@@ -1,408 +0,0 @@
-//===-- IndexTests.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 "Annotations.h"
-#include "TestIndex.h"
-#include "TestTU.h"
-#include "index/FileIndex.h"
-#include "index/Index.h"
-#include "index/MemIndex.h"
-#include "index/Merge.h"
-#include "index/Symbol.h"
-#include "clang/Index/IndexSymbol.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-using testing::_;
-using testing::AllOf;
-using testing::AnyOf;
-using testing::ElementsAre;
-using testing::IsEmpty;
-using testing::Pair;
-using testing::Pointee;
-using testing::UnorderedElementsAre;
-
-namespace clang {
-namespace clangd {
-namespace {
-
-MATCHER_P(Named, N, "") { return arg.Name == N; }
-MATCHER_P(RefRange, Range, "") {
-  return std::make_tuple(arg.Location.Start.line(), arg.Location.Start.column(),
-                         arg.Location.End.line(), arg.Location.End.column()) ==
-         std::make_tuple(Range.start.line, Range.start.character,
-                         Range.end.line, Range.end.character);
-}
-MATCHER_P(FileURI, F, "") { return StringRef(arg.Location.FileURI) == F; }
-
-TEST(SymbolLocation, Position) {
-  using Position = SymbolLocation::Position;
-  Position Pos;
-
-  Pos.setLine(1);
-  EXPECT_EQ(1u, Pos.line());
-  Pos.setColumn(2);
-  EXPECT_EQ(2u, Pos.column());
-  EXPECT_FALSE(Pos.hasOverflow());
-
-  Pos.setLine(Position::MaxLine + 1); // overflow
-  EXPECT_TRUE(Pos.hasOverflow());
-  EXPECT_EQ(Pos.line(), Position::MaxLine);
-  Pos.setLine(1); // reset the overflowed line.
-
-  Pos.setColumn(Position::MaxColumn + 1); // overflow
-  EXPECT_TRUE(Pos.hasOverflow());
-  EXPECT_EQ(Pos.column(), Position::MaxColumn);
-}
-
-TEST(SymbolSlab, FindAndIterate) {
-  SymbolSlab::Builder B;
-  B.insert(symbol("Z"));
-  B.insert(symbol("Y"));
-  B.insert(symbol("X"));
-  EXPECT_EQ(nullptr, B.find(SymbolID("W")));
-  for (const char *Sym : {"X", "Y", "Z"})
-    EXPECT_THAT(B.find(SymbolID(Sym)), Pointee(Named(Sym)));
-
-  SymbolSlab S = std::move(B).build();
-  EXPECT_THAT(S, UnorderedElementsAre(Named("X"), Named("Y"), Named("Z")));
-  EXPECT_EQ(S.end(), S.find(SymbolID("W")));
-  for (const char *Sym : {"X", "Y", "Z"})
-    EXPECT_THAT(*S.find(SymbolID(Sym)), Named(Sym));
-}
-
-TEST(SwapIndexTest, OldIndexRecycled) {
-  auto Token = std::make_shared<int>();
-  std::weak_ptr<int> WeakToken = Token;
-
-  SwapIndex S(llvm::make_unique<MemIndex>(
-      SymbolSlab(), RefSlab(), std::move(Token), /*BackingDataSize=*/0));
-  EXPECT_FALSE(WeakToken.expired());      // Current MemIndex keeps it alive.
-  S.reset(llvm::make_unique<MemIndex>()); // Now the MemIndex is destroyed.
-  EXPECT_TRUE(WeakToken.expired());       // So the token is too.
-}
-
-TEST(MemIndexTest, MemIndexDeduplicate) {
-  std::vector<Symbol> Symbols = {symbol("1"), symbol("2"), symbol("3"),
-                                 symbol("2") /* duplicate */};
-  FuzzyFindRequest Req;
-  Req.Query = "2";
-  Req.AnyScope = true;
-  MemIndex I(Symbols, RefSlab());
-  EXPECT_THAT(match(I, Req), ElementsAre("2"));
-}
-
-TEST(MemIndexTest, MemIndexLimitedNumMatches) {
-  auto I = MemIndex::build(generateNumSymbols(0, 100), RefSlab());
-  FuzzyFindRequest Req;
-  Req.Query = "5";
-  Req.AnyScope = true;
-  Req.Limit = 3;
-  bool Incomplete;
-  auto Matches = match(*I, Req, &Incomplete);
-  EXPECT_TRUE(Req.Limit);
-  EXPECT_EQ(Matches.size(), *Req.Limit);
-  EXPECT_TRUE(Incomplete);
-}
-
-TEST(MemIndexTest, FuzzyMatch) {
-  auto I = MemIndex::build(
-      generateSymbols({"LaughingOutLoud", "LionPopulation", "LittleOldLady"}),
-      RefSlab());
-  FuzzyFindRequest Req;
-  Req.Query = "lol";
-  Req.AnyScope = true;
-  Req.Limit = 2;
-  EXPECT_THAT(match(*I, Req),
-              UnorderedElementsAre("LaughingOutLoud", "LittleOldLady"));
-}
-
-TEST(MemIndexTest, MatchQualifiedNamesWithoutSpecificScope) {
-  auto I =
-      MemIndex::build(generateSymbols({"a::y1", "b::y2", "y3"}), RefSlab());
-  FuzzyFindRequest Req;
-  Req.Query = "y";
-  Req.AnyScope = true;
-  EXPECT_THAT(match(*I, Req), UnorderedElementsAre("a::y1", "b::y2", "y3"));
-}
-
-TEST(MemIndexTest, MatchQualifiedNamesWithGlobalScope) {
-  auto I =
-      MemIndex::build(generateSymbols({"a::y1", "b::y2", "y3"}), RefSlab());
-  FuzzyFindRequest Req;
-  Req.Query = "y";
-  Req.Scopes = {""};
-  EXPECT_THAT(match(*I, Req), UnorderedElementsAre("y3"));
-}
-
-TEST(MemIndexTest, MatchQualifiedNamesWithOneScope) {
-  auto I = MemIndex::build(
-      generateSymbols({"a::y1", "a::y2", "a::x", "b::y2", "y3"}), RefSlab());
-  FuzzyFindRequest Req;
-  Req.Query = "y";
-  Req.Scopes = {"a::"};
-  EXPECT_THAT(match(*I, Req), UnorderedElementsAre("a::y1", "a::y2"));
-}
-
-TEST(MemIndexTest, MatchQualifiedNamesWithMultipleScopes) {
-  auto I = MemIndex::build(
-      generateSymbols({"a::y1", "a::y2", "a::x", "b::y3", "y3"}), RefSlab());
-  FuzzyFindRequest Req;
-  Req.Query = "y";
-  Req.Scopes = {"a::", "b::"};
-  EXPECT_THAT(match(*I, Req), UnorderedElementsAre("a::y1", "a::y2", "b::y3"));
-}
-
-TEST(MemIndexTest, NoMatchNestedScopes) {
-  auto I = MemIndex::build(generateSymbols({"a::y1", "a::b::y2"}), RefSlab());
-  FuzzyFindRequest Req;
-  Req.Query = "y";
-  Req.Scopes = {"a::"};
-  EXPECT_THAT(match(*I, Req), UnorderedElementsAre("a::y1"));
-}
-
-TEST(MemIndexTest, IgnoreCases) {
-  auto I = MemIndex::build(generateSymbols({"ns::ABC", "ns::abc"}), RefSlab());
-  FuzzyFindRequest Req;
-  Req.Query = "AB";
-  Req.Scopes = {"ns::"};
-  EXPECT_THAT(match(*I, Req), UnorderedElementsAre("ns::ABC", "ns::abc"));
-}
-
-TEST(MemIndexTest, Lookup) {
-  auto I = MemIndex::build(generateSymbols({"ns::abc", "ns::xyz"}), RefSlab());
-  EXPECT_THAT(lookup(*I, SymbolID("ns::abc")), UnorderedElementsAre("ns::abc"));
-  EXPECT_THAT(lookup(*I, {SymbolID("ns::abc"), SymbolID("ns::xyz")}),
-              UnorderedElementsAre("ns::abc", "ns::xyz"));
-  EXPECT_THAT(lookup(*I, {SymbolID("ns::nonono"), SymbolID("ns::xyz")}),
-              UnorderedElementsAre("ns::xyz"));
-  EXPECT_THAT(lookup(*I, SymbolID("ns::nonono")), UnorderedElementsAre());
-}
-
-TEST(MemIndexTest, TemplateSpecialization) {
-  SymbolSlab::Builder B;
-
-  Symbol S = symbol("TempSpec");
-  S.ID = SymbolID("1");
-  B.insert(S);
-
-  S = symbol("TempSpec");
-  S.ID = SymbolID("2");
-  S.TemplateSpecializationArgs = "<int, bool>";
-  S.SymInfo.Properties = static_cast<index::SymbolPropertySet>(
-      index::SymbolProperty::TemplateSpecialization);
-  B.insert(S);
-
-  S = symbol("TempSpec");
-  S.ID = SymbolID("3");
-  S.TemplateSpecializationArgs = "<int, U>";
-  S.SymInfo.Properties = static_cast<index::SymbolPropertySet>(
-      index::SymbolProperty::TemplatePartialSpecialization);
-  B.insert(S);
-
-  auto I = MemIndex::build(std::move(B).build(), RefSlab());
-  FuzzyFindRequest Req;
-  Req.AnyScope = true;
-
-  Req.Query = "TempSpec";
-  EXPECT_THAT(match(*I, Req),
-              UnorderedElementsAre("TempSpec", "TempSpec<int, bool>",
-                                   "TempSpec<int, U>"));
-
-  // FIXME: Add filtering for template argument list.
-  Req.Query = "TempSpec<int";
-  EXPECT_THAT(match(*I, Req), IsEmpty());
-}
-
-TEST(MergeIndexTest, Lookup) {
-  auto I = MemIndex::build(generateSymbols({"ns::A", "ns::B"}), RefSlab()),
-       J = MemIndex::build(generateSymbols({"ns::B", "ns::C"}), RefSlab());
-  MergedIndex M(I.get(), J.get());
-  EXPECT_THAT(lookup(M, SymbolID("ns::A")), UnorderedElementsAre("ns::A"));
-  EXPECT_THAT(lookup(M, SymbolID("ns::B")), UnorderedElementsAre("ns::B"));
-  EXPECT_THAT(lookup(M, SymbolID("ns::C")), UnorderedElementsAre("ns::C"));
-  EXPECT_THAT(lookup(M, {SymbolID("ns::A"), SymbolID("ns::B")}),
-              UnorderedElementsAre("ns::A", "ns::B"));
-  EXPECT_THAT(lookup(M, {SymbolID("ns::A"), SymbolID("ns::C")}),
-              UnorderedElementsAre("ns::A", "ns::C"));
-  EXPECT_THAT(lookup(M, SymbolID("ns::D")), UnorderedElementsAre());
-  EXPECT_THAT(lookup(M, {}), UnorderedElementsAre());
-}
-
-TEST(MergeIndexTest, FuzzyFind) {
-  auto I = MemIndex::build(generateSymbols({"ns::A", "ns::B"}), RefSlab()),
-       J = MemIndex::build(generateSymbols({"ns::B", "ns::C"}), RefSlab());
-  FuzzyFindRequest Req;
-  Req.Scopes = {"ns::"};
-  EXPECT_THAT(match(MergedIndex(I.get(), J.get()), Req),
-              UnorderedElementsAre("ns::A", "ns::B", "ns::C"));
-}
-
-TEST(MergeTest, Merge) {
-  Symbol L, R;
-  L.ID = R.ID = SymbolID("hello");
-  L.Name = R.Name = "Foo";                           // same in both
-  L.CanonicalDeclaration.FileURI = "file:///left.h"; // differs
-  R.CanonicalDeclaration.FileURI = "file:///right.h";
-  L.References = 1;
-  R.References = 2;
-  L.Signature = "()";                   // present in left only
-  R.CompletionSnippetSuffix = "{$1:0}"; // present in right only
-  R.Documentation = "--doc--";
-  L.Origin = SymbolOrigin::Dynamic;
-  R.Origin = SymbolOrigin::Static;
-  R.Type = "expectedType";
-
-  Symbol M = mergeSymbol(L, R);
-  EXPECT_EQ(M.Name, "Foo");
-  EXPECT_EQ(StringRef(M.CanonicalDeclaration.FileURI), "file:///left.h");
-  EXPECT_EQ(M.References, 3u);
-  EXPECT_EQ(M.Signature, "()");
-  EXPECT_EQ(M.CompletionSnippetSuffix, "{$1:0}");
-  EXPECT_EQ(M.Documentation, "--doc--");
-  EXPECT_EQ(M.Type, "expectedType");
-  EXPECT_EQ(M.Origin,
-            SymbolOrigin::Dynamic | SymbolOrigin::Static | SymbolOrigin::Merge);
-}
-
-TEST(MergeTest, PreferSymbolWithDefn) {
-  Symbol L, R;
-
-  L.ID = R.ID = SymbolID("hello");
-  L.CanonicalDeclaration.FileURI = "file:/left.h";
-  R.CanonicalDeclaration.FileURI = "file:/right.h";
-  L.Name = "left";
-  R.Name = "right";
-
-  Symbol M = mergeSymbol(L, R);
-  EXPECT_EQ(StringRef(M.CanonicalDeclaration.FileURI), "file:/left.h");
-  EXPECT_EQ(StringRef(M.Definition.FileURI), "");
-  EXPECT_EQ(M.Name, "left");
-
-  R.Definition.FileURI = "file:/right.cpp"; // Now right will be favored.
-  M = mergeSymbol(L, R);
-  EXPECT_EQ(StringRef(M.CanonicalDeclaration.FileURI), "file:/right.h");
-  EXPECT_EQ(StringRef(M.Definition.FileURI), "file:/right.cpp");
-  EXPECT_EQ(M.Name, "right");
-}
-
-TEST(MergeTest, PreferSymbolLocationInCodegenFile) {
-  Symbol L, R;
-
-  L.ID = R.ID = SymbolID("hello");
-  L.CanonicalDeclaration.FileURI = "file:/x.proto.h";
-  R.CanonicalDeclaration.FileURI = "file:/x.proto";
-
-  Symbol M = mergeSymbol(L, R);
-  EXPECT_EQ(StringRef(M.CanonicalDeclaration.FileURI), "file:/x.proto");
-
-  // Prefer L if both have codegen suffix.
-  L.CanonicalDeclaration.FileURI = "file:/y.proto";
-  M = mergeSymbol(L, R);
-  EXPECT_EQ(StringRef(M.CanonicalDeclaration.FileURI), "file:/y.proto");
-}
-
-TEST(MergeIndexTest, Refs) {
-  FileIndex Dyn;
-  FileIndex StaticIndex;
-  MergedIndex Merge(&Dyn, &StaticIndex);
-
-  const char *HeaderCode = "class Foo;";
-  auto HeaderSymbols = TestTU::withHeaderCode("class Foo;").headerSymbols();
-  auto Foo = findSymbol(HeaderSymbols, "Foo");
-
-  // Build dynamic index for test.cc.
-  Annotations Test1Code(R"(class $Foo[[Foo]];)");
-  TestTU Test;
-  Test.HeaderCode = HeaderCode;
-  Test.Code = Test1Code.code();
-  Test.Filename = "test.cc";
-  auto AST = Test.build();
-  Dyn.updateMain(Test.Filename, AST);
-
-  // Build static index for test.cc.
-  Test.HeaderCode = HeaderCode;
-  Test.Code = "// static\nclass Foo {};";
-  Test.Filename = "test.cc";
-  auto StaticAST = Test.build();
-  // Add stale refs for test.cc.
-  StaticIndex.updateMain(Test.Filename, StaticAST);
-
-  // Add refs for test2.cc
-  Annotations Test2Code(R"(class $Foo[[Foo]] {};)");
-  TestTU Test2;
-  Test2.HeaderCode = HeaderCode;
-  Test2.Code = Test2Code.code();
-  Test2.Filename = "test2.cc";
-  StaticAST = Test2.build();
-  StaticIndex.updateMain(Test2.Filename, StaticAST);
-
-  RefsRequest Request;
-  Request.IDs = {Foo.ID};
-  RefSlab::Builder Results;
-  Merge.refs(Request, [&](const Ref &O) { Results.insert(Foo.ID, O); });
-  EXPECT_THAT(
-      std::move(Results).build(),
-      ElementsAre(Pair(
-          _, UnorderedElementsAre(AllOf(RefRange(Test1Code.range("Foo")),
-                                        FileURI("unittest:///test.cc")),
-                                  AllOf(RefRange(Test2Code.range("Foo")),
-                                        FileURI("unittest:///test2.cc"))))));
-
-  Request.Limit = 1;
-  RefSlab::Builder Results2;
-  Merge.refs(Request, [&](const Ref &O) { Results2.insert(Foo.ID, O); });
-  EXPECT_THAT(std::move(Results2).build(),
-              ElementsAre(Pair(
-                  _, ElementsAre(AnyOf(FileURI("unittest:///test.cc"),
-                                       FileURI("unittest:///test2.cc"))))));
-}
-
-MATCHER_P2(IncludeHeaderWithRef, IncludeHeader, References, "") {
-  return (arg.IncludeHeader == IncludeHeader) && (arg.References == References);
-}
-
-TEST(MergeTest, MergeIncludesOnDifferentDefinitions) {
-  Symbol L, R;
-  L.Name = "left";
-  R.Name = "right";
-  L.ID = R.ID = SymbolID("hello");
-  L.IncludeHeaders.emplace_back("common", 1);
-  R.IncludeHeaders.emplace_back("common", 1);
-  R.IncludeHeaders.emplace_back("new", 1);
-
-  // Both have no definition.
-  Symbol M = mergeSymbol(L, R);
-  EXPECT_THAT(M.IncludeHeaders,
-              UnorderedElementsAre(IncludeHeaderWithRef("common", 2u),
-                                   IncludeHeaderWithRef("new", 1u)));
-
-  // Only merge references of the same includes but do not merge new #includes.
-  L.Definition.FileURI = "file:/left.h";
-  M = mergeSymbol(L, R);
-  EXPECT_THAT(M.IncludeHeaders,
-              UnorderedElementsAre(IncludeHeaderWithRef("common", 2u)));
-
-  // Definitions are the same.
-  R.Definition.FileURI = "file:/right.h";
-  M = mergeSymbol(L, R);
-  EXPECT_THAT(M.IncludeHeaders,
-              UnorderedElementsAre(IncludeHeaderWithRef("common", 2u),
-                                   IncludeHeaderWithRef("new", 1u)));
-
-  // Definitions are different.
-  R.Definition.FileURI = "file:/right.h";
-  M = mergeSymbol(L, R);
-  EXPECT_THAT(M.IncludeHeaders,
-              UnorderedElementsAre(IncludeHeaderWithRef("common", 2u),
-                                   IncludeHeaderWithRef("new", 1u)));
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/JSONTransportTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/JSONTransportTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/JSONTransportTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/JSONTransportTests.cpp (removed)
@@ -1,205 +0,0 @@
-//===-- JSONTransportTests.cpp  -------------------------------------------===//
-//
-// 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 "Protocol.h"
-#include "Transport.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-#include <cstdio>
-
-namespace clang {
-namespace clangd {
-namespace {
-
-// No fmemopen on windows or on versions of MacOS X earlier than 10.13, so we
-// can't easily run this test.
-#if !(defined(_WIN32) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) &&          \
-                          __MAC_OS_X_VERSION_MIN_REQUIRED < 101300))
-
-// Fixture takes care of managing the input/output buffers for the transport.
-class JSONTransportTest : public ::testing::Test {
-  std::string InBuf, OutBuf, MirrorBuf;
-  llvm::raw_string_ostream Out, Mirror;
-  std::unique_ptr<FILE, int (*)(FILE *)> In;
-
-protected:
-  JSONTransportTest() : Out(OutBuf), Mirror(MirrorBuf), In(nullptr, nullptr) {}
-
-  template <typename... Args>
-  std::unique_ptr<Transport> transport(std::string InData, bool Pretty,
-                                       JSONStreamStyle Style) {
-    InBuf = std::move(InData);
-    In = {fmemopen(&InBuf[0], InBuf.size(), "r"), &fclose};
-    return newJSONTransport(In.get(), Out, &Mirror, Pretty, Style);
-  }
-
-  std::string input() const { return InBuf; }
-  std::string output() { return Out.str(); }
-  std::string input_mirror() { return Mirror.str(); }
-};
-
-// Echo is a simple server running on a transport:
-//   - logs each message it gets.
-//   - when it gets a call, replies to it
-//   - when it gets a notification for method "call", makes a call on Target
-// Hangs up when it gets an exit notification.
-class Echo : public Transport::MessageHandler {
-  Transport &Target;
-  std::string LogBuf;
-  llvm::raw_string_ostream Log;
-
-public:
-  Echo(Transport &Target) : Target(Target), Log(LogBuf) {}
-
-  std::string log() { return Log.str(); }
-
-  bool onNotify(llvm::StringRef Method, llvm::json::Value Params) override {
-    Log << "Notification " << Method << ": " << Params << "\n";
-    if (Method == "call")
-      Target.call("echo call", std::move(Params), 42);
-    return Method != "exit";
-  }
-
-  bool onCall(llvm::StringRef Method, llvm::json::Value Params,
-              llvm::json::Value ID) override {
-    Log << "Call " << Method << "(" << ID << "): " << Params << "\n";
-    if (Method == "err")
-      Target.reply(
-          ID, llvm::make_error<LSPError>("trouble at mill", ErrorCode(88)));
-    else
-      Target.reply(ID, std::move(Params));
-    return true;
-  }
-
-  bool onReply(llvm::json::Value ID,
-               llvm::Expected<llvm::json::Value> Params) override {
-    if (Params)
-      Log << "Reply(" << ID << "): " << *Params << "\n";
-    else
-      Log << "Reply(" << ID
-          << "): error = " << llvm::toString(Params.takeError()) << "\n";
-    return true;
-  }
-};
-
-std::string trim(llvm::StringRef S) { return S.trim().str(); }
-
-// Runs an Echo session using the standard JSON-RPC format we use in production.
-TEST_F(JSONTransportTest, StandardDense) {
-  auto T = transport(
-      "Content-Length: 52\r\n\r\n"
-      R"({"jsonrpc": "2.0", "method": "call", "params": 1234})"
-      "Content-Length: 46\r\n\r\n"
-      R"({"jsonrpc": "2.0", "id": 1234, "result": 5678})"
-      "Content-Length: 67\r\n\r\n"
-      R"({"jsonrpc": "2.0", "method": "foo", "id": "abcd", "params": "efgh"})"
-      "Content-Length: 73\r\n\r\n"
-      R"({"jsonrpc": "2.0", "id": "xyz", "error": {"code": 99, "message": "bad!"}})"
-      "Content-Length: 68\r\n\r\n"
-      R"({"jsonrpc": "2.0", "method": "err", "id": "wxyz", "params": "boom!"})"
-      "Content-Length: 36\r\n\r\n"
-      R"({"jsonrpc": "2.0", "method": "exit"})",
-      /*Pretty=*/false, JSONStreamStyle::Standard);
-  Echo E(*T);
-  auto Err = T->loop(E);
-  EXPECT_FALSE(bool(Err)) << toString(std::move(Err));
-
-  const char *WantLog = R"(
-Notification call: 1234
-Reply(1234): 5678
-Call foo("abcd"): "efgh"
-Reply("xyz"): error = 99: bad!
-Call err("wxyz"): "boom!"
-Notification exit: null
-  )";
-  EXPECT_EQ(trim(E.log()), trim(WantLog));
-  const char *WantOutput =
-      "Content-Length: 60\r\n\r\n"
-      R"({"id":42,"jsonrpc":"2.0","method":"echo call","params":1234})"
-      "Content-Length: 45\r\n\r\n"
-      R"({"id":"abcd","jsonrpc":"2.0","result":"efgh"})"
-      "Content-Length: 77\r\n\r\n"
-      R"({"error":{"code":88,"message":"trouble at mill"},"id":"wxyz","jsonrpc":"2.0"})";
-  EXPECT_EQ(output(), WantOutput);
-  EXPECT_EQ(trim(input_mirror()), trim(input()));
-}
-
-// Runs an Echo session using the "delimited" input and pretty-printed output
-// that we use in lit tests.
-TEST_F(JSONTransportTest, DelimitedPretty) {
-  auto T = transport(R"jsonrpc(
-{"jsonrpc": "2.0", "method": "call", "params": 1234}
----
-{"jsonrpc": "2.0", "id": 1234, "result": 5678}
----
-{"jsonrpc": "2.0", "method": "foo", "id": "abcd", "params": "efgh"}
----
-{"jsonrpc": "2.0", "id": "xyz", "error": {"code": 99, "message": "bad!"}}
----
-{"jsonrpc": "2.0", "method": "err", "id": "wxyz", "params": "boom!"}
----
-{"jsonrpc": "2.0", "method": "exit"}
-  )jsonrpc",
-                     /*Pretty=*/true, JSONStreamStyle::Delimited);
-  Echo E(*T);
-  auto Err = T->loop(E);
-  EXPECT_FALSE(bool(Err)) << toString(std::move(Err));
-
-  const char *WantLog = R"(
-Notification call: 1234
-Reply(1234): 5678
-Call foo("abcd"): "efgh"
-Reply("xyz"): error = 99: bad!
-Call err("wxyz"): "boom!"
-Notification exit: null
-  )";
-  EXPECT_EQ(trim(E.log()), trim(WantLog));
-  const char *WantOutput = "Content-Length: 77\r\n\r\n"
-                           R"({
-  "id": 42,
-  "jsonrpc": "2.0",
-  "method": "echo call",
-  "params": 1234
-})"
-                           "Content-Length: 58\r\n\r\n"
-                           R"({
-  "id": "abcd",
-  "jsonrpc": "2.0",
-  "result": "efgh"
-})"
-                           "Content-Length: 105\r\n\r\n"
-                           R"({
-  "error": {
-    "code": 88,
-    "message": "trouble at mill"
-  },
-  "id": "wxyz",
-  "jsonrpc": "2.0"
-})";
-  EXPECT_EQ(output(), WantOutput);
-  EXPECT_EQ(trim(input_mirror()), trim(input()));
-}
-
-// IO errors such as EOF ane reported.
-// The only successful return from loop() is if a handler returned false.
-TEST_F(JSONTransportTest, EndOfFile) {
-  auto T = transport("Content-Length: 52\r\n\r\n"
-                     R"({"jsonrpc": "2.0", "method": "call", "params": 1234})",
-                     /*Pretty=*/false, JSONStreamStyle::Standard);
-  Echo E(*T);
-  auto Err = T->loop(E);
-  EXPECT_EQ(trim(E.log()), "Notification call: 1234");
-  EXPECT_TRUE(bool(Err)); // Ran into EOF with no handler signalling done.
-  consumeError(std::move(Err));
-  EXPECT_EQ(trim(input_mirror()), trim(input()));
-}
-
-#endif
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/Matchers.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/Matchers.h?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/Matchers.h (original)
+++ clang-tools-extra/trunk/unittests/clangd/Matchers.h (removed)
@@ -1,199 +0,0 @@
-//===-- Matchers.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
-//
-//===----------------------------------------------------------------------===//
-//
-// GMock matchers that aren't specific to particular tests.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_TOOLS_EXTRA_UNITTESTS_CLANGD_MATCHERS_H
-#define LLVM_CLANG_TOOLS_EXTRA_UNITTESTS_CLANGD_MATCHERS_H
-#include "Protocol.h"
-#include "gmock/gmock.h"
-
-namespace clang {
-namespace clangd {
-using ::testing::Matcher;
-
-// EXPECT_IFF expects matcher if condition is true, and Not(matcher) if false.
-// This is hard to write as a function, because matchers may be polymorphic.
-#define EXPECT_IFF(condition, value, matcher)                                  \
-  do {                                                                         \
-    if (condition)                                                             \
-      EXPECT_THAT(value, matcher);                                             \
-    else                                                                       \
-      EXPECT_THAT(value, ::testing::Not(matcher));                             \
-  } while (0)
-
-// HasSubsequence(m1, m2, ...) matches a vector containing elements that match
-// m1, m2 ... in that order.
-//
-// SubsequenceMatcher implements this once the type of vector is known.
-template <typename T>
-class SubsequenceMatcher
-    : public ::testing::MatcherInterface<const std::vector<T> &> {
-  std::vector<Matcher<T>> Matchers;
-
-public:
-  SubsequenceMatcher(std::vector<Matcher<T>> M) : Matchers(M) {}
-
-  void DescribeTo(std::ostream *OS) const override {
-    *OS << "Contains the subsequence [";
-    const char *Sep = "";
-    for (const auto &M : Matchers) {
-      *OS << Sep;
-      M.DescribeTo(OS);
-      Sep = ", ";
-    }
-    *OS << "]";
-  }
-
-  bool MatchAndExplain(const std::vector<T> &V,
-                       ::testing::MatchResultListener *L) const override {
-    std::vector<int> Matches(Matchers.size());
-    size_t I = 0;
-    for (size_t J = 0; I < Matchers.size() && J < V.size(); ++J)
-      if (Matchers[I].Matches(V[J]))
-        Matches[I++] = J;
-    if (I == Matchers.size()) // We exhausted all matchers.
-      return true;
-    if (L->IsInterested()) {
-      *L << "\n  Matched:";
-      for (size_t K = 0; K < I; ++K) {
-        *L << "\n\t";
-        Matchers[K].DescribeTo(L->stream());
-        *L << " ==> " << ::testing::PrintToString(V[Matches[K]]);
-      }
-      *L << "\n\t";
-      Matchers[I].DescribeTo(L->stream());
-      *L << " ==> no subsequent match";
-    }
-    return false;
-  }
-};
-
-// PolySubsequenceMatcher implements a "polymorphic" SubsequenceMatcher.
-// It captures the types of the element matchers, and can be converted to
-// Matcher<vector<T>> if each matcher can be converted to Matcher<T>.
-// This allows HasSubsequence() to accept polymorphic matchers like Not().
-template <typename... M> class PolySubsequenceMatcher {
-  std::tuple<M...> Matchers;
-
-public:
-  PolySubsequenceMatcher(M &&... Args)
-      : Matchers(std::make_tuple(std::forward<M>(Args)...)) {}
-
-  template <typename T> operator Matcher<const std::vector<T> &>() const {
-    return ::testing::MakeMatcher(new SubsequenceMatcher<T>(
-        TypedMatchers<T>(llvm::index_sequence_for<M...>{})));
-  }
-
-private:
-  template <typename T, size_t... I>
-  std::vector<Matcher<T>> TypedMatchers(llvm::index_sequence<I...>) const {
-    return {std::get<I>(Matchers)...};
-  }
-};
-
-// HasSubsequence(m1, m2, ...) matches a vector containing elements that match
-// m1, m2 ... in that order.
-// The real implementation is in SubsequenceMatcher.
-template <typename... Args>
-PolySubsequenceMatcher<Args...> HasSubsequence(Args &&... M) {
-  return PolySubsequenceMatcher<Args...>(std::forward<Args>(M)...);
-}
-
-// EXPECT_ERROR seems like a pretty generic name, make sure it's not defined
-// already.
-#ifdef EXPECT_ERROR
-#error "Refusing to redefine EXPECT_ERROR"
-#endif
-
-// Consumes llvm::Expected<T>, checks it contains an error and marks it as
-// handled.
-#define EXPECT_ERROR(expectedValue)                                            \
-  do {                                                                         \
-    auto &&ComputedValue = (expectedValue);                                    \
-    if (ComputedValue) {                                                       \
-      ADD_FAILURE() << "expected an error from " << #expectedValue             \
-                    << " but got "                                             \
-                    << ::testing::PrintToString(*ComputedValue);               \
-      break;                                                                   \
-    }                                                                          \
-    llvm::consumeError(ComputedValue.takeError());                             \
-  } while (false)
-
-// Implements the HasValue(m) matcher for matching an Optional whose
-// value matches matcher m.
-template <typename InnerMatcher> class OptionalMatcher {
-public:
-  explicit OptionalMatcher(const InnerMatcher &matcher) : matcher_(matcher) {}
-
-  // This type conversion operator template allows Optional(m) to be
-  // used as a matcher for any Optional type whose value type is
-  // compatible with the inner matcher.
-  //
-  // The reason we do this instead of relying on
-  // MakePolymorphicMatcher() is that the latter is not flexible
-  // enough for implementing the DescribeTo() method of Optional().
-  template <typename Optional> operator Matcher<Optional>() const {
-    return MakeMatcher(new Impl<Optional>(matcher_));
-  }
-
-private:
-  // The monomorphic implementation that works for a particular optional type.
-  template <typename Optional>
-  class Impl : public ::testing::MatcherInterface<Optional> {
-  public:
-    using Value = typename std::remove_const<
-        typename std::remove_reference<Optional>::type>::type::value_type;
-
-    explicit Impl(const InnerMatcher &matcher)
-        : matcher_(::testing::MatcherCast<const Value &>(matcher)) {}
-
-    virtual void DescribeTo(::std::ostream *os) const {
-      *os << "has a value that ";
-      matcher_.DescribeTo(os);
-    }
-
-    virtual void DescribeNegationTo(::std::ostream *os) const {
-      *os << "does not have a value that ";
-      matcher_.DescribeTo(os);
-    }
-
-    virtual bool
-    MatchAndExplain(Optional optional,
-                    ::testing::MatchResultListener *listener) const {
-      if (!optional.hasValue())
-        return false;
-
-      *listener << "which has a value ";
-      return MatchPrintAndExplain(*optional, matcher_, listener);
-    }
-
-  private:
-    const Matcher<const Value &> matcher_;
-
-    GTEST_DISALLOW_ASSIGN_(Impl);
-  };
-
-  const InnerMatcher matcher_;
-
-  GTEST_DISALLOW_ASSIGN_(OptionalMatcher);
-};
-
-// Creates a matcher that matches an Optional that has a value
-// that matches inner_matcher.
-template <typename InnerMatcher>
-inline OptionalMatcher<InnerMatcher>
-HasValue(const InnerMatcher &inner_matcher) {
-  return OptionalMatcher<InnerMatcher>(inner_matcher);
-}
-
-} // namespace clangd
-} // namespace clang
-#endif

Removed: clang-tools-extra/trunk/unittests/clangd/PrintASTTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/PrintASTTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/PrintASTTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/PrintASTTests.cpp (removed)
@@ -1,102 +0,0 @@
-//===--- PrintASTTests.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 "AST.h"
-#include "Annotations.h"
-#include "Protocol.h"
-#include "SourceCode.h"
-#include "TestTU.h"
-#include "clang/AST/RecursiveASTVisitor.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest-param-test.h"
-#include "gtest/gtest.h"
-#include "gtest/internal/gtest-param-util-generated.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-
-using testing::ElementsAreArray;
-
-struct Case {
-  const char *AnnotatedCode;
-  std::vector<const char *> Expected;
-};
-class ASTUtils : public testing::Test,
-                 public ::testing::WithParamInterface<Case> {};
-
-TEST_P(ASTUtils, PrintTemplateArgs) {
-  auto Pair = GetParam();
-  Annotations Test(Pair.AnnotatedCode);
-  auto AST = TestTU::withCode(Test.code()).build();
-  struct Visitor : RecursiveASTVisitor<Visitor> {
-    Visitor(std::vector<Position> Points) : Points(std::move(Points)) {}
-    bool VisitNamedDecl(const NamedDecl *ND) {
-      if (TemplateArgsAtPoints.size() == Points.size())
-        return true;
-      auto Pos = sourceLocToPosition(ND->getASTContext().getSourceManager(),
-                                     ND->getLocation());
-      if (Pos != Points[TemplateArgsAtPoints.size()])
-        return true;
-      TemplateArgsAtPoints.push_back(printTemplateSpecializationArgs(*ND));
-      return true;
-    }
-    std::vector<std::string> TemplateArgsAtPoints;
-    const std::vector<Position> Points;
-  };
-  Visitor V(Test.points());
-  V.TraverseDecl(AST.getASTContext().getTranslationUnitDecl());
-  EXPECT_THAT(V.TemplateArgsAtPoints, ElementsAreArray(Pair.Expected));
-}
-
-INSTANTIATE_TEST_CASE_P(ASTUtilsTests, ASTUtils,
-                        testing::ValuesIn(std::vector<Case>({
-                            {
-                                R"cpp(
-                                  template <class X> class Bar {};
-                                  template <> class ^Bar<double> {};)cpp",
-                                {"<double>"}},
-                            {
-                                R"cpp(
-                                  template <class X> class Bar {};
-                                  template <class T, class U,
-                                  template<typename> class Z, int Q>
-                                  struct Foo {};
-                                  template struct ^Foo<int, bool, Bar, 8>;
-                                  template <typename T>
-                                  struct ^Foo<T *, T, Bar, 3> {};)cpp",
-                                {"<int, bool, Bar, 8>", "<T *, T, Bar, 3>"}},
-                            {
-                                R"cpp(
-                                  template <int ...> void Foz() {};
-                                  template <> void ^Foz<3, 5, 8>() {};)cpp",
-                                {"<3, 5, 8>"}},
-                            {
-                                R"cpp(
-                                  template <class X> class Bar {};
-                                  template <template <class> class ...>
-                                  class Aux {};
-                                  template <> class ^Aux<Bar, Bar> {};
-                                  template <template <class> T>
-                                  class ^Aux<T, T> {};)cpp",
-                                {"<Bar, Bar>", "<T, T>"}},
-                            {
-                                R"cpp(
-                                  template <typename T> T var = 1234;
-                                  template <> int ^var<int> = 1;)cpp",
-                                {"<int>"}},
-                            {
-                                R"cpp(
-                                  template <typename T> struct Foo;
-                                  struct Bar { friend class Foo<int>; };
-                                  template <> struct ^Foo<int> {};)cpp",
-                                {"<int>"}},
-                        })));
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/QualityTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/QualityTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/QualityTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/QualityTests.cpp (removed)
@@ -1,483 +0,0 @@
-//===-- QualityTests.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
-//
-//===----------------------------------------------------------------------===//
-//
-// Evaluating scoring functions isn't a great fit for assert-based tests.
-// For interesting cases, both exact scores and "X beats Y" are too brittle to
-// make good hard assertions.
-//
-// Here we test the signal extraction and sanity-check that signals point in
-// the right direction. This should be supplemented by quality metrics which
-// we can compute from a corpus of queries and preferred rankings.
-//
-//===----------------------------------------------------------------------===//
-
-#include "FileDistance.h"
-#include "Quality.h"
-#include "TestFS.h"
-#include "TestTU.h"
-#include "clang/AST/Decl.h"
-#include "clang/AST/DeclCXX.h"
-#include "clang/AST/Type.h"
-#include "clang/Sema/CodeCompleteConsumer.h"
-#include "llvm/Support/Casting.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-#include <vector>
-
-namespace clang {
-namespace clangd {
-
-// Force the unittest URI scheme to be linked,
-static int LLVM_ATTRIBUTE_UNUSED UnittestSchemeAnchorDest =
-    UnittestSchemeAnchorSource;
-
-namespace {
-
-TEST(QualityTests, SymbolQualitySignalExtraction) {
-  auto Header = TestTU::withHeaderCode(R"cpp(
-    int _X;
-
-    [[deprecated]]
-    int _f() { return _X; }
-
-    #define DECL_NAME(x, y) x##_##y##_Decl
-    #define DECL(x, y) class DECL_NAME(x, y) {};
-    DECL(X, Y); // X_Y_Decl
-  )cpp");
-
-  auto Symbols = Header.headerSymbols();
-  auto AST = Header.build();
-
-  SymbolQualitySignals Quality;
-  Quality.merge(findSymbol(Symbols, "_X"));
-  EXPECT_FALSE(Quality.Deprecated);
-  EXPECT_FALSE(Quality.ImplementationDetail);
-  EXPECT_TRUE(Quality.ReservedName);
-  EXPECT_EQ(Quality.References, SymbolQualitySignals().References);
-  EXPECT_EQ(Quality.Category, SymbolQualitySignals::Variable);
-
-  Quality.merge(findSymbol(Symbols, "X_Y_Decl"));
-  EXPECT_TRUE(Quality.ImplementationDetail);
-
-  Symbol F = findSymbol(Symbols, "_f");
-  F.References = 24; // TestTU doesn't count references, so fake it.
-  Quality = {};
-  Quality.merge(F);
-  EXPECT_TRUE(Quality.Deprecated);
-  EXPECT_FALSE(Quality.ReservedName);
-  EXPECT_EQ(Quality.References, 24u);
-  EXPECT_EQ(Quality.Category, SymbolQualitySignals::Function);
-
-  Quality = {};
-  Quality.merge(CodeCompletionResult(&findDecl(AST, "_f"), /*Priority=*/42));
-  EXPECT_TRUE(Quality.Deprecated);
-  EXPECT_FALSE(Quality.ReservedName);
-  EXPECT_EQ(Quality.References, SymbolQualitySignals().References);
-  EXPECT_EQ(Quality.Category, SymbolQualitySignals::Function);
-
-  Quality = {};
-  Quality.merge(CodeCompletionResult("if"));
-  EXPECT_EQ(Quality.Category, SymbolQualitySignals::Keyword);
-}
-
-TEST(QualityTests, SymbolRelevanceSignalExtraction) {
-  TestTU Test;
-  Test.HeaderCode = R"cpp(
-  int header();
-  int header_main();
-
-  namespace hdr { class Bar {}; } // namespace hdr
-
-  #define DEFINE_FLAG(X) \
-  namespace flags { \
-  int FLAGS_##X; \
-  } \
-
-  DEFINE_FLAG(FOO)
-  )cpp";
-  Test.Code = R"cpp(
-  using hdr::Bar;
-
-  using flags::FLAGS_FOO;
-
-  int ::header_main() {}
-  int main();
-
-  [[deprecated]]
-  int deprecated() { return 0; }
-
-  namespace { struct X { void y() { int z; } }; }
-  struct S{}
-  )cpp";
-  auto AST = Test.build();
-
-  SymbolRelevanceSignals Relevance;
-  Relevance.merge(CodeCompletionResult(&findDecl(AST, "deprecated"),
-                                       /*Priority=*/42, nullptr, false,
-                                       /*Accessible=*/false));
-  EXPECT_EQ(Relevance.NameMatch, SymbolRelevanceSignals().NameMatch);
-  EXPECT_TRUE(Relevance.Forbidden);
-  EXPECT_EQ(Relevance.Scope, SymbolRelevanceSignals::GlobalScope);
-
-  Relevance = {};
-  Relevance.merge(CodeCompletionResult(&findDecl(AST, "main"), 42));
-  EXPECT_FLOAT_EQ(Relevance.SemaFileProximityScore, 1.0f)
-      << "Decl in current file";
-  Relevance = {};
-  Relevance.merge(CodeCompletionResult(&findDecl(AST, "header"), 42));
-  EXPECT_FLOAT_EQ(Relevance.SemaFileProximityScore, 0.6f) << "Decl from header";
-  Relevance = {};
-  Relevance.merge(CodeCompletionResult(&findDecl(AST, "header_main"), 42));
-  EXPECT_FLOAT_EQ(Relevance.SemaFileProximityScore, 1.0f)
-      << "Current file and header";
-
-  auto constructShadowDeclCompletionResult = [&](const std::string DeclName) {
-    auto *Shadow =
-        *dyn_cast<UsingDecl>(&findDecl(AST, [&](const NamedDecl &ND) {
-           if (const UsingDecl *Using = dyn_cast<UsingDecl>(&ND))
-             if (Using->shadow_size() &&
-                 Using->getQualifiedNameAsString() == DeclName)
-               return true;
-           return false;
-         }))->shadow_begin();
-    CodeCompletionResult Result(Shadow->getTargetDecl(), 42);
-    Result.ShadowDecl = Shadow;
-    return Result;
-  };
-
-  Relevance = {};
-  Relevance.merge(constructShadowDeclCompletionResult("Bar"));
-  EXPECT_FLOAT_EQ(Relevance.SemaFileProximityScore, 1.0f)
-      << "Using declaration in main file";
-  Relevance.merge(constructShadowDeclCompletionResult("FLAGS_FOO"));
-  EXPECT_FLOAT_EQ(Relevance.SemaFileProximityScore, 1.0f)
-      << "Using declaration in main file";
-
-  Relevance = {};
-  Relevance.merge(CodeCompletionResult(&findUnqualifiedDecl(AST, "X"), 42));
-  EXPECT_EQ(Relevance.Scope, SymbolRelevanceSignals::FileScope);
-  Relevance = {};
-  Relevance.merge(CodeCompletionResult(&findUnqualifiedDecl(AST, "y"), 42));
-  EXPECT_EQ(Relevance.Scope, SymbolRelevanceSignals::ClassScope);
-  Relevance = {};
-  Relevance.merge(CodeCompletionResult(&findUnqualifiedDecl(AST, "z"), 42));
-  EXPECT_EQ(Relevance.Scope, SymbolRelevanceSignals::FunctionScope);
-  // The injected class name is treated as the outer class name.
-  Relevance = {};
-  Relevance.merge(CodeCompletionResult(&findDecl(AST, "S::S"), 42));
-  EXPECT_EQ(Relevance.Scope, SymbolRelevanceSignals::GlobalScope);
-
-  Relevance = {};
-  EXPECT_FALSE(Relevance.InBaseClass);
-  auto BaseMember = CodeCompletionResult(&findUnqualifiedDecl(AST, "y"), 42);
-  BaseMember.InBaseClass = true;
-  Relevance.merge(BaseMember);
-  EXPECT_TRUE(Relevance.InBaseClass);
-
-  auto Index = Test.index();
-  FuzzyFindRequest Req;
-  Req.Query = "X";
-  Req.AnyScope = true;
-  bool Matched = false;
-  Index->fuzzyFind(Req, [&](const Symbol &S) {
-    Matched = true;
-    Relevance = {};
-    Relevance.merge(S);
-    EXPECT_EQ(Relevance.Scope, SymbolRelevanceSignals::FileScope);
-  });
-  EXPECT_TRUE(Matched);
-}
-
-// Do the signals move the scores in the direction we expect?
-TEST(QualityTests, SymbolQualitySignalsSanity) {
-  SymbolQualitySignals Default;
-  EXPECT_EQ(Default.evaluate(), 1);
-
-  SymbolQualitySignals Deprecated;
-  Deprecated.Deprecated = true;
-  EXPECT_LT(Deprecated.evaluate(), Default.evaluate());
-
-  SymbolQualitySignals ReservedName;
-  ReservedName.ReservedName = true;
-  EXPECT_LT(ReservedName.evaluate(), Default.evaluate());
-
-  SymbolQualitySignals ImplementationDetail;
-  ImplementationDetail.ImplementationDetail = true;
-  EXPECT_LT(ImplementationDetail.evaluate(), Default.evaluate());
-
-  SymbolQualitySignals WithReferences, ManyReferences;
-  WithReferences.References = 20;
-  ManyReferences.References = 1000;
-  EXPECT_GT(WithReferences.evaluate(), Default.evaluate());
-  EXPECT_GT(ManyReferences.evaluate(), WithReferences.evaluate());
-
-  SymbolQualitySignals Keyword, Variable, Macro, Constructor, Function,
-      Destructor, Operator;
-  Keyword.Category = SymbolQualitySignals::Keyword;
-  Variable.Category = SymbolQualitySignals::Variable;
-  Macro.Category = SymbolQualitySignals::Macro;
-  Constructor.Category = SymbolQualitySignals::Constructor;
-  Destructor.Category = SymbolQualitySignals::Destructor;
-  Destructor.Category = SymbolQualitySignals::Destructor;
-  Operator.Category = SymbolQualitySignals::Operator;
-  Function.Category = SymbolQualitySignals::Function;
-  EXPECT_GT(Variable.evaluate(), Default.evaluate());
-  EXPECT_GT(Keyword.evaluate(), Variable.evaluate());
-  EXPECT_LT(Macro.evaluate(), Default.evaluate());
-  EXPECT_LT(Operator.evaluate(), Default.evaluate());
-  EXPECT_LT(Constructor.evaluate(), Function.evaluate());
-  EXPECT_LT(Destructor.evaluate(), Constructor.evaluate());
-}
-
-TEST(QualityTests, SymbolRelevanceSignalsSanity) {
-  SymbolRelevanceSignals Default;
-  EXPECT_EQ(Default.evaluate(), 1);
-
-  SymbolRelevanceSignals Forbidden;
-  Forbidden.Forbidden = true;
-  EXPECT_LT(Forbidden.evaluate(), Default.evaluate());
-
-  SymbolRelevanceSignals PoorNameMatch;
-  PoorNameMatch.NameMatch = 0.2f;
-  EXPECT_LT(PoorNameMatch.evaluate(), Default.evaluate());
-
-  SymbolRelevanceSignals WithSemaFileProximity;
-  WithSemaFileProximity.SemaFileProximityScore = 0.2f;
-  EXPECT_GT(WithSemaFileProximity.evaluate(), Default.evaluate());
-
-  ScopeDistance ScopeProximity({"x::y::"});
-
-  SymbolRelevanceSignals WithSemaScopeProximity;
-  WithSemaScopeProximity.ScopeProximityMatch = &ScopeProximity;
-  WithSemaScopeProximity.SemaSaysInScope = true;
-  EXPECT_GT(WithSemaScopeProximity.evaluate(), Default.evaluate());
-
-  SymbolRelevanceSignals WithIndexScopeProximity;
-  WithIndexScopeProximity.ScopeProximityMatch = &ScopeProximity;
-  WithIndexScopeProximity.SymbolScope = "x::";
-  EXPECT_GT(WithSemaScopeProximity.evaluate(), Default.evaluate());
-
-  SymbolRelevanceSignals IndexProximate;
-  IndexProximate.SymbolURI = "unittest:/foo/bar.h";
-  llvm::StringMap<SourceParams> ProxSources;
-  ProxSources.try_emplace(testPath("foo/baz.h"));
-  URIDistance Distance(ProxSources);
-  IndexProximate.FileProximityMatch = &Distance;
-  EXPECT_GT(IndexProximate.evaluate(), Default.evaluate());
-  SymbolRelevanceSignals IndexDistant = IndexProximate;
-  IndexDistant.SymbolURI = "unittest:/elsewhere/path.h";
-  EXPECT_GT(IndexProximate.evaluate(), IndexDistant.evaluate())
-      << IndexProximate << IndexDistant;
-  EXPECT_GT(IndexDistant.evaluate(), Default.evaluate());
-
-  SymbolRelevanceSignals Scoped;
-  Scoped.Scope = SymbolRelevanceSignals::FileScope;
-  EXPECT_LT(Scoped.evaluate(), Default.evaluate());
-  Scoped.Query = SymbolRelevanceSignals::CodeComplete;
-  EXPECT_GT(Scoped.evaluate(), Default.evaluate());
-
-  SymbolRelevanceSignals Instance;
-  Instance.IsInstanceMember = false;
-  EXPECT_EQ(Instance.evaluate(), Default.evaluate());
-  Instance.Context = CodeCompletionContext::CCC_DotMemberAccess;
-  EXPECT_LT(Instance.evaluate(), Default.evaluate());
-  Instance.IsInstanceMember = true;
-  EXPECT_EQ(Instance.evaluate(), Default.evaluate());
-
-  SymbolRelevanceSignals InBaseClass;
-  InBaseClass.InBaseClass = true;
-  EXPECT_LT(InBaseClass.evaluate(), Default.evaluate());
-}
-
-TEST(QualityTests, ScopeProximity) {
-  SymbolRelevanceSignals Relevance;
-  ScopeDistance ScopeProximity({"x::y::z::", "x::", "llvm::", ""});
-  Relevance.ScopeProximityMatch = &ScopeProximity;
-
-  Relevance.SymbolScope = "other::";
-  float NotMatched = Relevance.evaluate();
-
-  Relevance.SymbolScope = "";
-  float Global = Relevance.evaluate();
-  EXPECT_GT(Global, NotMatched);
-
-  Relevance.SymbolScope = "llvm::";
-  float NonParent = Relevance.evaluate();
-  EXPECT_GT(NonParent, Global);
-
-  Relevance.SymbolScope = "x::";
-  float GrandParent = Relevance.evaluate();
-  EXPECT_GT(GrandParent, Global);
-
-  Relevance.SymbolScope = "x::y::";
-  float Parent = Relevance.evaluate();
-  EXPECT_GT(Parent, GrandParent);
-
-  Relevance.SymbolScope = "x::y::z::";
-  float Enclosing = Relevance.evaluate();
-  EXPECT_GT(Enclosing, Parent);
-}
-
-TEST(QualityTests, SortText) {
-  EXPECT_LT(sortText(std::numeric_limits<float>::infinity()),
-            sortText(1000.2f));
-  EXPECT_LT(sortText(1000.2f), sortText(1));
-  EXPECT_LT(sortText(1), sortText(0.3f));
-  EXPECT_LT(sortText(0.3f), sortText(0));
-  EXPECT_LT(sortText(0), sortText(-10));
-  EXPECT_LT(sortText(-10), sortText(-std::numeric_limits<float>::infinity()));
-
-  EXPECT_LT(sortText(1, "z"), sortText(0, "a"));
-  EXPECT_LT(sortText(0, "a"), sortText(0, "z"));
-}
-
-TEST(QualityTests, NoBoostForClassConstructor) {
-  auto Header = TestTU::withHeaderCode(R"cpp(
-    class Foo {
-    public:
-      Foo(int);
-    };
-  )cpp");
-  auto Symbols = Header.headerSymbols();
-  auto AST = Header.build();
-
-  const NamedDecl *Foo = &findDecl(AST, "Foo");
-  SymbolRelevanceSignals Cls;
-  Cls.merge(CodeCompletionResult(Foo, /*Priority=*/0));
-
-  const NamedDecl *CtorDecl = &findDecl(AST, [](const NamedDecl &ND) {
-    return (ND.getQualifiedNameAsString() == "Foo::Foo") &&
-           isa<CXXConstructorDecl>(&ND);
-  });
-  SymbolRelevanceSignals Ctor;
-  Ctor.merge(CodeCompletionResult(CtorDecl, /*Priority=*/0));
-
-  EXPECT_EQ(Cls.Scope, SymbolRelevanceSignals::GlobalScope);
-  EXPECT_EQ(Ctor.Scope, SymbolRelevanceSignals::GlobalScope);
-}
-
-TEST(QualityTests, IsInstanceMember) {
-  auto Header = TestTU::withHeaderCode(R"cpp(
-    class Foo {
-    public:
-      static void foo() {}
-
-      template <typename T> void tpl(T *t) {}
-
-      void bar() {}
-    };
-  )cpp");
-  auto Symbols = Header.headerSymbols();
-
-  SymbolRelevanceSignals Rel;
-  const Symbol &FooSym = findSymbol(Symbols, "Foo::foo");
-  Rel.merge(FooSym);
-  EXPECT_FALSE(Rel.IsInstanceMember);
-  const Symbol &BarSym = findSymbol(Symbols, "Foo::bar");
-  Rel.merge(BarSym);
-  EXPECT_TRUE(Rel.IsInstanceMember);
-
-  Rel.IsInstanceMember = false;
-  const Symbol &TplSym = findSymbol(Symbols, "Foo::tpl");
-  Rel.merge(TplSym);
-  EXPECT_TRUE(Rel.IsInstanceMember);
-
-  auto AST = Header.build();
-  const NamedDecl *Foo = &findDecl(AST, "Foo::foo");
-  const NamedDecl *Bar = &findDecl(AST, "Foo::bar");
-  const NamedDecl *Tpl = &findDecl(AST, "Foo::tpl");
-
-  Rel.IsInstanceMember = false;
-  Rel.merge(CodeCompletionResult(Foo, /*Priority=*/0));
-  EXPECT_FALSE(Rel.IsInstanceMember);
-  Rel.merge(CodeCompletionResult(Bar, /*Priority=*/0));
-  EXPECT_TRUE(Rel.IsInstanceMember);
-  Rel.IsInstanceMember = false;
-  Rel.merge(CodeCompletionResult(Tpl, /*Priority=*/0));
-  EXPECT_TRUE(Rel.IsInstanceMember);
-}
-
-TEST(QualityTests, ConstructorDestructor) {
-  auto Header = TestTU::withHeaderCode(R"cpp(
-    class Foo {
-    public:
-      Foo(int);
-      ~Foo();
-    };
-  )cpp");
-  auto Symbols = Header.headerSymbols();
-  auto AST = Header.build();
-
-  const NamedDecl *CtorDecl = &findDecl(AST, [](const NamedDecl &ND) {
-    return (ND.getQualifiedNameAsString() == "Foo::Foo") &&
-           isa<CXXConstructorDecl>(&ND);
-  });
-  const NamedDecl *DtorDecl = &findDecl(AST, [](const NamedDecl &ND) {
-    return (ND.getQualifiedNameAsString() == "Foo::~Foo") &&
-           isa<CXXDestructorDecl>(&ND);
-  });
-
-  SymbolQualitySignals CtorQ;
-  CtorQ.merge(CodeCompletionResult(CtorDecl, /*Priority=*/0));
-  EXPECT_EQ(CtorQ.Category, SymbolQualitySignals::Constructor);
-
-  CtorQ.Category = SymbolQualitySignals::Unknown;
-  const Symbol &CtorSym = findSymbol(Symbols, "Foo::Foo");
-  CtorQ.merge(CtorSym);
-  EXPECT_EQ(CtorQ.Category, SymbolQualitySignals::Constructor);
-
-  SymbolQualitySignals DtorQ;
-  DtorQ.merge(CodeCompletionResult(DtorDecl, /*Priority=*/0));
-  EXPECT_EQ(DtorQ.Category, SymbolQualitySignals::Destructor);
-}
-
-TEST(QualityTests, Operator) {
-  auto Header = TestTU::withHeaderCode(R"cpp(
-    class Foo {
-    public:
-      bool operator<(const Foo& f1);
-    };
-  )cpp");
-  auto AST = Header.build();
-
-  const NamedDecl *Operator = &findDecl(AST, [](const NamedDecl &ND) {
-    if (const auto *OD = dyn_cast<FunctionDecl>(&ND))
-      if (OD->isOverloadedOperator())
-        return true;
-    return false;
-  });
-  SymbolQualitySignals Q;
-  Q.merge(CodeCompletionResult(Operator, /*Priority=*/0));
-  EXPECT_EQ(Q.Category, SymbolQualitySignals::Operator);
-}
-
-TEST(QualityTests, ItemWithFixItsRankedDown) {
-  CodeCompleteOptions Opts;
-  Opts.IncludeFixIts = true;
-
-  auto Header = TestTU::withHeaderCode(R"cpp(
-        int x;
-      )cpp");
-  auto AST = Header.build();
-
-  SymbolRelevanceSignals RelevanceWithFixIt;
-  RelevanceWithFixIt.merge(CodeCompletionResult(&findDecl(AST, "x"), 0, nullptr,
-                                                false, true, {FixItHint{}}));
-  EXPECT_TRUE(RelevanceWithFixIt.NeedsFixIts);
-
-  SymbolRelevanceSignals RelevanceWithoutFixIt;
-  RelevanceWithoutFixIt.merge(
-      CodeCompletionResult(&findDecl(AST, "x"), 0, nullptr, false, true, {}));
-  EXPECT_FALSE(RelevanceWithoutFixIt.NeedsFixIts);
-
-  EXPECT_LT(RelevanceWithFixIt.evaluate(), RelevanceWithoutFixIt.evaluate());
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/RIFFTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/RIFFTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/RIFFTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/RIFFTests.cpp (removed)
@@ -1,37 +0,0 @@
-//===-- RIFFTests.cpp - Binary container unit tests -----------------------===//
-//
-// 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 "RIFF.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-using ::testing::ElementsAre;
-
-TEST(RIFFTest, File) {
-  riff::File File{riff::fourCC("test"),
-                  {
-                      {riff::fourCC("even"), "abcd"},
-                      {riff::fourCC("oddd"), "abcde"},
-                  }};
-  llvm::StringRef Serialized = llvm::StringRef("RIFF\x1e\0\0\0test"
-                                               "even\x04\0\0\0abcd"
-                                               "oddd\x05\0\0\0abcde\0",
-                                               38);
-
-  EXPECT_EQ(llvm::to_string(File), Serialized);
-  auto Parsed = riff::readFile(Serialized);
-  ASSERT_TRUE(bool(Parsed)) << Parsed.takeError();
-  EXPECT_EQ(*Parsed, File);
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/SelectionTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/SelectionTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/SelectionTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/SelectionTests.cpp (removed)
@@ -1,259 +0,0 @@
-//===-- SelectionTests.cpp - ----------------------------------------------===//
-//
-// 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 "Annotations.h"
-#include "Selection.h"
-#include "SourceCode.h"
-#include "TestTU.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-using ::testing::UnorderedElementsAreArray;
-
-SelectionTree makeSelectionTree(const StringRef MarkedCode, ParsedAST &AST) {
-  Annotations Test(MarkedCode);
-  switch (Test.points().size()) {
-  case 1: // Point selection.
-    return SelectionTree(AST.getASTContext(),
-                         cantFail(positionToOffset(Test.code(), Test.point())));
-  case 2: // Range selection.
-    return SelectionTree(
-        AST.getASTContext(),
-        cantFail(positionToOffset(Test.code(), Test.points()[0])),
-        cantFail(positionToOffset(Test.code(), Test.points()[1])));
-  default:
-    ADD_FAILURE() << "Expected 1-2 points for selection.\n" << MarkedCode;
-    return SelectionTree(AST.getASTContext(), 0u, 0u);
-  }
-}
-
-Range nodeRange(const SelectionTree::Node *N, ParsedAST &AST) {
-  if (!N)
-    return Range{};
-  SourceManager &SM = AST.getASTContext().getSourceManager();
-  StringRef Buffer = SM.getBufferData(SM.getMainFileID());
-  SourceRange SR = N->ASTNode.getSourceRange();
-  SR.setBegin(SM.getFileLoc(SR.getBegin()));
-  SR.setEnd(SM.getFileLoc(SR.getEnd()));
-  CharSourceRange R =
-      Lexer::getAsCharRange(SR, SM, AST.getASTContext().getLangOpts());
-  return Range{offsetToPosition(Buffer, SM.getFileOffset(R.getBegin())),
-               offsetToPosition(Buffer, SM.getFileOffset(R.getEnd()))};
-}
-
-std::string nodeKind(const SelectionTree::Node *N) {
-  if (!N)
-    return "<null>";
-  return N->ASTNode.getNodeKind().asStringRef().str();
-}
-
-std::vector<const SelectionTree::Node *> allNodes(const SelectionTree &T) {
-  std::vector<const SelectionTree::Node *> Result = {T.root()};
-  for (unsigned I = 0; I < Result.size(); ++I) {
-    const SelectionTree::Node *N = Result[I];
-    Result.insert(Result.end(), N->Children.begin(), N->Children.end());
-  }
-  return Result;
-}
-
-// Returns true if Common is a descendent of Root.
-// Verifies nothing is selected above Common.
-bool verifyCommonAncestor(const SelectionTree::Node *Root,
-                          const SelectionTree::Node *Common,
-                          StringRef MarkedCode) {
-  if (Root == Common)
-    return true;
-  if (Root->Selected)
-    ADD_FAILURE() << "Selected nodes outside common ancestor\n" << MarkedCode;
-  bool Seen = false;
-  for (const SelectionTree::Node *Child : Root->Children)
-    if (verifyCommonAncestor(Child, Common, MarkedCode)) {
-      if (Seen)
-        ADD_FAILURE() << "Saw common ancestor twice\n" << MarkedCode;
-      Seen = true;
-    }
-  return Seen;
-}
-
-TEST(SelectionTest, CommonAncestor) {
-  struct Case {
-    // Selection is between ^marks^.
-    // common ancestor marked with a [[range]].
-    const char *Code;
-    const char *CommonAncestorKind;
-  };
-  Case Cases[] = {
-      {
-          R"cpp(
-            struct AAA { struct BBB { static int ccc(); };};
-            int x = AAA::[[B^B^B]]::ccc();
-          )cpp",
-          "TypeLoc",
-      },
-      {
-          R"cpp(
-            struct AAA { struct BBB { static int ccc(); };};
-            int x = AAA::[[B^BB^]]::ccc();
-          )cpp",
-          "TypeLoc",
-      },
-      {
-          R"cpp(
-            struct AAA { struct BBB { static int ccc(); };};
-            int x = [[AAA::BBB::c^c^c]]();
-          )cpp",
-          "DeclRefExpr",
-      },
-      {
-          R"cpp(
-            struct AAA { struct BBB { static int ccc(); };};
-            int x = [[AAA::BBB::cc^c(^)]];
-          )cpp",
-          "CallExpr",
-      },
-
-      {
-          R"cpp(
-            void foo() { [[if (1^11) { return; } else {^ }]] }
-          )cpp",
-          "IfStmt",
-      },
-      {
-          R"cpp(
-            void foo();
-            #define CALL_FUNCTION(X) X()
-            void bar() { CALL_FUNCTION([[f^o^o]]); }
-          )cpp",
-          "DeclRefExpr",
-      },
-      {
-          R"cpp(
-            void foo();
-            #define CALL_FUNCTION(X) X()
-            void bar() { CALL_FUNC^TION([[fo^o]]); }
-          )cpp",
-          "DeclRefExpr",
-      },
-      {
-          R"cpp(
-            void foo();
-            #define CALL_FUNCTION(X) X()
-            void bar() [[{ C^ALL_FUNC^TION(foo); }]]
-          )cpp",
-          "CompoundStmt",
-      },
-      {
-          R"cpp(
-            void foo();
-            #define CALL_FUNCTION(X) X^()^
-            void bar() { CALL_FUNCTION(foo); }
-          )cpp",
-          nullptr,
-      },
-
-      // Point selections.
-      {"void foo() { [[^foo]](); }", "DeclRefExpr"},
-      {"void foo() { [[f^oo]](); }", "DeclRefExpr"},
-      {"void foo() { [[fo^o]](); }", "DeclRefExpr"},
-      {"void foo() { [[foo^()]]; }", "CallExpr"},
-      {"void foo() { [[foo^]] (); }", "DeclRefExpr"},
-      {"int bar; void foo() [[{ foo (); }]]^", "CompoundStmt"},
-      {"[[^void]] foo();", "TypeLoc"},
-      {"^", nullptr},
-      {"void foo() { [[foo^^]] (); }", "DeclRefExpr"},
-
-      // FIXME: Ideally we'd get a declstmt or the VarDecl itself here.
-      // This doesn't happen now; the RAV doesn't traverse a node containing ;.
-      {"int x = 42;^", nullptr},
-      {"int x = 42^;", nullptr},
-
-      // Node types that have caused problems in the past.
-      {"template <typename T> void foo() { [[^T]] t; }", "TypeLoc"},
-
-      // No crash
-      {
-          R"cpp(
-            template <class T> struct Foo {};
-            template <[[template<class> class /*cursor here*/^U]]>
-             struct Foo<U<int>*> {};
-          )cpp",
-          "TemplateTemplateParmDecl"
-      },
-  };
-  for (const Case &C : Cases) {
-    Annotations Test(C.Code);
-    auto AST = TestTU::withCode(Test.code()).build();
-    auto T = makeSelectionTree(C.Code, AST);
-
-    if (Test.ranges().empty()) {
-      // If no [[range]] is marked in the example, there should be no selection.
-      EXPECT_FALSE(T.commonAncestor()) << C.Code << "\n" << T;
-      EXPECT_FALSE(T.root()) << C.Code << "\n" << T;
-    } else {
-      // If there is an expected selection, both common ancestor and root
-      // should exist with the appropriate node types in them.
-      EXPECT_EQ(C.CommonAncestorKind, nodeKind(T.commonAncestor()))
-          << C.Code << "\n"
-          << T;
-      EXPECT_EQ("TranslationUnitDecl", nodeKind(T.root())) << C.Code;
-      // Convert the reported common ancestor to a range and verify it.
-      EXPECT_EQ(nodeRange(T.commonAncestor(), AST), Test.range())
-          << C.Code << "\n"
-          << T;
-
-      // Check that common ancestor is reachable on exactly one path from root,
-      // and no nodes outside it are selected.
-      EXPECT_TRUE(verifyCommonAncestor(T.root(), T.commonAncestor(), C.Code))
-          << C.Code;
-    }
-  }
-}
-
-TEST(SelectionTest, Selected) {
-  // Selection with ^marks^.
-  // Partially selected nodes marked with a [[range]].
-  // Completely selected nodes marked with a $C[[range]].
-  const char *Cases[] = {
-      R"cpp( int abc, xyz = [[^ab^c]]; )cpp",
-      R"cpp( int abc, xyz = [[a^bc^]]; )cpp",
-      R"cpp( int abc, xyz = $C[[^abc^]]; )cpp",
-      R"cpp(
-        void foo() {
-          [[if ([[1^11]]) $C[[{
-            $C[[return]];
-          }]] else [[{^
-          }]]]]
-        }
-      )cpp",
-      R"cpp(
-          template <class T>
-          struct unique_ptr {};
-          void foo(^$C[[unique_ptr<unique_ptr<$C[[int]]>>]]^ a) {}
-      )cpp",
-  };
-  for (const char *C : Cases) {
-    Annotations Test(C);
-    auto AST = TestTU::withCode(Test.code()).build();
-    auto T = makeSelectionTree(C, AST);
-
-    std::vector<Range> Complete, Partial;
-    for (const SelectionTree::Node *N : allNodes(T))
-      if (N->Selected == SelectionTree::Complete)
-        Complete.push_back(nodeRange(N, AST));
-      else if (N->Selected == SelectionTree::Partial)
-        Partial.push_back(nodeRange(N, AST));
-    EXPECT_THAT(Complete, UnorderedElementsAreArray(Test.ranges("C"))) << C;
-    EXPECT_THAT(Partial, UnorderedElementsAreArray(Test.ranges())) << C;
-  }
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/SerializationTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/SerializationTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/SerializationTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/SerializationTests.cpp (removed)
@@ -1,219 +0,0 @@
-//===-- SerializationTests.cpp - Binary and YAML serialization unit tests -===//
-//
-// 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 "index/Index.h"
-#include "index/Serialization.h"
-#include "llvm/Support/SHA1.h"
-#include "llvm/Support/ScopedPrinter.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-using testing::_;
-using testing::AllOf;
-using testing::Pair;
-using testing::UnorderedElementsAre;
-using testing::UnorderedElementsAreArray;
-
-namespace clang {
-namespace clangd {
-namespace {
-
-const char *YAML = R"(
----
-!Symbol
-ID: 057557CEBF6E6B2D
-Name:   'Foo1'
-Scope:   'clang::'
-SymInfo:
-  Kind:            Function
-  Lang:            Cpp
-CanonicalDeclaration:
-  FileURI:        file:///path/foo.h
-  Start:
-    Line: 1
-    Column: 0
-  End:
-    Line: 1
-    Column: 1
-Origin:    4
-Flags:    1
-Documentation:    'Foo doc'
-ReturnType:    'int'
-IncludeHeaders:
-  - Header:    'include1'
-    References:    7
-  - Header:    'include2'
-    References:    3
-...
----
-!Symbol
-ID: 057557CEBF6E6B2E
-Name:   'Foo2'
-Scope:   'clang::'
-SymInfo:
-  Kind:            Function
-  Lang:            Cpp
-CanonicalDeclaration:
-  FileURI:        file:///path/bar.h
-  Start:
-    Line: 1
-    Column: 0
-  End:
-    Line: 1
-    Column: 1
-Flags:    2
-Signature:    '-sig'
-CompletionSnippetSuffix:    '-snippet'
-...
-!Refs
-ID: 057557CEBF6E6B2D
-References:
-  - Kind: 4
-    Location:
-      FileURI:    file:///path/foo.cc
-      Start:
-        Line: 5
-        Column: 3
-      End:
-        Line: 5
-        Column: 8
-)";
-
-MATCHER_P(ID, I, "") { return arg.ID == cantFail(SymbolID::fromStr(I)); }
-MATCHER_P(QName, Name, "") { return (arg.Scope + arg.Name).str() == Name; }
-MATCHER_P2(IncludeHeaderWithRef, IncludeHeader, References, "") {
-  return (arg.IncludeHeader == IncludeHeader) && (arg.References == References);
-}
-
-TEST(SerializationTest, NoCrashOnEmptyYAML) {
-  EXPECT_TRUE(bool(readIndexFile("")));
-}
-
-TEST(SerializationTest, YAMLConversions) {
-  auto In = readIndexFile(YAML);
-  EXPECT_TRUE(bool(In)) << In.takeError();
-
-  auto ParsedYAML = readIndexFile(YAML);
-  ASSERT_TRUE(bool(ParsedYAML)) << ParsedYAML.takeError();
-  ASSERT_TRUE(bool(ParsedYAML->Symbols));
-  EXPECT_THAT(
-      *ParsedYAML->Symbols,
-      UnorderedElementsAre(ID("057557CEBF6E6B2D"), ID("057557CEBF6E6B2E")));
-
-  auto Sym1 = *ParsedYAML->Symbols->find(
-      cantFail(SymbolID::fromStr("057557CEBF6E6B2D")));
-  auto Sym2 = *ParsedYAML->Symbols->find(
-      cantFail(SymbolID::fromStr("057557CEBF6E6B2E")));
-
-  EXPECT_THAT(Sym1, QName("clang::Foo1"));
-  EXPECT_EQ(Sym1.Signature, "");
-  EXPECT_EQ(Sym1.Documentation, "Foo doc");
-  EXPECT_EQ(Sym1.ReturnType, "int");
-  EXPECT_EQ(StringRef(Sym1.CanonicalDeclaration.FileURI), "file:///path/foo.h");
-  EXPECT_EQ(Sym1.Origin, SymbolOrigin::Static);
-  EXPECT_TRUE(Sym1.Flags & Symbol::IndexedForCodeCompletion);
-  EXPECT_FALSE(Sym1.Flags & Symbol::Deprecated);
-  EXPECT_THAT(Sym1.IncludeHeaders,
-              UnorderedElementsAre(IncludeHeaderWithRef("include1", 7u),
-                                   IncludeHeaderWithRef("include2", 3u)));
-
-  EXPECT_THAT(Sym2, QName("clang::Foo2"));
-  EXPECT_EQ(Sym2.Signature, "-sig");
-  EXPECT_EQ(Sym2.ReturnType, "");
-  EXPECT_EQ(llvm::StringRef(Sym2.CanonicalDeclaration.FileURI),
-            "file:///path/bar.h");
-  EXPECT_FALSE(Sym2.Flags & Symbol::IndexedForCodeCompletion);
-  EXPECT_TRUE(Sym2.Flags & Symbol::Deprecated);
-
-  ASSERT_TRUE(bool(ParsedYAML->Refs));
-  EXPECT_THAT(
-      *ParsedYAML->Refs,
-      UnorderedElementsAre(Pair(cantFail(SymbolID::fromStr("057557CEBF6E6B2D")),
-                                testing::SizeIs(1))));
-  auto Ref1 = ParsedYAML->Refs->begin()->second.front();
-  EXPECT_EQ(Ref1.Kind, RefKind::Reference);
-  EXPECT_EQ(StringRef(Ref1.Location.FileURI), "file:///path/foo.cc");
-}
-
-std::vector<std::string> YAMLFromSymbols(const SymbolSlab &Slab) {
-  std::vector<std::string> Result;
-  for (const auto &Sym : Slab)
-    Result.push_back(toYAML(Sym));
-  return Result;
-}
-std::vector<std::string> YAMLFromRefs(const RefSlab &Slab) {
-  std::vector<std::string> Result;
-  for (const auto &Sym : Slab)
-    Result.push_back(toYAML(Sym));
-  return Result;
-}
-
-TEST(SerializationTest, BinaryConversions) {
-  auto In = readIndexFile(YAML);
-  EXPECT_TRUE(bool(In)) << In.takeError();
-
-  // Write to binary format, and parse again.
-  IndexFileOut Out(*In);
-  Out.Format = IndexFileFormat::RIFF;
-  std::string Serialized = llvm::to_string(Out);
-
-  auto In2 = readIndexFile(Serialized);
-  ASSERT_TRUE(bool(In2)) << In.takeError();
-  ASSERT_TRUE(In2->Symbols);
-  ASSERT_TRUE(In2->Refs);
-
-  // Assert the YAML serializations match, for nice comparisons and diffs.
-  EXPECT_THAT(YAMLFromSymbols(*In2->Symbols),
-              UnorderedElementsAreArray(YAMLFromSymbols(*In->Symbols)));
-  EXPECT_THAT(YAMLFromRefs(*In2->Refs),
-              UnorderedElementsAreArray(YAMLFromRefs(*In->Refs)));
-}
-
-TEST(SerializationTest, SrcsTest) {
-  auto In = readIndexFile(YAML);
-  EXPECT_TRUE(bool(In)) << In.takeError();
-
-  std::string TestContent("TestContent");
-  IncludeGraphNode IGN;
-  IGN.Digest =
-      llvm::SHA1::hash({reinterpret_cast<const uint8_t *>(TestContent.data()),
-                        TestContent.size()});
-  IGN.DirectIncludes = {"inc1", "inc2"};
-  IGN.URI = "URI";
-  IGN.IsTU = true;
-  IncludeGraph Sources;
-  Sources[IGN.URI] = IGN;
-  // Write to binary format, and parse again.
-  IndexFileOut Out(*In);
-  Out.Format = IndexFileFormat::RIFF;
-  Out.Sources = &Sources;
-  {
-    std::string Serialized = llvm::to_string(Out);
-
-    auto In = readIndexFile(Serialized);
-    ASSERT_TRUE(bool(In)) << In.takeError();
-    ASSERT_TRUE(In->Symbols);
-    ASSERT_TRUE(In->Refs);
-    ASSERT_TRUE(In->Sources);
-    ASSERT_TRUE(In->Sources->count(IGN.URI));
-    // Assert the YAML serializations match, for nice comparisons and diffs.
-    EXPECT_THAT(YAMLFromSymbols(*In->Symbols),
-                UnorderedElementsAreArray(YAMLFromSymbols(*In->Symbols)));
-    EXPECT_THAT(YAMLFromRefs(*In->Refs),
-                UnorderedElementsAreArray(YAMLFromRefs(*In->Refs)));
-    auto IGNDeserialized = In->Sources->lookup(IGN.URI);
-    EXPECT_EQ(IGNDeserialized.Digest, IGN.Digest);
-    EXPECT_EQ(IGNDeserialized.DirectIncludes, IGN.DirectIncludes);
-    EXPECT_EQ(IGNDeserialized.URI, IGN.URI);
-    EXPECT_EQ(IGNDeserialized.IsTU, IGN.IsTU);
-  }
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/SourceCodeTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/SourceCodeTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/SourceCodeTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/SourceCodeTests.cpp (removed)
@@ -1,395 +0,0 @@
-//===-- SourceCodeTests.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 "Annotations.h"
-#include "Context.h"
-#include "Protocol.h"
-#include "SourceCode.h"
-#include "clang/Format/Format.h"
-#include "llvm/Support/Error.h"
-#include "llvm/Support/raw_os_ostream.h"
-#include "llvm/Testing/Support/Error.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-
-using llvm::Failed;
-using llvm::HasValue;
-
-MATCHER_P2(Pos, Line, Col, "") {
-  return arg.line == int(Line) && arg.character == int(Col);
-}
-
-/// A helper to make tests easier to read.
-Position position(int line, int character) {
-  Position Pos;
-  Pos.line = line;
-  Pos.character = character;
-  return Pos;
-}
-
-Range range(const std::pair<int, int> p1, const std::pair<int, int> p2) {
-  Range range;
-  range.start = position(p1.first, p1.second);
-  range.end = position(p2.first, p2.second);
-  return range;
-}
-
-TEST(SourceCodeTests, lspLength) {
-  EXPECT_EQ(lspLength(""), 0UL);
-  EXPECT_EQ(lspLength("ascii"), 5UL);
-  // BMP
-  EXPECT_EQ(lspLength("↓"), 1UL);
-  EXPECT_EQ(lspLength("Â¥"), 1UL);
-  // astral
-  EXPECT_EQ(lspLength("😂"), 2UL);
-
-  WithContextValue UTF8(kCurrentOffsetEncoding, OffsetEncoding::UTF8);
-  EXPECT_EQ(lspLength(""), 0UL);
-  EXPECT_EQ(lspLength("ascii"), 5UL);
-  // BMP
-  EXPECT_EQ(lspLength("↓"), 3UL);
-  EXPECT_EQ(lspLength("Â¥"), 2UL);
-  // astral
-  EXPECT_EQ(lspLength("😂"), 4UL);
-
-  WithContextValue UTF32(kCurrentOffsetEncoding, OffsetEncoding::UTF32);
-  EXPECT_EQ(lspLength(""), 0UL);
-  EXPECT_EQ(lspLength("ascii"), 5UL);
-  // BMP
-  EXPECT_EQ(lspLength("↓"), 1UL);
-  EXPECT_EQ(lspLength("Â¥"), 1UL);
-  // astral
-  EXPECT_EQ(lspLength("😂"), 1UL);
-}
-
-// The = → 🡆 below are ASCII (1 byte), BMP (3 bytes), and astral (4 bytes).
-const char File[] = R"(0:0 = 0
-1:0 → 8
-2:0 🡆 18)";
-struct Line {
-  unsigned Number;
-  unsigned Offset;
-  unsigned Length;
-};
-Line FileLines[] = {Line{0, 0, 7}, Line{1, 8, 9}, Line{2, 18, 11}};
-
-TEST(SourceCodeTests, PositionToOffset) {
-  // line out of bounds
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(-1, 2)), llvm::Failed());
-  // first line
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(0, -1)),
-                       llvm::Failed()); // out of range
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(0, 0)),
-                       llvm::HasValue(0)); // first character
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(0, 3)),
-                       llvm::HasValue(3)); // middle character
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(0, 6)),
-                       llvm::HasValue(6)); // last character
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(0, 7)),
-                       llvm::HasValue(7)); // the newline itself
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(0, 7), false),
-                       llvm::HasValue(7));
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(0, 8)),
-                       llvm::HasValue(7)); // out of range
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(0, 8), false),
-                       llvm::Failed()); // out of range
-  // middle line
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(1, -1)),
-                       llvm::Failed()); // out of range
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(1, 0)),
-                       llvm::HasValue(8)); // first character
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(1, 3)),
-                       llvm::HasValue(11)); // middle character
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(1, 3), false),
-                       llvm::HasValue(11));
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(1, 6)),
-                       llvm::HasValue(16)); // last character
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(1, 7)),
-                       llvm::HasValue(17)); // the newline itself
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(1, 8)),
-                       llvm::HasValue(17)); // out of range
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(1, 8), false),
-                       llvm::Failed()); // out of range
-  // last line
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(2, -1)),
-                       llvm::Failed()); // out of range
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(2, 0)),
-                       llvm::HasValue(18)); // first character
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(2, 3)),
-                       llvm::HasValue(21)); // middle character
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(2, 5), false),
-                       llvm::Failed()); // middle of surrogate pair
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(2, 5)),
-                       llvm::HasValue(26)); // middle of surrogate pair
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(2, 6), false),
-                       llvm::HasValue(26)); // end of surrogate pair
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(2, 8)),
-                       llvm::HasValue(28)); // last character
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(2, 9)),
-                       llvm::HasValue(29)); // EOF
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(2, 10), false),
-                       llvm::Failed()); // out of range
-  // line out of bounds
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(3, 0)), llvm::Failed());
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(3, 1)), llvm::Failed());
-
-  // Codepoints are similar, except near astral characters.
-  WithContextValue UTF32(kCurrentOffsetEncoding, OffsetEncoding::UTF32);
-  // line out of bounds
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(-1, 2)), llvm::Failed());
-  // first line
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(0, -1)),
-                       llvm::Failed()); // out of range
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(0, 0)),
-                       llvm::HasValue(0)); // first character
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(0, 3)),
-                       llvm::HasValue(3)); // middle character
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(0, 6)),
-                       llvm::HasValue(6)); // last character
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(0, 7)),
-                       llvm::HasValue(7)); // the newline itself
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(0, 7), false),
-                       llvm::HasValue(7));
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(0, 8)),
-                       llvm::HasValue(7)); // out of range
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(0, 8), false),
-                       llvm::Failed()); // out of range
-  // middle line
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(1, -1)),
-                       llvm::Failed()); // out of range
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(1, 0)),
-                       llvm::HasValue(8)); // first character
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(1, 3)),
-                       llvm::HasValue(11)); // middle character
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(1, 3), false),
-                       llvm::HasValue(11));
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(1, 6)),
-                       llvm::HasValue(16)); // last character
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(1, 7)),
-                       llvm::HasValue(17)); // the newline itself
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(1, 8)),
-                       llvm::HasValue(17)); // out of range
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(1, 8), false),
-                       llvm::Failed()); // out of range
-  // last line
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(2, -1)),
-                       llvm::Failed()); // out of range
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(2, 0)),
-                       llvm::HasValue(18)); // first character
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(2, 4)),
-                       llvm::HasValue(22)); // Before astral character.
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(2, 5), false),
-                       llvm::HasValue(26)); // after astral character
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(2, 7)),
-                       llvm::HasValue(28)); // last character
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(2, 8)),
-                       llvm::HasValue(29)); // EOF
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(2, 9), false),
-                       llvm::Failed()); // out of range
-  // line out of bounds
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(3, 0)), llvm::Failed());
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(3, 1)), llvm::Failed());
-
-  // Test UTF-8, where transformations are trivial.
-  WithContextValue UTF8(kCurrentOffsetEncoding, OffsetEncoding::UTF8);
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(-1, 2)), llvm::Failed());
-  EXPECT_THAT_EXPECTED(positionToOffset(File, position(3, 0)), llvm::Failed());
-  for (Line L : FileLines) {
-    EXPECT_THAT_EXPECTED(positionToOffset(File, position(L.Number, -1)),
-                         llvm::Failed()); // out of range
-    for (unsigned I = 0; I <= L.Length; ++I)
-      EXPECT_THAT_EXPECTED(positionToOffset(File, position(L.Number, I)),
-                           llvm::HasValue(L.Offset + I));
-    EXPECT_THAT_EXPECTED(positionToOffset(File, position(L.Number, L.Length+1)),
-                         llvm::HasValue(L.Offset + L.Length));
-    EXPECT_THAT_EXPECTED(
-        positionToOffset(File, position(L.Number, L.Length + 1), false),
-        llvm::Failed()); // out of range
-  }
-}
-
-TEST(SourceCodeTests, OffsetToPosition) {
-  EXPECT_THAT(offsetToPosition(File, 0), Pos(0, 0)) << "start of file";
-  EXPECT_THAT(offsetToPosition(File, 3), Pos(0, 3)) << "in first line";
-  EXPECT_THAT(offsetToPosition(File, 6), Pos(0, 6)) << "end of first line";
-  EXPECT_THAT(offsetToPosition(File, 7), Pos(0, 7)) << "first newline";
-  EXPECT_THAT(offsetToPosition(File, 8), Pos(1, 0)) << "start of second line";
-  EXPECT_THAT(offsetToPosition(File, 12), Pos(1, 4)) << "before BMP char";
-  EXPECT_THAT(offsetToPosition(File, 13), Pos(1, 5)) << "in BMP char";
-  EXPECT_THAT(offsetToPosition(File, 15), Pos(1, 5)) << "after BMP char";
-  EXPECT_THAT(offsetToPosition(File, 16), Pos(1, 6)) << "end of second line";
-  EXPECT_THAT(offsetToPosition(File, 17), Pos(1, 7)) << "second newline";
-  EXPECT_THAT(offsetToPosition(File, 18), Pos(2, 0)) << "start of last line";
-  EXPECT_THAT(offsetToPosition(File, 21), Pos(2, 3)) << "in last line";
-  EXPECT_THAT(offsetToPosition(File, 22), Pos(2, 4)) << "before astral char";
-  EXPECT_THAT(offsetToPosition(File, 24), Pos(2, 6)) << "in astral char";
-  EXPECT_THAT(offsetToPosition(File, 26), Pos(2, 6)) << "after astral char";
-  EXPECT_THAT(offsetToPosition(File, 28), Pos(2, 8)) << "end of last line";
-  EXPECT_THAT(offsetToPosition(File, 29), Pos(2, 9)) << "EOF";
-  EXPECT_THAT(offsetToPosition(File, 30), Pos(2, 9)) << "out of bounds";
-
-  // Codepoints are similar, except near astral characters.
-  WithContextValue UTF32(kCurrentOffsetEncoding, OffsetEncoding::UTF32);
-  EXPECT_THAT(offsetToPosition(File, 0), Pos(0, 0)) << "start of file";
-  EXPECT_THAT(offsetToPosition(File, 3), Pos(0, 3)) << "in first line";
-  EXPECT_THAT(offsetToPosition(File, 6), Pos(0, 6)) << "end of first line";
-  EXPECT_THAT(offsetToPosition(File, 7), Pos(0, 7)) << "first newline";
-  EXPECT_THAT(offsetToPosition(File, 8), Pos(1, 0)) << "start of second line";
-  EXPECT_THAT(offsetToPosition(File, 12), Pos(1, 4)) << "before BMP char";
-  EXPECT_THAT(offsetToPosition(File, 13), Pos(1, 5)) << "in BMP char";
-  EXPECT_THAT(offsetToPosition(File, 15), Pos(1, 5)) << "after BMP char";
-  EXPECT_THAT(offsetToPosition(File, 16), Pos(1, 6)) << "end of second line";
-  EXPECT_THAT(offsetToPosition(File, 17), Pos(1, 7)) << "second newline";
-  EXPECT_THAT(offsetToPosition(File, 18), Pos(2, 0)) << "start of last line";
-  EXPECT_THAT(offsetToPosition(File, 21), Pos(2, 3)) << "in last line";
-  EXPECT_THAT(offsetToPosition(File, 22), Pos(2, 4)) << "before astral char";
-  EXPECT_THAT(offsetToPosition(File, 24), Pos(2, 5)) << "in astral char";
-  EXPECT_THAT(offsetToPosition(File, 26), Pos(2, 5)) << "after astral char";
-  EXPECT_THAT(offsetToPosition(File, 28), Pos(2, 7)) << "end of last line";
-  EXPECT_THAT(offsetToPosition(File, 29), Pos(2, 8)) << "EOF";
-  EXPECT_THAT(offsetToPosition(File, 30), Pos(2, 8)) << "out of bounds";
-
-  WithContextValue UTF8(kCurrentOffsetEncoding, OffsetEncoding::UTF8);
-  for (Line L : FileLines) {
-    for (unsigned I = 0; I <= L.Length; ++I)
-      EXPECT_THAT(offsetToPosition(File, L.Offset + I), Pos(L.Number, I));
-  }
-  EXPECT_THAT(offsetToPosition(File, 30), Pos(2, 11)) << "out of bounds";
-}
-
-TEST(SourceCodeTests, IsRangeConsecutive) {
-  EXPECT_TRUE(isRangeConsecutive(range({2, 2}, {2, 3}), range({2, 3}, {2, 4})));
-  EXPECT_FALSE(
-      isRangeConsecutive(range({0, 2}, {0, 3}), range({2, 3}, {2, 4})));
-  EXPECT_FALSE(
-      isRangeConsecutive(range({2, 2}, {2, 3}), range({2, 4}, {2, 5})));
-}
-
-TEST(SourceCodeTests, SourceLocationInMainFile) {
-  Annotations Source(R"cpp(
-    ^in^t ^foo
-    ^bar
-    ^baz ^() {}  {} {} {} { }^
-)cpp");
-
-  SourceManagerForFile Owner("foo.cpp", Source.code());
-  SourceManager &SM = Owner.get();
-
-  SourceLocation StartOfFile = SM.getLocForStartOfFile(SM.getMainFileID());
-  EXPECT_THAT_EXPECTED(sourceLocationInMainFile(SM, position(0, 0)),
-                       HasValue(StartOfFile));
-  // End of file.
-  EXPECT_THAT_EXPECTED(
-      sourceLocationInMainFile(SM, position(4, 0)),
-      HasValue(StartOfFile.getLocWithOffset(Source.code().size())));
-  // Column number is too large.
-  EXPECT_THAT_EXPECTED(sourceLocationInMainFile(SM, position(0, 1)), Failed());
-  EXPECT_THAT_EXPECTED(sourceLocationInMainFile(SM, position(0, 100)),
-                       Failed());
-  EXPECT_THAT_EXPECTED(sourceLocationInMainFile(SM, position(4, 1)), Failed());
-  // Line number is too large.
-  EXPECT_THAT_EXPECTED(sourceLocationInMainFile(SM, position(5, 0)), Failed());
-  // Check all positions mentioned in the test return valid results.
-  for (auto P : Source.points()) {
-    size_t Offset = llvm::cantFail(positionToOffset(Source.code(), P));
-    EXPECT_THAT_EXPECTED(sourceLocationInMainFile(SM, P),
-                         HasValue(StartOfFile.getLocWithOffset(Offset)));
-  }
-}
-
-TEST(SourceCodeTests, CollectIdentifiers) {
-  auto Style = format::getLLVMStyle();
-  auto IDs = collectIdentifiers(R"cpp(
-  #include "a.h"
-  void foo() { int xyz; int abc = xyz; return foo(); }
-  )cpp",
-                                Style);
-  EXPECT_EQ(IDs.size(), 7u);
-  EXPECT_EQ(IDs["include"], 1u);
-  EXPECT_EQ(IDs["void"], 1u);
-  EXPECT_EQ(IDs["int"], 2u);
-  EXPECT_EQ(IDs["xyz"], 2u);
-  EXPECT_EQ(IDs["abc"], 1u);
-  EXPECT_EQ(IDs["return"], 1u);
-  EXPECT_EQ(IDs["foo"], 2u);
-}
-
-TEST(SourceCodeTests, VisibleNamespaces) {
-  std::vector<std::pair<const char *, std::vector<std::string>>> Cases = {
-      {
-          R"cpp(
-            // Using directive resolved against enclosing namespaces.
-            using namespace foo;
-            namespace ns {
-            using namespace bar;
-          )cpp",
-          {"ns", "", "bar", "foo", "ns::bar"},
-      },
-      {
-          R"cpp(
-            // Don't include namespaces we've closed, ignore namespace aliases.
-            using namespace clang;
-            using std::swap;
-            namespace clang {
-            namespace clangd {}
-            namespace ll = ::llvm;
-            }
-            namespace clang {
-          )cpp",
-          {"clang", ""},
-      },
-      {
-          R"cpp(
-            // Using directives visible even if a namespace is reopened.
-            // Ignore anonymous namespaces.
-            namespace foo{ using namespace bar; }
-            namespace foo{ namespace {
-          )cpp",
-          {"foo", "", "bar", "foo::bar"},
-      },
-      {
-          R"cpp(
-            // Mismatched braces
-            namespace foo{}
-            }}}
-            namespace bar{
-          )cpp",
-          {"bar", ""},
-      },
-      {
-          R"cpp(
-            // Namespaces with multiple chunks.
-            namespace a::b {
-              using namespace c::d;
-              namespace e::f {
-          )cpp",
-          {
-              "a::b::e::f",
-              "",
-              "a",
-              "a::b",
-              "a::b::c::d",
-              "a::b::e",
-              "a::c::d",
-              "c::d",
-          },
-      },
-  };
-  for (const auto& Case : Cases) {
-    EXPECT_EQ(Case.second,
-              visibleNamespaces(Case.first, format::getLLVMStyle()))
-        << Case.first;
-  }
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/SymbolCollectorTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/SymbolCollectorTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/SymbolCollectorTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/SymbolCollectorTests.cpp (removed)
@@ -1,1272 +0,0 @@
-//===-- SymbolCollectorTests.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 "Annotations.h"
-#include "TestFS.h"
-#include "TestTU.h"
-#include "index/SymbolCollector.h"
-#include "clang/Basic/FileManager.h"
-#include "clang/Basic/FileSystemOptions.h"
-#include "clang/Frontend/CompilerInstance.h"
-#include "clang/Index/IndexingAction.h"
-#include "clang/Tooling/Tooling.h"
-#include "llvm/ADT/IntrusiveRefCntPtr.h"
-#include "llvm/ADT/STLExtras.h"
-#include "llvm/ADT/StringRef.h"
-#include "llvm/Support/MemoryBuffer.h"
-#include "llvm/Support/VirtualFileSystem.h"
-#include "gmock/gmock-more-matchers.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-#include <memory>
-#include <string>
-
-namespace clang {
-namespace clangd {
-namespace {
-
-using testing::_;
-using testing::AllOf;
-using testing::Contains;
-using testing::ElementsAre;
-using testing::Field;
-using testing::IsEmpty;
-using testing::Not;
-using testing::Pair;
-using testing::UnorderedElementsAre;
-using testing::UnorderedElementsAreArray;
-
-// GMock helpers for matching Symbol.
-MATCHER_P(Labeled, Label, "") {
-  return (arg.Name + arg.Signature).str() == Label;
-}
-MATCHER_P(ReturnType, D, "") { return arg.ReturnType == D; }
-MATCHER_P(Doc, D, "") { return arg.Documentation == D; }
-MATCHER_P(Snippet, S, "") {
-  return (arg.Name + arg.CompletionSnippetSuffix).str() == S;
-}
-MATCHER_P(QName, Name, "") { return (arg.Scope + arg.Name).str() == Name; }
-MATCHER_P(TemplateArgs, TemplArgs, "") {
-  return arg.TemplateSpecializationArgs == TemplArgs;
-}
-MATCHER_P(DeclURI, P, "") {
-  return StringRef(arg.CanonicalDeclaration.FileURI) == P;
-}
-MATCHER_P(DefURI, P, "") { return StringRef(arg.Definition.FileURI) == P; }
-MATCHER(IncludeHeader, "") { return !arg.IncludeHeaders.empty(); }
-MATCHER_P(IncludeHeader, P, "") {
-  return (arg.IncludeHeaders.size() == 1) &&
-         (arg.IncludeHeaders.begin()->IncludeHeader == P);
-}
-MATCHER_P2(IncludeHeaderWithRef, IncludeHeader, References, "") {
-  return (arg.IncludeHeader == IncludeHeader) && (arg.References == References);
-}
-MATCHER_P(DeclRange, Pos, "") {
-  return std::make_tuple(arg.CanonicalDeclaration.Start.line(),
-                         arg.CanonicalDeclaration.Start.column(),
-                         arg.CanonicalDeclaration.End.line(),
-                         arg.CanonicalDeclaration.End.column()) ==
-         std::make_tuple(Pos.start.line, Pos.start.character, Pos.end.line,
-                         Pos.end.character);
-}
-MATCHER_P(DefRange, Pos, "") {
-  return std::make_tuple(
-             arg.Definition.Start.line(), arg.Definition.Start.column(),
-             arg.Definition.End.line(), arg.Definition.End.column()) ==
-         std::make_tuple(Pos.start.line, Pos.start.character, Pos.end.line,
-                         Pos.end.character);
-}
-MATCHER_P(RefCount, R, "") { return int(arg.References) == R; }
-MATCHER_P(ForCodeCompletion, IsIndexedForCodeCompletion, "") {
-  return static_cast<bool>(arg.Flags & Symbol::IndexedForCodeCompletion) ==
-         IsIndexedForCodeCompletion;
-}
-MATCHER(Deprecated, "") { return arg.Flags & Symbol::Deprecated; }
-MATCHER(ImplementationDetail, "") {
-  return arg.Flags & Symbol::ImplementationDetail;
-}
-MATCHER(VisibleOutsideFile, "") {
-  return static_cast<bool>(arg.Flags & Symbol::VisibleOutsideFile);
-}
-MATCHER(RefRange, "") {
-  const Ref &Pos = testing::get<0>(arg);
-  const Range &Range = testing::get<1>(arg);
-  return std::make_tuple(Pos.Location.Start.line(), Pos.Location.Start.column(),
-                         Pos.Location.End.line(), Pos.Location.End.column()) ==
-         std::make_tuple(Range.start.line, Range.start.character,
-                         Range.end.line, Range.end.character);
-}
-testing::Matcher<const std::vector<Ref> &>
-HaveRanges(const std::vector<Range> Ranges) {
-  return testing::UnorderedPointwise(RefRange(), Ranges);
-}
-
-class ShouldCollectSymbolTest : public ::testing::Test {
-public:
-  void build(llvm::StringRef HeaderCode, llvm::StringRef Code = "") {
-    File.HeaderFilename = HeaderName;
-    File.Filename = FileName;
-    File.HeaderCode = HeaderCode;
-    File.Code = Code;
-    AST = File.build();
-  }
-
-  // build() must have been called.
-  bool shouldCollect(llvm::StringRef Name, bool Qualified = true) {
-    assert(AST.hasValue());
-    const NamedDecl& ND = Qualified ? findDecl(*AST, Name) 
-                                    : findUnqualifiedDecl(*AST, Name);
-    ASTContext& Ctx = AST->getASTContext();
-    const SourceManager& SM = Ctx.getSourceManager();
-    bool MainFile = SM.isWrittenInMainFile(SM.getExpansionLoc(ND.getBeginLoc()));
-    return SymbolCollector::shouldCollectSymbol(
-        ND, Ctx, SymbolCollector::Options(), MainFile);
-  }
-
-protected:
-  std::string HeaderName = "f.h";
-  std::string FileName = "f.cpp";
-  TestTU File;
-  llvm::Optional<ParsedAST> AST; // Initialized after build.
-};
-
-TEST_F(ShouldCollectSymbolTest, ShouldCollectSymbol) {
-  build(R"(
-    namespace nx {
-    class X{};
-    auto f() { int Local; } // auto ensures function body is parsed.
-    struct { int x; } var;
-    }
-  )",
-        R"(
-    class InMain {};
-    namespace { class InAnonymous {}; }
-    static void g();
-  )");
-  auto AST = File.build();
-  EXPECT_TRUE(shouldCollect("nx"));
-  EXPECT_TRUE(shouldCollect("nx::X"));
-  EXPECT_TRUE(shouldCollect("nx::f"));
-  EXPECT_TRUE(shouldCollect("InMain"));
-  EXPECT_TRUE(shouldCollect("InAnonymous", /*Qualified=*/false));
-  EXPECT_TRUE(shouldCollect("g"));
-
-  EXPECT_FALSE(shouldCollect("Local", /*Qualified=*/false));
-}
-
-TEST_F(ShouldCollectSymbolTest, NoPrivateProtoSymbol) {
-  HeaderName = "f.proto.h";
-  build(
-      R"(// Generated by the protocol buffer compiler.  DO NOT EDIT!
-         namespace nx {
-           class Top_Level {};
-           class TopLevel {};
-           enum Kind {
-             KIND_OK,
-             Kind_Not_Ok,
-           };
-         })");
-  EXPECT_TRUE(shouldCollect("nx::TopLevel"));
-  EXPECT_TRUE(shouldCollect("nx::Kind::KIND_OK"));
-  EXPECT_TRUE(shouldCollect("nx::Kind"));
-
-  EXPECT_FALSE(shouldCollect("nx::Top_Level"));
-  EXPECT_FALSE(shouldCollect("nx::Kind::Kind_Not_Ok"));
-}
-
-TEST_F(ShouldCollectSymbolTest, DoubleCheckProtoHeaderComment) {
-  HeaderName = "f.proto.h";
-  build(R"(
-    namespace nx {
-      class Top_Level {};
-      enum Kind {
-        Kind_Fine
-      };
-    }
-  )");
-  EXPECT_TRUE(shouldCollect("nx::Top_Level"));
-  EXPECT_TRUE(shouldCollect("nx::Kind_Fine"));
-}
-
-class SymbolIndexActionFactory : public tooling::FrontendActionFactory {
-public:
-  SymbolIndexActionFactory(SymbolCollector::Options COpts,
-                           CommentHandler *PragmaHandler)
-      : COpts(std::move(COpts)), PragmaHandler(PragmaHandler) {}
-
-  clang::FrontendAction *create() override {
-    class WrappedIndexAction : public WrapperFrontendAction {
-    public:
-      WrappedIndexAction(std::shared_ptr<SymbolCollector> C,
-                         const index::IndexingOptions &Opts,
-                         CommentHandler *PragmaHandler)
-          : WrapperFrontendAction(
-                index::createIndexingAction(C, Opts, nullptr)),
-            PragmaHandler(PragmaHandler) {}
-
-      std::unique_ptr<ASTConsumer>
-      CreateASTConsumer(CompilerInstance &CI, llvm::StringRef InFile) override {
-        if (PragmaHandler)
-          CI.getPreprocessor().addCommentHandler(PragmaHandler);
-        return WrapperFrontendAction::CreateASTConsumer(CI, InFile);
-      }
-
-      bool BeginInvocation(CompilerInstance &CI) override {
-        // Make the compiler parse all comments.
-        CI.getLangOpts().CommentOpts.ParseAllComments = true;
-        return WrapperFrontendAction::BeginInvocation(CI);
-      }
-
-    private:
-      index::IndexingOptions IndexOpts;
-      CommentHandler *PragmaHandler;
-    };
-    index::IndexingOptions IndexOpts;
-    IndexOpts.SystemSymbolFilter =
-        index::IndexingOptions::SystemSymbolFilterKind::All;
-    IndexOpts.IndexFunctionLocals = false;
-    Collector = std::make_shared<SymbolCollector>(COpts);
-    return new WrappedIndexAction(Collector, std::move(IndexOpts),
-                                  PragmaHandler);
-  }
-
-  std::shared_ptr<SymbolCollector> Collector;
-  SymbolCollector::Options COpts;
-  CommentHandler *PragmaHandler;
-};
-
-class SymbolCollectorTest : public ::testing::Test {
-public:
-  SymbolCollectorTest()
-      : InMemoryFileSystem(new llvm::vfs::InMemoryFileSystem),
-        TestHeaderName(testPath("symbol.h")),
-        TestFileName(testPath("symbol.cc")) {
-    TestHeaderURI = URI::create(TestHeaderName).toString();
-    TestFileURI = URI::create(TestFileName).toString();
-  }
-
-  // Note that unlike TestTU, no automatic header guard is added.
-  // HeaderCode should start with #pragma once to be treated as modular.
-  bool runSymbolCollector(llvm::StringRef HeaderCode, llvm::StringRef MainCode,
-                          const std::vector<std::string> &ExtraArgs = {}) {
-    llvm::IntrusiveRefCntPtr<FileManager> Files(
-        new FileManager(FileSystemOptions(), InMemoryFileSystem));
-
-    auto Factory = llvm::make_unique<SymbolIndexActionFactory>(
-        CollectorOpts, PragmaHandler.get());
-
-    std::vector<std::string> Args = {"symbol_collector", "-fsyntax-only",
-                                     "-xc++", "-include", TestHeaderName};
-    Args.insert(Args.end(), ExtraArgs.begin(), ExtraArgs.end());
-    // This allows to override the "-xc++" with something else, i.e.
-    // -xobjective-c++.
-    Args.push_back(TestFileName);
-
-    tooling::ToolInvocation Invocation(
-        Args, Factory->create(), Files.get(),
-        std::make_shared<PCHContainerOperations>());
-
-    InMemoryFileSystem->addFile(
-        TestHeaderName, 0, llvm::MemoryBuffer::getMemBuffer(HeaderCode));
-    InMemoryFileSystem->addFile(TestFileName, 0,
-                                llvm::MemoryBuffer::getMemBuffer(MainCode));
-    Invocation.run();
-    Symbols = Factory->Collector->takeSymbols();
-    Refs = Factory->Collector->takeRefs();
-    return true;
-  }
-
-protected:
-  llvm::IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> InMemoryFileSystem;
-  std::string TestHeaderName;
-  std::string TestHeaderURI;
-  std::string TestFileName;
-  std::string TestFileURI;
-  SymbolSlab Symbols;
-  RefSlab Refs;
-  SymbolCollector::Options CollectorOpts;
-  std::unique_ptr<CommentHandler> PragmaHandler;
-};
-
-TEST_F(SymbolCollectorTest, CollectSymbols) {
-  const std::string Header = R"(
-    class Foo {
-      Foo() {}
-      Foo(int a) {}
-      void f();
-      friend void f1();
-      friend class Friend;
-      Foo& operator=(const Foo&);
-      ~Foo();
-      class Nested {
-      void f();
-      };
-    };
-    class Friend {
-    };
-
-    void f1();
-    inline void f2() {}
-    static const int KInt = 2;
-    const char* kStr = "123";
-
-    namespace {
-    void ff() {} // ignore
-    }
-
-    void f1() {}
-
-    namespace foo {
-    // Type alias
-    typedef int int32;
-    using int32_t = int32;
-
-    // Variable
-    int v1;
-
-    // Namespace
-    namespace bar {
-    int v2;
-    }
-    // Namespace alias
-    namespace baz = bar;
-
-    using bar::v2;
-    } // namespace foo
-  )";
-  runSymbolCollector(Header, /*Main=*/"");
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAreArray(
-                  {AllOf(QName("Foo"), ForCodeCompletion(true)),
-                   AllOf(QName("Foo::Foo"), ForCodeCompletion(false)),
-                   AllOf(QName("Foo::Foo"), ForCodeCompletion(false)),
-                   AllOf(QName("Foo::f"), ForCodeCompletion(false)),
-                   AllOf(QName("Foo::~Foo"), ForCodeCompletion(false)),
-                   AllOf(QName("Foo::operator="), ForCodeCompletion(false)),
-                   AllOf(QName("Foo::Nested"), ForCodeCompletion(false)),
-                   AllOf(QName("Foo::Nested::f"), ForCodeCompletion(false)),
-
-                   AllOf(QName("Friend"), ForCodeCompletion(true)),
-                   AllOf(QName("f1"), ForCodeCompletion(true)),
-                   AllOf(QName("f2"), ForCodeCompletion(true)),
-                   AllOf(QName("KInt"), ForCodeCompletion(true)),
-                   AllOf(QName("kStr"), ForCodeCompletion(true)),
-                   AllOf(QName("foo"), ForCodeCompletion(true)),
-                   AllOf(QName("foo::bar"), ForCodeCompletion(true)),
-                   AllOf(QName("foo::int32"), ForCodeCompletion(true)),
-                   AllOf(QName("foo::int32_t"), ForCodeCompletion(true)),
-                   AllOf(QName("foo::v1"), ForCodeCompletion(true)),
-                   AllOf(QName("foo::bar::v2"), ForCodeCompletion(true)),
-                   AllOf(QName("foo::v2"), ForCodeCompletion(true)),
-                   AllOf(QName("foo::baz"), ForCodeCompletion(true))}));
-}
-
-TEST_F(SymbolCollectorTest, FileLocal) {
-  const std::string Header = R"(
-    class Foo {};
-    namespace {
-      class Ignored {};
-    }
-    void bar();
-  )";
-  const std::string Main = R"(
-    class ForwardDecl;
-    void bar() {}
-    static void a();
-    class B {};
-    namespace {
-      void c();
-    }
-  )";
-  runSymbolCollector(Header, Main);
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAre(
-                  AllOf(QName("Foo"), VisibleOutsideFile()),
-                  AllOf(QName("bar"), VisibleOutsideFile()),
-                  AllOf(QName("a"), Not(VisibleOutsideFile())),
-                  AllOf(QName("B"), Not(VisibleOutsideFile())),
-                  AllOf(QName("c"), Not(VisibleOutsideFile())),
-                  // FIXME: ForwardDecl likely *is* visible outside.
-                  AllOf(QName("ForwardDecl"), Not(VisibleOutsideFile()))));
-}
-
-TEST_F(SymbolCollectorTest, Template) {
-  Annotations Header(R"(
-    // Primary template and explicit specialization are indexed, instantiation
-    // is not.
-    template <class T, class U> struct [[Tmpl]] {T $xdecl[[x]] = 0;};
-    template <> struct $specdecl[[Tmpl]]<int, bool> {};
-    template <class U> struct $partspecdecl[[Tmpl]]<bool, U> {};
-    extern template struct Tmpl<float, bool>;
-    template struct Tmpl<double, bool>;
-  )");
-  runSymbolCollector(Header.code(), /*Main=*/"");
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAre(
-                  AllOf(QName("Tmpl"), DeclRange(Header.range()),
-                        ForCodeCompletion(true)),
-                  AllOf(QName("Tmpl"), DeclRange(Header.range("specdecl")),
-                        ForCodeCompletion(false)),
-                  AllOf(QName("Tmpl"), DeclRange(Header.range("partspecdecl")),
-                        ForCodeCompletion(false)),
-                  AllOf(QName("Tmpl::x"), DeclRange(Header.range("xdecl")),
-                        ForCodeCompletion(false))));
-}
-
-TEST_F(SymbolCollectorTest, TemplateArgs) {
-  Annotations Header(R"(
-    template <class X> class $barclasstemp[[Bar]] {};
-    template <class T, class U, template<typename> class Z, int Q>
-    struct [[Tmpl]] { T $xdecl[[x]] = 0; };
-
-    // template-template, non-type and type full spec
-    template <> struct $specdecl[[Tmpl]]<int, bool, Bar, 3> {};
-
-    // template-template, non-type and type partial spec
-    template <class U, int T> struct $partspecdecl[[Tmpl]]<bool, U, Bar, T> {};
-    // instantiation
-    extern template struct Tmpl<float, bool, Bar, 8>;
-    // instantiation
-    template struct Tmpl<double, bool, Bar, 2>;
-
-    template <typename ...> class $fooclasstemp[[Foo]] {};
-    // parameter-packs full spec
-    template<> class $parampack[[Foo]]<Bar<int>, int, double> {};
-    // parameter-packs partial spec
-    template<class T> class $parampackpartial[[Foo]]<T, T> {};
-
-    template <int ...> class $bazclasstemp[[Baz]] {};
-    // non-type parameter-packs full spec
-    template<> class $parampacknontype[[Baz]]<3, 5, 8> {};
-    // non-type parameter-packs partial spec
-    template<int T> class $parampacknontypepartial[[Baz]]<T, T> {};
-
-    template <template <class> class ...> class $fozclasstemp[[Foz]] {};
-    // template-template parameter-packs full spec
-    template<> class $parampacktempltempl[[Foz]]<Bar, Bar> {};
-    // template-template parameter-packs partial spec
-    template<template <class> class T>
-    class $parampacktempltemplpartial[[Foz]]<T, T> {};
-  )");
-  runSymbolCollector(Header.code(), /*Main=*/"");
-  EXPECT_THAT(
-      Symbols,
-      AllOf(
-          Contains(AllOf(QName("Tmpl"), TemplateArgs("<int, bool, Bar, 3>"),
-                         DeclRange(Header.range("specdecl")),
-                         ForCodeCompletion(false))),
-          Contains(AllOf(QName("Tmpl"), TemplateArgs("<bool, U, Bar, T>"),
-                         DeclRange(Header.range("partspecdecl")),
-                         ForCodeCompletion(false))),
-          Contains(AllOf(QName("Foo"), TemplateArgs("<Bar<int>, int, double>"),
-                         DeclRange(Header.range("parampack")),
-                         ForCodeCompletion(false))),
-          Contains(AllOf(QName("Foo"), TemplateArgs("<T, T>"),
-                         DeclRange(Header.range("parampackpartial")),
-                         ForCodeCompletion(false))),
-          Contains(AllOf(QName("Baz"), TemplateArgs("<3, 5, 8>"),
-                         DeclRange(Header.range("parampacknontype")),
-                         ForCodeCompletion(false))),
-          Contains(AllOf(QName("Baz"), TemplateArgs("<T, T>"),
-                         DeclRange(Header.range("parampacknontypepartial")),
-                         ForCodeCompletion(false))),
-          Contains(AllOf(QName("Foz"), TemplateArgs("<Bar, Bar>"),
-                         DeclRange(Header.range("parampacktempltempl")),
-                         ForCodeCompletion(false))),
-          Contains(AllOf(QName("Foz"), TemplateArgs("<T, T>"),
-                         DeclRange(Header.range("parampacktempltemplpartial")),
-                         ForCodeCompletion(false)))));
-}
-
-TEST_F(SymbolCollectorTest, ObjCSymbols) {
-  const std::string Header = R"(
-    @interface Person
-    - (void)someMethodName:(void*)name1 lastName:(void*)lName;
-    @end
-
-    @implementation Person
-    - (void)someMethodName:(void*)name1 lastName:(void*)lName{
-      int foo;
-      ^(int param){ int bar; };
-    }
-    @end
-
-    @interface Person (MyCategory)
-    - (void)someMethodName2:(void*)name2;
-    @end
-
-    @implementation Person (MyCategory)
-    - (void)someMethodName2:(void*)name2 {
-      int foo2;
-    }
-    @end
-
-    @protocol MyProtocol
-    - (void)someMethodName3:(void*)name3;
-    @end
-  )";
-  TestFileName = testPath("test.m");
-  runSymbolCollector(Header, /*Main=*/"", {"-fblocks", "-xobjective-c++"});
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAre(
-                  QName("Person"), QName("Person::someMethodName:lastName:"),
-                  QName("MyCategory"), QName("Person::someMethodName2:"),
-                  QName("MyProtocol"), QName("MyProtocol::someMethodName3:")));
-}
-
-TEST_F(SymbolCollectorTest, ObjCPropertyImpl) {
-  const std::string Header = R"(
-    @interface Container
-    @property(nonatomic) int magic;
-    @end
-
-    @implementation Container
-    @end
-  )";
-  TestFileName = testPath("test.m");
-  runSymbolCollector(Header, /*Main=*/"", {"-xobjective-c++"});
-  EXPECT_THAT(Symbols, Contains(QName("Container")));
-  EXPECT_THAT(Symbols, Contains(QName("Container::magic")));
-  // FIXME: Results also contain Container::_magic on some platforms.
-  //        Figure out why it's platform-dependent.
-}
-
-TEST_F(SymbolCollectorTest, Locations) {
-  Annotations Header(R"cpp(
-    // Declared in header, defined in main.
-    extern int $xdecl[[X]];
-    class $clsdecl[[Cls]];
-    void $printdecl[[print]]();
-
-    // Declared in header, defined nowhere.
-    extern int $zdecl[[Z]];
-
-    void $foodecl[[fo\
-o]]();
-  )cpp");
-  Annotations Main(R"cpp(
-    int $xdef[[X]] = 42;
-    class $clsdef[[Cls]] {};
-    void $printdef[[print]]() {}
-
-    // Declared/defined in main only.
-    int $ydecl[[Y]];
-  )cpp");
-  runSymbolCollector(Header.code(), Main.code());
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAre(
-                  AllOf(QName("X"), DeclRange(Header.range("xdecl")),
-                        DefRange(Main.range("xdef"))),
-                  AllOf(QName("Cls"), DeclRange(Header.range("clsdecl")),
-                        DefRange(Main.range("clsdef"))),
-                  AllOf(QName("print"), DeclRange(Header.range("printdecl")),
-                        DefRange(Main.range("printdef"))),
-                  AllOf(QName("Z"), DeclRange(Header.range("zdecl"))),
-                  AllOf(QName("foo"), DeclRange(Header.range("foodecl"))),
-                  AllOf(QName("Y"), DeclRange(Main.range("ydecl")))));
-}
-
-TEST_F(SymbolCollectorTest, Refs) {
-  Annotations Header(R"(
-  class $foo[[Foo]] {
-  public:
-    $foo[[Foo]]() {}
-    $foo[[Foo]](int);
-  };
-  class $bar[[Bar]];
-  void $func[[func]]();
-
-  namespace $ns[[NS]] {} // namespace ref is ignored
-  )");
-  Annotations Main(R"(
-  class $bar[[Bar]] {};
-
-  void $func[[func]]();
-
-  void fff() {
-    $foo[[Foo]] foo;
-    $bar[[Bar]] bar;
-    $func[[func]]();
-    int abc = 0;
-    $foo[[Foo]] foo2 = abc;
-  }
-  )");
-  Annotations SymbolsOnlyInMainCode(R"(
-  int a;
-  void b() {}
-  static const int c = 0;
-  class d {};
-  )");
-  CollectorOpts.RefFilter = RefKind::All;
-  runSymbolCollector(Header.code(),
-                     (Main.code() + SymbolsOnlyInMainCode.code()).str());
-  auto HeaderSymbols = TestTU::withHeaderCode(Header.code()).headerSymbols();
-
-  EXPECT_THAT(Refs, Contains(Pair(findSymbol(Symbols, "Foo").ID,
-                                  HaveRanges(Main.ranges("foo")))));
-  EXPECT_THAT(Refs, Contains(Pair(findSymbol(Symbols, "Bar").ID,
-                                  HaveRanges(Main.ranges("bar")))));
-  EXPECT_THAT(Refs, Contains(Pair(findSymbol(Symbols, "func").ID,
-                                  HaveRanges(Main.ranges("func")))));
-  EXPECT_THAT(Refs, Not(Contains(Pair(findSymbol(Symbols, "NS").ID, _))));
-  // Symbols *only* in the main file (a, b, c) had no refs collected.
-  auto MainSymbols =
-      TestTU::withHeaderCode(SymbolsOnlyInMainCode.code()).headerSymbols();
-  EXPECT_THAT(Refs, Not(Contains(Pair(findSymbol(MainSymbols, "a").ID, _))));
-  EXPECT_THAT(Refs, Not(Contains(Pair(findSymbol(MainSymbols, "b").ID, _))));
-  EXPECT_THAT(Refs, Not(Contains(Pair(findSymbol(MainSymbols, "c").ID, _))));
-}
-
-TEST_F(SymbolCollectorTest, RefsInHeaders) {
-  CollectorOpts.RefFilter = RefKind::All;
-  CollectorOpts.RefsInHeaders = true;
-  Annotations Header(R"(
-  class [[Foo]] {};
-  )");
-  runSymbolCollector(Header.code(), "");
-  EXPECT_THAT(Refs, Contains(Pair(findSymbol(Symbols, "Foo").ID,
-                                  HaveRanges(Header.ranges()))));
-}
-
-TEST_F(SymbolCollectorTest, References) {
-  const std::string Header = R"(
-    class W;
-    class X {};
-    class Y;
-    class Z {}; // not used anywhere
-    Y* y = nullptr;  // used in header doesn't count
-    #define GLOBAL_Z(name) Z name;
-  )";
-  const std::string Main = R"(
-    W* w = nullptr;
-    W* w2 = nullptr; // only one usage counts
-    X x();
-    class V;
-    class Y{}; // definition doesn't count as a reference
-    V* v = nullptr;
-    GLOBAL_Z(z); // Not a reference to Z, we don't spell the type.
-  )";
-  CollectorOpts.CountReferences = true;
-  runSymbolCollector(Header, Main);
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAreArray(
-                {AllOf(QName("W"), RefCount(1)),
-                 AllOf(QName("X"), RefCount(1)),
-                 AllOf(QName("Y"), RefCount(0)),
-                 AllOf(QName("Z"), RefCount(0)), 
-                 AllOf(QName("y"), RefCount(0)),
-                 AllOf(QName("z"), RefCount(0)),
-                 AllOf(QName("x"), RefCount(0)),
-                 AllOf(QName("w"), RefCount(0)),
-                 AllOf(QName("w2"), RefCount(0)),
-                 AllOf(QName("V"), RefCount(1)),
-                 AllOf(QName("v"), RefCount(0))}));
-}
-
-TEST_F(SymbolCollectorTest, SymbolRelativeNoFallback) {
-  runSymbolCollector("class Foo {};", /*Main=*/"");
-  EXPECT_THAT(Symbols, UnorderedElementsAre(
-                           AllOf(QName("Foo"), DeclURI(TestHeaderURI))));
-}
-
-TEST_F(SymbolCollectorTest, SymbolRelativeWithFallback) {
-  TestHeaderName = "x.h";
-  TestFileName = "x.cpp";
-  TestHeaderURI = URI::create(testPath(TestHeaderName)).toString();
-  CollectorOpts.FallbackDir = testRoot();
-  runSymbolCollector("class Foo {};", /*Main=*/"");
-  EXPECT_THAT(Symbols, UnorderedElementsAre(
-                           AllOf(QName("Foo"), DeclURI(TestHeaderURI))));
-}
-
-TEST_F(SymbolCollectorTest, UnittestURIScheme) {
-  // Use test URI scheme from URITests.cpp
-  TestHeaderName = testPath("x.h");
-  TestFileName = testPath("x.cpp");
-  runSymbolCollector("class Foo {};", /*Main=*/"");
-  EXPECT_THAT(Symbols, UnorderedElementsAre(
-                           AllOf(QName("Foo"), DeclURI("unittest:///x.h"))));
-}
-
-TEST_F(SymbolCollectorTest, IncludeEnums) {
-  const std::string Header = R"(
-    enum {
-      Red
-    };
-    enum Color {
-      Green
-    };
-    enum class Color2 {
-      Yellow
-    };
-    namespace ns {
-    enum {
-      Black
-    };
-    }
-  )";
-  runSymbolCollector(Header, /*Main=*/"");
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAre(
-                  AllOf(QName("Red"), ForCodeCompletion(true)),
-                  AllOf(QName("Color"), ForCodeCompletion(true)),
-                  AllOf(QName("Green"), ForCodeCompletion(true)),
-                  AllOf(QName("Color2"), ForCodeCompletion(true)),
-                  AllOf(QName("Color2::Yellow"), ForCodeCompletion(false)),
-                  AllOf(QName("ns"), ForCodeCompletion(true)),
-                  AllOf(QName("ns::Black"), ForCodeCompletion(true))));
-}
-
-TEST_F(SymbolCollectorTest, NamelessSymbols) {
-  const std::string Header = R"(
-    struct {
-      int a;
-    } Foo;
-  )";
-  runSymbolCollector(Header, /*Main=*/"");
-  EXPECT_THAT(Symbols, UnorderedElementsAre(QName("Foo"),
-                                            QName("(anonymous struct)::a")));
-}
-
-TEST_F(SymbolCollectorTest, SymbolFormedFromRegisteredSchemeFromMacro) {
-
-  Annotations Header(R"(
-    #define FF(name) \
-      class name##_Test {};
-
-    $expansion[[FF]](abc);
-
-    #define FF2() \
-      class $spelling[[Test]] {};
-
-    FF2();
-  )");
-
-  runSymbolCollector(Header.code(), /*Main=*/"");
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAre(
-                  AllOf(QName("abc_Test"), DeclRange(Header.range("expansion")),
-                        DeclURI(TestHeaderURI)),
-                  AllOf(QName("Test"), DeclRange(Header.range("spelling")),
-                        DeclURI(TestHeaderURI))));
-}
-
-TEST_F(SymbolCollectorTest, SymbolFormedByCLI) {
-  Annotations Header(R"(
-    #ifdef NAME
-    class $expansion[[NAME]] {};
-    #endif
-  )");
-  runSymbolCollector(Header.code(), /*Main=*/"", /*ExtraArgs=*/{"-DNAME=name"});
-  EXPECT_THAT(Symbols, UnorderedElementsAre(AllOf(
-                           QName("name"), DeclRange(Header.range("expansion")),
-                           DeclURI(TestHeaderURI))));
-}
-
-TEST_F(SymbolCollectorTest, SymbolsInMainFile) {
-  const std::string Main = R"(
-    class Foo {};
-    void f1();
-    inline void f2() {}
-
-    namespace {
-    void ff() {}
-    }
-    namespace foo {
-    namespace {
-    class Bar {};
-    }
-    }
-    void main_f() {}
-    void f1() {}
-  )";
-  runSymbolCollector(/*Header=*/"", Main);
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAre(QName("Foo"), QName("f1"), QName("f2"),
-                                   QName("ff"), QName("foo"), QName("foo::Bar"),
-                                   QName("main_f")));
-}
-
-TEST_F(SymbolCollectorTest, Documentation) {
-  const std::string Header = R"(
-    // Doc Foo
-    class Foo {
-      // Doc f
-      int f();
-    };
-  )";
-  CollectorOpts.StoreAllDocumentation = false;
-  runSymbolCollector(Header, /* Main */ "");
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAre(
-                  AllOf(QName("Foo"), Doc("Doc Foo"), ForCodeCompletion(true)),
-                  AllOf(QName("Foo::f"), Doc(""), ReturnType(""),
-                        ForCodeCompletion(false))));
-
-  CollectorOpts.StoreAllDocumentation = true;
-  runSymbolCollector(Header, /* Main */ "");
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAre(
-                  AllOf(QName("Foo"), Doc("Doc Foo"), ForCodeCompletion(true)),
-                  AllOf(QName("Foo::f"), Doc("Doc f"), ReturnType(""),
-                        ForCodeCompletion(false))));
-}
-
-TEST_F(SymbolCollectorTest, ClassMembers) {
-  const std::string Header = R"(
-    class Foo {
-      void f() {}
-      void g();
-      static void sf() {}
-      static void ssf();
-      static int x;
-    };
-  )";
-  const std::string Main = R"(
-    void Foo::g() {}
-    void Foo::ssf() {}
-  )";
-  runSymbolCollector(Header, Main);
-  EXPECT_THAT(
-      Symbols,
-      UnorderedElementsAre(
-          QName("Foo"),
-          AllOf(QName("Foo::f"), ReturnType(""), ForCodeCompletion(false)),
-          AllOf(QName("Foo::g"), ReturnType(""), ForCodeCompletion(false)),
-          AllOf(QName("Foo::sf"), ReturnType(""), ForCodeCompletion(false)),
-          AllOf(QName("Foo::ssf"), ReturnType(""), ForCodeCompletion(false)),
-          AllOf(QName("Foo::x"), ReturnType(""), ForCodeCompletion(false))));
-}
-
-TEST_F(SymbolCollectorTest, Scopes) {
-  const std::string Header = R"(
-    namespace na {
-    class Foo {};
-    namespace nb {
-    class Bar {};
-    }
-    }
-  )";
-  runSymbolCollector(Header, /*Main=*/"");
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAre(QName("na"), QName("na::nb"),
-                                   QName("na::Foo"), QName("na::nb::Bar")));
-}
-
-TEST_F(SymbolCollectorTest, ExternC) {
-  const std::string Header = R"(
-    extern "C" { class Foo {}; }
-    namespace na {
-    extern "C" { class Bar {}; }
-    }
-  )";
-  runSymbolCollector(Header, /*Main=*/"");
-  EXPECT_THAT(Symbols, UnorderedElementsAre(QName("na"), QName("Foo"),
-                                            QName("na::Bar")));
-}
-
-TEST_F(SymbolCollectorTest, SkipInlineNamespace) {
-  const std::string Header = R"(
-    namespace na {
-    inline namespace nb {
-    class Foo {};
-    }
-    }
-    namespace na {
-    // This is still inlined.
-    namespace nb {
-    class Bar {};
-    }
-    }
-  )";
-  runSymbolCollector(Header, /*Main=*/"");
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAre(QName("na"), QName("na::nb"),
-                                   QName("na::Foo"), QName("na::Bar")));
-}
-
-TEST_F(SymbolCollectorTest, SymbolWithDocumentation) {
-  const std::string Header = R"(
-    namespace nx {
-    /// Foo comment.
-    int ff(int x, double y) { return 0; }
-    }
-  )";
-  runSymbolCollector(Header, /*Main=*/"");
-  EXPECT_THAT(
-      Symbols,
-      UnorderedElementsAre(
-          QName("nx"), AllOf(QName("nx::ff"), Labeled("ff(int x, double y)"),
-                             ReturnType("int"), Doc("Foo comment."))));
-}
-
-TEST_F(SymbolCollectorTest, Snippet) {
-  const std::string Header = R"(
-    namespace nx {
-    void f() {}
-    int ff(int x, double y) { return 0; }
-    }
-  )";
-  runSymbolCollector(Header, /*Main=*/"");
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAre(
-                  QName("nx"),
-                  AllOf(QName("nx::f"), Labeled("f()"), Snippet("f()")),
-                  AllOf(QName("nx::ff"), Labeled("ff(int x, double y)"),
-                        Snippet("ff(${1:int x}, ${2:double y})"))));
-}
-
-TEST_F(SymbolCollectorTest, IncludeHeaderSameAsFileURI) {
-  CollectorOpts.CollectIncludePath = true;
-  runSymbolCollector("#pragma once\nclass Foo {};", /*Main=*/"");
-  EXPECT_THAT(Symbols, UnorderedElementsAre(
-                           AllOf(QName("Foo"), DeclURI(TestHeaderURI))));
-  EXPECT_THAT(Symbols.begin()->IncludeHeaders,
-              UnorderedElementsAre(IncludeHeaderWithRef(TestHeaderURI, 1u)));
-}
-
-#ifndef _WIN32
-TEST_F(SymbolCollectorTest, CanonicalSTLHeader) {
-  CollectorOpts.CollectIncludePath = true;
-  CanonicalIncludes Includes;
-  addSystemHeadersMapping(&Includes);
-  CollectorOpts.Includes = &Includes;
-  // bits/basic_string.h$ should be mapped to <string>
-  TestHeaderName = "/nasty/bits/basic_string.h";
-  TestFileName = "/nasty/bits/basic_string.cpp";
-  TestHeaderURI = URI::create(TestHeaderName).toString();
-  runSymbolCollector("class string {};", /*Main=*/"");
-  EXPECT_THAT(Symbols, UnorderedElementsAre(AllOf(QName("string"),
-                                                  DeclURI(TestHeaderURI),
-                                                  IncludeHeader("<string>"))));
-}
-#endif
-
-TEST_F(SymbolCollectorTest, STLiosfwd) {
-  CollectorOpts.CollectIncludePath = true;
-  CanonicalIncludes Includes;
-  addSystemHeadersMapping(&Includes);
-  CollectorOpts.Includes = &Includes;
-  // Symbols from <iosfwd> should be mapped individually.
-  TestHeaderName = testPath("iosfwd");
-  TestFileName = testPath("iosfwd.cpp");
-  std::string Header = R"(
-    namespace std {
-      class no_map {};
-      class ios {};
-      class ostream {};
-      class filebuf {};
-    } // namespace std
-  )";
-  runSymbolCollector(Header, /*Main=*/"");
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAre(
-                  QName("std"),
-                  AllOf(QName("std::no_map"), IncludeHeader("<iosfwd>")),
-                  AllOf(QName("std::ios"), IncludeHeader("<ios>")),
-                  AllOf(QName("std::ostream"), IncludeHeader("<ostream>")),
-                  AllOf(QName("std::filebuf"), IncludeHeader("<fstream>"))));
-}
-
-TEST_F(SymbolCollectorTest, IWYUPragma) {
-  CollectorOpts.CollectIncludePath = true;
-  CanonicalIncludes Includes;
-  PragmaHandler = collectIWYUHeaderMaps(&Includes);
-  CollectorOpts.Includes = &Includes;
-  const std::string Header = R"(
-    // IWYU pragma: private, include the/good/header.h
-    class Foo {};
-  )";
-  runSymbolCollector(Header, /*Main=*/"");
-  EXPECT_THAT(Symbols, UnorderedElementsAre(
-                           AllOf(QName("Foo"), DeclURI(TestHeaderURI),
-                                 IncludeHeader("\"the/good/header.h\""))));
-}
-
-TEST_F(SymbolCollectorTest, IWYUPragmaWithDoubleQuotes) {
-  CollectorOpts.CollectIncludePath = true;
-  CanonicalIncludes Includes;
-  PragmaHandler = collectIWYUHeaderMaps(&Includes);
-  CollectorOpts.Includes = &Includes;
-  const std::string Header = R"(
-    // IWYU pragma: private, include "the/good/header.h"
-    class Foo {};
-  )";
-  runSymbolCollector(Header, /*Main=*/"");
-  EXPECT_THAT(Symbols, UnorderedElementsAre(
-                           AllOf(QName("Foo"), DeclURI(TestHeaderURI),
-                                 IncludeHeader("\"the/good/header.h\""))));
-}
-
-TEST_F(SymbolCollectorTest, SkipIncFileWhenCanonicalizeHeaders) {
-  CollectorOpts.CollectIncludePath = true;
-  CanonicalIncludes Includes;
-  Includes.addMapping(TestHeaderName, "<canonical>");
-  CollectorOpts.Includes = &Includes;
-  auto IncFile = testPath("test.inc");
-  auto IncURI = URI::create(IncFile).toString();
-  InMemoryFileSystem->addFile(IncFile, 0,
-                              llvm::MemoryBuffer::getMemBuffer("class X {};"));
-  runSymbolCollector("#include \"test.inc\"\nclass Y {};", /*Main=*/"",
-                     /*ExtraArgs=*/{"-I", testRoot()});
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAre(AllOf(QName("X"), DeclURI(IncURI),
-                                         IncludeHeader("<canonical>")),
-                                   AllOf(QName("Y"), DeclURI(TestHeaderURI),
-                                         IncludeHeader("<canonical>"))));
-}
-
-TEST_F(SymbolCollectorTest, MainFileIsHeaderWhenSkipIncFile) {
-  CollectorOpts.CollectIncludePath = true;
-  // To make this case as hard as possible, we won't tell clang main is a
-  // header. No extension, no -x c++-header.
-  TestFileName = testPath("no_ext_main");
-  TestFileURI = URI::create(TestFileName).toString();
-  auto IncFile = testPath("test.inc");
-  auto IncURI = URI::create(IncFile).toString();
-  InMemoryFileSystem->addFile(IncFile, 0,
-                              llvm::MemoryBuffer::getMemBuffer("class X {};"));
-  runSymbolCollector("", R"cpp(
-    // Can't use #pragma once in a main file clang doesn't think is a header.
-    #ifndef MAIN_H_
-    #define MAIN_H_
-    #include "test.inc"
-    #endif
-  )cpp",
-                     /*ExtraArgs=*/{"-I", testRoot()});
-  EXPECT_THAT(Symbols, UnorderedElementsAre(AllOf(QName("X"), DeclURI(IncURI),
-                                                  IncludeHeader(TestFileURI))));
-}
-
-TEST_F(SymbolCollectorTest, IncFileInNonHeader) {
-  CollectorOpts.CollectIncludePath = true;
-  TestFileName = testPath("main.cc");
-  TestFileURI = URI::create(TestFileName).toString();
-  auto IncFile = testPath("test.inc");
-  auto IncURI = URI::create(IncFile).toString();
-  InMemoryFileSystem->addFile(IncFile, 0,
-                              llvm::MemoryBuffer::getMemBuffer("class X {};"));
-  runSymbolCollector("", R"cpp(
-    #include "test.inc"
-  )cpp",
-                     /*ExtraArgs=*/{"-I", testRoot()});
-  EXPECT_THAT(Symbols, UnorderedElementsAre(AllOf(QName("X"), DeclURI(IncURI),
-                                                  Not(IncludeHeader()))));
-}
-
-TEST_F(SymbolCollectorTest, NonModularHeader) {
-  auto TU = TestTU::withHeaderCode("int x();");
-  EXPECT_THAT(TU.headerSymbols(), ElementsAre(IncludeHeader()));
-
-  // Files missing include guards aren't eligible for insertion.
-  TU.ImplicitHeaderGuard = false;
-  EXPECT_THAT(TU.headerSymbols(), ElementsAre(Not(IncludeHeader())));
-
-  // We recognize some patterns of trying to prevent insertion.
-  TU = TestTU::withHeaderCode(R"cpp(
-#ifndef SECRET
-#error "This file isn't safe to include directly"
-#endif
-    int x();
-    )cpp");
-  TU.ExtraArgs.push_back("-DSECRET"); // *we're* able to include it.
-  EXPECT_THAT(TU.headerSymbols(), ElementsAre(Not(IncludeHeader())));
-}
-
-TEST_F(SymbolCollectorTest, AvoidUsingFwdDeclsAsCanonicalDecls) {
-  CollectorOpts.CollectIncludePath = true;
-  Annotations Header(R"(
-    #pragma once
-    // Forward declarations of TagDecls.
-    class C;
-    struct S;
-    union U;
-
-    // Canonical declarations.
-    class $cdecl[[C]] {};
-    struct $sdecl[[S]] {};
-    union $udecl[[U]] {int $xdecl[[x]]; bool $ydecl[[y]];};
-  )");
-  runSymbolCollector(Header.code(), /*Main=*/"");
-  EXPECT_THAT(
-      Symbols,
-      UnorderedElementsAre(
-          AllOf(QName("C"), DeclURI(TestHeaderURI),
-                DeclRange(Header.range("cdecl")), IncludeHeader(TestHeaderURI),
-                DefURI(TestHeaderURI), DefRange(Header.range("cdecl"))),
-          AllOf(QName("S"), DeclURI(TestHeaderURI),
-                DeclRange(Header.range("sdecl")), IncludeHeader(TestHeaderURI),
-                DefURI(TestHeaderURI), DefRange(Header.range("sdecl"))),
-          AllOf(QName("U"), DeclURI(TestHeaderURI),
-                DeclRange(Header.range("udecl")), IncludeHeader(TestHeaderURI),
-                DefURI(TestHeaderURI), DefRange(Header.range("udecl"))),
-          AllOf(QName("U::x"), DeclURI(TestHeaderURI),
-                DeclRange(Header.range("xdecl")), DefURI(TestHeaderURI),
-                DefRange(Header.range("xdecl"))),
-          AllOf(QName("U::y"), DeclURI(TestHeaderURI),
-                DeclRange(Header.range("ydecl")), DefURI(TestHeaderURI),
-                DefRange(Header.range("ydecl")))));
-}
-
-TEST_F(SymbolCollectorTest, ClassForwardDeclarationIsCanonical) {
-  CollectorOpts.CollectIncludePath = true;
-  runSymbolCollector(/*Header=*/"#pragma once\nclass X;",
-                     /*Main=*/"class X {};");
-  EXPECT_THAT(Symbols, UnorderedElementsAre(AllOf(
-                           QName("X"), DeclURI(TestHeaderURI),
-                           IncludeHeader(TestHeaderURI), DefURI(TestFileURI))));
-}
-
-TEST_F(SymbolCollectorTest, UTF16Character) {
-  // ö is 2-bytes.
-  Annotations Header(/*Header=*/"class [[pörk]] {};");
-  runSymbolCollector(Header.code(), /*Main=*/"");
-  EXPECT_THAT(Symbols, UnorderedElementsAre(
-                           AllOf(QName("pörk"), DeclRange(Header.range()))));
-}
-
-TEST_F(SymbolCollectorTest, DoNotIndexSymbolsInFriendDecl) {
-  Annotations Header(R"(
-    namespace nx {
-      class $z[[Z]] {};
-      class X {
-        friend class Y;
-        friend class Z;
-        friend void foo();
-        friend void $bar[[bar]]() {}
-      };
-      class $y[[Y]] {};
-      void $foo[[foo]]();
-    }
-  )");
-  runSymbolCollector(Header.code(), /*Main=*/"");
-
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAre(
-                  QName("nx"), QName("nx::X"),
-                  AllOf(QName("nx::Y"), DeclRange(Header.range("y"))),
-                  AllOf(QName("nx::Z"), DeclRange(Header.range("z"))),
-                  AllOf(QName("nx::foo"), DeclRange(Header.range("foo"))),
-                  AllOf(QName("nx::bar"), DeclRange(Header.range("bar")))));
-}
-
-TEST_F(SymbolCollectorTest, ReferencesInFriendDecl) {
-  const std::string Header = R"(
-    class X;
-    class Y;
-  )";
-  const std::string Main = R"(
-    class C {
-      friend ::X;
-      friend class Y;
-    };
-  )";
-  CollectorOpts.CountReferences = true;
-  runSymbolCollector(Header, Main);
-  EXPECT_THAT(Symbols, UnorderedElementsAre(AllOf(QName("X"), RefCount(1)),
-                                            AllOf(QName("Y"), RefCount(1)),
-                                            AllOf(QName("C"), RefCount(0))));
-}
-
-TEST_F(SymbolCollectorTest, Origin) {
-  CollectorOpts.Origin = SymbolOrigin::Static;
-  runSymbolCollector("class Foo {};", /*Main=*/"");
-  EXPECT_THAT(Symbols, UnorderedElementsAre(
-                           Field(&Symbol::Origin, SymbolOrigin::Static)));
-}
-
-TEST_F(SymbolCollectorTest, CollectMacros) {
-  CollectorOpts.CollectIncludePath = true;
-  Annotations Header(R"(
-    #pragma once
-    #define X 1
-    #define $mac[[MAC]](x) int x
-    #define $used[[USED]](y) float y;
-
-    MAC(p);
-  )");
-
-  Annotations Main(R"(
-    #define $main[[MAIN]] 1
-     USED(t);
-  )");
-  CollectorOpts.CountReferences = true;
-  CollectorOpts.CollectMacro = true;
-  runSymbolCollector(Header.code(), Main.code());
-  EXPECT_THAT(
-      Symbols,
-      UnorderedElementsAre(
-          QName("p"), QName("t"),
-          AllOf(QName("X"), DeclURI(TestHeaderURI),
-                IncludeHeader(TestHeaderURI)),
-          AllOf(Labeled("MAC(x)"), RefCount(0),
-
-                DeclRange(Header.range("mac")), VisibleOutsideFile()),
-          AllOf(Labeled("USED(y)"), RefCount(1),
-                DeclRange(Header.range("used")), VisibleOutsideFile()),
-          AllOf(Labeled("MAIN"), RefCount(0), DeclRange(Main.range("main")),
-                Not(VisibleOutsideFile()))));
-}
-
-TEST_F(SymbolCollectorTest, DeprecatedSymbols) {
-  const std::string Header = R"(
-    void TestClangc() __attribute__((deprecated("", "")));
-    void TestClangd();
-  )";
-  runSymbolCollector(Header, /**/ "");
-  EXPECT_THAT(Symbols, UnorderedElementsAre(
-                           AllOf(QName("TestClangc"), Deprecated()),
-                           AllOf(QName("TestClangd"), Not(Deprecated()))));
-}
-
-TEST_F(SymbolCollectorTest, ImplementationDetail) {
-  const std::string Header = R"(
-    #define DECL_NAME(x, y) x##_##y##_Decl
-    #define DECL(x, y) class DECL_NAME(x, y) {};
-    DECL(X, Y); // X_Y_Decl
-
-    class Public {};
-  )";
-  runSymbolCollector(Header, /**/ "");
-  EXPECT_THAT(Symbols,
-              UnorderedElementsAre(
-                  AllOf(QName("X_Y_Decl"), ImplementationDetail()),
-                  AllOf(QName("Public"), Not(ImplementationDetail()))));
-}
-
-TEST_F(SymbolCollectorTest, UsingDecl) {
-  const char *Header = R"(
-  void foo();
-  namespace std {
-    using ::foo;
-  })";
-  runSymbolCollector(Header, /**/ "");
-  EXPECT_THAT(Symbols, Contains(QName("std::foo")));
-}
-
-TEST_F(SymbolCollectorTest, CBuiltins) {
-  // In C, printf in stdio.h is a redecl of an implicit builtin.
-  const char *Header = R"(
-    extern int printf(const char*, ...);
-  )";
-  runSymbolCollector(Header, /**/ "", {"-xc"});
-  EXPECT_THAT(Symbols, Contains(QName("printf")));
-}
-
-TEST_F(SymbolCollectorTest, InvalidSourceLoc) {
-  const char *Header = R"(
-      void operator delete(void*)
-        __attribute__((__externally_visible__));)";
-  runSymbolCollector(Header, /**/ "");
-  EXPECT_THAT(Symbols, Contains(QName("operator delete")));
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/SymbolInfoTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/SymbolInfoTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/SymbolInfoTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/SymbolInfoTests.cpp (removed)
@@ -1,339 +0,0 @@
-//===-- SymbolInfoTests.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 "Annotations.h"
-#include "ClangdUnit.h"
-#include "Compiler.h"
-#include "Matchers.h"
-#include "SyncAPI.h"
-#include "TestFS.h"
-#include "TestTU.h"
-#include "XRefs.h"
-#include "index/FileIndex.h"
-#include "index/SymbolCollector.h"
-#include "clang/Index/IndexingAction.h"
-#include "llvm/Support/Path.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-
-using testing::ElementsAreArray;
-
-auto CreateExpectedSymbolDetails = [](const std::string &name,
-                                      const std::string &container,
-                                      const std::string &USR) {
-  return SymbolDetails{name, container, USR, SymbolID(USR)};
-};
-
-TEST(SymbolInfoTests, All) {
-  std::pair<const char *, std::vector<SymbolDetails>>
-      TestInputExpectedOutput[] = {
-          {
-              R"cpp( // Simple function reference - declaration
-          void foo();
-          int bar() {
-            fo^o();
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails("foo", "", "c:@F at foo#")}},
-          {
-              R"cpp( // Simple function reference - definition
-          void foo() {}
-          int bar() {
-            fo^o();
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails("foo", "", "c:@F at foo#")}},
-          {
-              R"cpp( // Function in namespace reference
-          namespace bar {
-            void foo();
-            int baz() {
-              fo^o();
-            }
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails("foo", "bar::", "c:@N at bar@F at foo#")}},
-          {
-              R"cpp( // Function in different namespace reference
-          namespace bar {
-            void foo();
-          }
-          namespace barbar {
-            int baz() {
-              bar::fo^o();
-            }
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails("foo", "bar::", "c:@N at bar@F at foo#")}},
-          {
-              R"cpp( // Function in global namespace reference
-          void foo();
-          namespace Nbar {
-            namespace Nbaz {
-              int baz() {
-                ::fo^o();
-              }
-            }
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails("foo", "", "c:@F at foo#")}},
-          {
-              R"cpp( // Function in anonymous namespace reference
-          namespace {
-            void foo();
-          }
-          namespace barbar {
-            int baz() {
-              fo^o();
-            }
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails("foo", "(anonymous)",
-                                           "c:TestTU.cpp at aN@F at foo#")}},
-          {
-              R"cpp( // Function reference - ADL
-          namespace bar {
-            struct BarType {};
-            void foo(const BarType&);
-          }
-          namespace barbar {
-            int baz() {
-              bar::BarType b;
-              fo^o(b);
-            }
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails(
-                  "foo", "bar::", "c:@N at bar@F at foo#&1$@N at bar@S at BarType#")}},
-          {
-              R"cpp( // Global value reference
-          int value;
-          void foo(int) { }
-          void bar() {
-            foo(val^ue);
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails("value", "", "c:@value")}},
-          {
-              R"cpp( // Local value reference
-          void foo() { int aaa; int bbb = aa^a; }
-        )cpp",
-              {CreateExpectedSymbolDetails("aaa", "foo",
-                                           "c:TestTU.cpp at 49@F at foo#@aaa")}},
-          {
-              R"cpp( // Function param
-          void bar(int aaa) {
-            int bbb = a^aa;
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails("aaa", "bar",
-                                           "c:TestTU.cpp at 38@F at bar#I#@aaa")}},
-          {
-              R"cpp( // Lambda capture
-          int ii;
-          auto lam = [ii]() {
-            return i^i;
-          };
-        )cpp",
-              {CreateExpectedSymbolDetails("ii", "", "c:@ii")}},
-          {
-              R"cpp( // Macro reference
-          #define MACRO 5\nint i = MAC^RO;
-        )cpp",
-              {CreateExpectedSymbolDetails("MACRO", "",
-                                           "c:TestTU.cpp at 38@macro at MACRO")}},
-          {
-              R"cpp( // Macro reference
-          #define MACRO 5\nint i = MACRO^;
-        )cpp",
-              {CreateExpectedSymbolDetails("MACRO", "",
-                                           "c:TestTU.cpp at 38@macro at MACRO")}},
-          {
-              R"cpp( // Multiple symbols returned - using overloaded function name
-          void foo() {}
-          void foo(bool) {}
-          void foo(int) {}
-          namespace bar {
-            using ::fo^o;
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails("foo", "", "c:@F at foo#"),
-               CreateExpectedSymbolDetails("foo", "", "c:@F at foo#b#"),
-               CreateExpectedSymbolDetails("foo", "", "c:@F at foo#I#"),
-               CreateExpectedSymbolDetails("foo", "bar::", "c:@N at bar@UD at foo")}},
-          {
-              R"cpp( // Multiple symbols returned - implicit conversion
-          struct foo {};
-          struct bar {
-            bar(const foo&) {}
-          };
-          void func_baz1(bar) {}
-          void func_baz2() {
-            foo ff;
-            func_baz1(f^f);
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails(
-                  "ff", "func_baz2", "c:TestTU.cpp at 218@F at func_baz2#@ff")}},
-          {
-              R"cpp( // Type reference - declaration
-          struct foo;
-          void bar(fo^o*);
-        )cpp",
-              {CreateExpectedSymbolDetails("foo", "", "c:@S at foo")}},
-          {
-              R"cpp( // Type reference - definition
-          struct foo {};
-          void bar(fo^o*);
-        )cpp",
-              {CreateExpectedSymbolDetails("foo", "", "c:@S at foo")}},
-          {
-              R"cpp( // Type Reference - template argumen
-          struct foo {};
-          template<class T> struct bar {};
-          void baz() {
-            bar<fo^o> b;
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails("foo", "", "c:@S at foo")}},
-          {
-              R"cpp( // Template parameter reference - type param
-          template<class TT> struct bar {
-            T^T t;
-          };
-        )cpp",
-              {CreateExpectedSymbolDetails("TT", "bar::", "c:TestTU.cpp at 65")}},
-          {
-              R"cpp( // Template parameter reference - type param
-          template<int NN> struct bar {
-            int a = N^N;
-          };
-        )cpp",
-              {CreateExpectedSymbolDetails("NN", "bar::", "c:TestTU.cpp at 65")}},
-          {
-              R"cpp( // Class member reference - objec
-          struct foo {
-            int aa;
-          };
-          void bar() {
-            foo f;
-            f.a^a;
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails("aa", "foo::", "c:@S at foo@FI at aa")}},
-          {
-              R"cpp( // Class member reference - pointer
-          struct foo {
-            int aa;
-          };
-          void bar() {
-            &foo::a^a;
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails("aa", "foo::", "c:@S at foo@FI at aa")}},
-          {
-              R"cpp( // Class method reference - objec
-          struct foo {
-            void aa() {}
-          };
-          void bar() {
-            foo f;
-            f.a^a();
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails("aa", "foo::", "c:@S at foo@F at aa#")}},
-          {
-              R"cpp( // Class method reference - pointer
-          struct foo {
-            void aa() {}
-          };
-          void bar() {
-            &foo::a^a;
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails("aa", "foo::", "c:@S at foo@F at aa#")}},
-          {
-              R"cpp( // Typedef
-          typedef int foo;
-          void bar() {
-            fo^o a;
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails("foo", "", "c:TestTU.cpp at T@foo")}},
-          {
-              R"cpp( // Type alias
-          using foo = int;
-          void bar() {
-            fo^o a;
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails("foo", "", "c:@foo")}},
-          {
-              R"cpp( // Namespace reference
-          namespace foo {}
-          using namespace fo^o;
-        )cpp",
-              {CreateExpectedSymbolDetails("foo", "", "c:@N at foo")}},
-          {
-              R"cpp( // Enum value reference
-          enum foo { bar, baz };
-          void f() {
-            foo fff = ba^r;
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails("bar", "foo", "c:@E at foo@bar")}},
-          {
-              R"cpp( // Enum class value reference
-          enum class foo { bar, baz };
-          void f() {
-            foo fff = foo::ba^r;
-          }
-        )cpp",
-              {CreateExpectedSymbolDetails("bar", "foo::", "c:@E at foo@bar")}},
-          {
-              R"cpp( // Parameters in declarations
-          void foo(int ba^r);
-        )cpp",
-              {CreateExpectedSymbolDetails("bar", "foo",
-                                           "c:TestTU.cpp at 50@F at foo#I#@bar")}},
-          {
-              R"cpp( // Type inferrence with auto keyword
-          struct foo {};
-          foo getfoo() { return foo{}; }
-          void f() {
-            au^to a = getfoo();
-          }
-        )cpp",
-              {/* not implemented */}},
-          {
-              R"cpp( // decltype
-          struct foo {};
-          void f() {
-            foo f;
-            declt^ype(f);
-          }
-        )cpp",
-              {/* not implemented */}},
-      };
-
-  for (const auto &T : TestInputExpectedOutput) {
-    Annotations TestInput(T.first);
-    auto AST = TestTU::withCode(TestInput.code()).build();
-
-    EXPECT_THAT(getSymbolInfo(AST, TestInput.point()),
-                ElementsAreArray(T.second))
-        << T.first;
-  }
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/SyncAPI.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/SyncAPI.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/SyncAPI.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/SyncAPI.cpp (removed)
@@ -1,151 +0,0 @@
-//===--- SyncAPI.cpp - Sync version of ClangdServer's API --------*- 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 "SyncAPI.h"
-#include "index/Index.h"
-
-namespace clang {
-namespace clangd {
-
-void runAddDocument(ClangdServer &Server, PathRef File,
-                    llvm::StringRef Contents, WantDiagnostics WantDiags) {
-  Server.addDocument(File, Contents, WantDiags);
-  if (!Server.blockUntilIdleForTest())
-    llvm_unreachable("not idle after addDocument");
-}
-
-namespace {
-/// A helper that waits for async callbacks to fire and exposes their result in
-/// the output variable. Intended to be used in the following way:
-///    T Result;
-///    someAsyncFunc(Param1, Param2, /*Callback=*/capture(Result));
-template <typename T> struct CaptureProxy {
-  CaptureProxy(llvm::Optional<T> &Target) : Target(&Target) {
-    assert(!Target.hasValue());
-  }
-
-  CaptureProxy(const CaptureProxy &) = delete;
-  CaptureProxy &operator=(const CaptureProxy &) = delete;
-  // We need move ctor to return a value from the 'capture' helper.
-  CaptureProxy(CaptureProxy &&Other) : Target(Other.Target) {
-    Other.Target = nullptr;
-  }
-  CaptureProxy &operator=(CaptureProxy &&) = delete;
-
-  operator llvm::unique_function<void(T)>() && {
-    assert(!Future.valid() && "conversion to callback called multiple times");
-    Future = Promise.get_future();
-    return Bind(
-        [](std::promise<std::shared_ptr<T>> Promise, T Value) {
-          Promise.set_value(std::make_shared<T>(std::move(Value)));
-        },
-        std::move(Promise));
-  }
-
-  ~CaptureProxy() {
-    if (!Target)
-      return;
-    assert(Future.valid() && "conversion to callback was not called");
-    assert(!Target->hasValue());
-    Target->emplace(std::move(*Future.get()));
-  }
-
-private:
-  llvm::Optional<T> *Target;
-  // Using shared_ptr to workaround compilation errors with MSVC.
-  // MSVC only allows default-construcitble and copyable objects as future<>
-  // arguments.
-  std::promise<std::shared_ptr<T>> Promise;
-  std::future<std::shared_ptr<T>> Future;
-};
-
-template <typename T> CaptureProxy<T> capture(llvm::Optional<T> &Target) {
-  return CaptureProxy<T>(Target);
-}
-} // namespace
-
-llvm::Expected<CodeCompleteResult>
-runCodeComplete(ClangdServer &Server, PathRef File, Position Pos,
-                clangd::CodeCompleteOptions Opts) {
-  llvm::Optional<llvm::Expected<CodeCompleteResult>> Result;
-  Server.codeComplete(File, Pos, Opts, capture(Result));
-  return std::move(*Result);
-}
-
-llvm::Expected<SignatureHelp> runSignatureHelp(ClangdServer &Server,
-                                               PathRef File, Position Pos) {
-  llvm::Optional<llvm::Expected<SignatureHelp>> Result;
-  Server.signatureHelp(File, Pos, capture(Result));
-  return std::move(*Result);
-}
-
-llvm::Expected<std::vector<LocatedSymbol>>
-runLocateSymbolAt(ClangdServer &Server, PathRef File, Position Pos) {
-  llvm::Optional<llvm::Expected<std::vector<LocatedSymbol>>> Result;
-  Server.locateSymbolAt(File, Pos, capture(Result));
-  return std::move(*Result);
-}
-
-llvm::Expected<std::vector<DocumentHighlight>>
-runFindDocumentHighlights(ClangdServer &Server, PathRef File, Position Pos) {
-  llvm::Optional<llvm::Expected<std::vector<DocumentHighlight>>> Result;
-  Server.findDocumentHighlights(File, Pos, capture(Result));
-  return std::move(*Result);
-}
-
-llvm::Expected<std::vector<TextEdit>> runRename(ClangdServer &Server,
-                                                PathRef File, Position Pos,
-                                                llvm::StringRef NewName) {
-  llvm::Optional<llvm::Expected<std::vector<TextEdit>>> Result;
-  Server.rename(File, Pos, NewName, capture(Result));
-  return std::move(*Result);
-}
-
-std::string runDumpAST(ClangdServer &Server, PathRef File) {
-  llvm::Optional<std::string> Result;
-  Server.dumpAST(File, capture(Result));
-  return std::move(*Result);
-}
-
-llvm::Expected<std::vector<SymbolInformation>>
-runWorkspaceSymbols(ClangdServer &Server, llvm::StringRef Query, int Limit) {
-  llvm::Optional<llvm::Expected<std::vector<SymbolInformation>>> Result;
-  Server.workspaceSymbols(Query, Limit, capture(Result));
-  return std::move(*Result);
-}
-
-llvm::Expected<std::vector<DocumentSymbol>>
-runDocumentSymbols(ClangdServer &Server, PathRef File) {
-  llvm::Optional<llvm::Expected<std::vector<DocumentSymbol>>> Result;
-  Server.documentSymbols(File, capture(Result));
-  return std::move(*Result);
-}
-
-SymbolSlab runFuzzyFind(const SymbolIndex &Index, llvm::StringRef Query) {
-  FuzzyFindRequest Req;
-  Req.Query = Query;
-  Req.AnyScope = true;
-  return runFuzzyFind(Index, Req);
-}
-
-SymbolSlab runFuzzyFind(const SymbolIndex &Index, const FuzzyFindRequest &Req) {
-  SymbolSlab::Builder Builder;
-  Index.fuzzyFind(Req, [&](const Symbol &Sym) { Builder.insert(Sym); });
-  return std::move(Builder).build();
-}
-
-RefSlab getRefs(const SymbolIndex &Index, SymbolID ID) {
-  RefsRequest Req;
-  Req.IDs = {ID};
-  RefSlab::Builder Slab;
-  Index.refs(Req, [&](const Ref &S) { Slab.insert(ID, S); });
-  return std::move(Slab).build();
-}
-
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/SyncAPI.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/SyncAPI.h?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/SyncAPI.h (original)
+++ clang-tools-extra/trunk/unittests/clangd/SyncAPI.h (removed)
@@ -1,59 +0,0 @@
-//===--- SyncAPI.h - Sync version of ClangdServer's API ----------*- 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
-//
-//===----------------------------------------------------------------------===//
-//
-// This file contains synchronous versions of ClangdServer's async API. We
-// deliberately don't expose the sync API outside tests to encourage using the
-// async versions in clangd code.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_TOOLS_EXTRA_UNITTESTS_CLANGD_SYNCAPI_H
-#define LLVM_CLANG_TOOLS_EXTRA_UNITTESTS_CLANGD_SYNCAPI_H
-
-#include "ClangdServer.h"
-#include "index/Index.h"
-
-namespace clang {
-namespace clangd {
-
-// Calls addDocument and then blockUntilIdleForTest.
-void runAddDocument(ClangdServer &Server, PathRef File, StringRef Contents,
-                    WantDiagnostics WantDiags = WantDiagnostics::Auto);
-
-llvm::Expected<CodeCompleteResult>
-runCodeComplete(ClangdServer &Server, PathRef File, Position Pos,
-                clangd::CodeCompleteOptions Opts);
-
-llvm::Expected<SignatureHelp> runSignatureHelp(ClangdServer &Server,
-                                               PathRef File, Position Pos);
-
-llvm::Expected<std::vector<LocatedSymbol>>
-runLocateSymbolAt(ClangdServer &Server, PathRef File, Position Pos);
-
-llvm::Expected<std::vector<DocumentHighlight>>
-runFindDocumentHighlights(ClangdServer &Server, PathRef File, Position Pos);
-
-llvm::Expected<std::vector<TextEdit>>
-runRename(ClangdServer &Server, PathRef File, Position Pos, StringRef NewName);
-
-std::string runDumpAST(ClangdServer &Server, PathRef File);
-
-llvm::Expected<std::vector<SymbolInformation>>
-runWorkspaceSymbols(ClangdServer &Server, StringRef Query, int Limit);
-
-Expected<std::vector<DocumentSymbol>> runDocumentSymbols(ClangdServer &Server,
-                                                         PathRef File);
-
-SymbolSlab runFuzzyFind(const SymbolIndex &Index, StringRef Query);
-SymbolSlab runFuzzyFind(const SymbolIndex &Index, const FuzzyFindRequest &Req);
-RefSlab getRefs(const SymbolIndex &Index, SymbolID ID);
-
-} // namespace clangd
-} // namespace clang
-
-#endif // LLVM_CLANG_TOOLS_EXTRA_UNITTESTS_CLANGD_SYNCAPI_H

Removed: clang-tools-extra/trunk/unittests/clangd/TUSchedulerTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/TUSchedulerTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/TUSchedulerTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/TUSchedulerTests.cpp (removed)
@@ -1,710 +0,0 @@
-//===-- TUSchedulerTests.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 "Annotations.h"
-#include "Context.h"
-#include "Matchers.h"
-#include "TUScheduler.h"
-#include "TestFS.h"
-#include "llvm/ADT/ScopeExit.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-#include <algorithm>
-#include <utility>
-
-namespace clang {
-namespace clangd {
-namespace {
-
-using ::testing::AnyOf;
-using ::testing::Each;
-using ::testing::ElementsAre;
-using ::testing::Pointee;
-using ::testing::UnorderedElementsAre;
-
-MATCHER_P2(TUState, State, ActionName, "") {
-  return arg.Action.S == State && arg.Action.Name == ActionName;
-}
-
-class TUSchedulerTests : public ::testing::Test {
-protected:
-  ParseInputs getInputs(PathRef File, std::string Contents) {
-    ParseInputs Inputs;
-    Inputs.CompileCommand = *CDB.getCompileCommand(File);
-    Inputs.FS = buildTestFS(Files, Timestamps);
-    Inputs.Contents = std::move(Contents);
-    Inputs.Opts = ParseOptions();
-    return Inputs;
-  }
-
-  void updateWithCallback(TUScheduler &S, PathRef File,
-                          llvm::StringRef Contents, WantDiagnostics WD,
-                          llvm::unique_function<void()> CB) {
-    WithContextValue Ctx(llvm::make_scope_exit(std::move(CB)));
-    S.update(File, getInputs(File, Contents), WD);
-  }
-
-  static Key<llvm::unique_function<void(PathRef File, std::vector<Diag>)>>
-      DiagsCallbackKey;
-
-  /// A diagnostics callback that should be passed to TUScheduler when it's used
-  /// in updateWithDiags.
-  static std::unique_ptr<ParsingCallbacks> captureDiags() {
-    class CaptureDiags : public ParsingCallbacks {
-      void onDiagnostics(PathRef File, std::vector<Diag> Diags) override {
-        auto D = Context::current().get(DiagsCallbackKey);
-        if (!D)
-          return;
-        const_cast<llvm::unique_function<void(PathRef, std::vector<Diag>)> &> (
-            *D)(File, Diags);
-      }
-    };
-    return llvm::make_unique<CaptureDiags>();
-  }
-
-  /// Schedule an update and call \p CB with the diagnostics it produces, if
-  /// any. The TUScheduler should be created with captureDiags as a
-  /// DiagsCallback for this to work.
-  void updateWithDiags(TUScheduler &S, PathRef File, ParseInputs Inputs,
-                       WantDiagnostics WD,
-                       llvm::unique_function<void(std::vector<Diag>)> CB) {
-    Path OrigFile = File.str();
-    WithContextValue Ctx(
-        DiagsCallbackKey,
-        Bind(
-            [OrigFile](decltype(CB) CB, PathRef File, std::vector<Diag> Diags) {
-              assert(File == OrigFile);
-              CB(std::move(Diags));
-            },
-            std::move(CB)));
-    S.update(File, std::move(Inputs), WD);
-  }
-
-  void updateWithDiags(TUScheduler &S, PathRef File, llvm::StringRef Contents,
-                       WantDiagnostics WD,
-                       llvm::unique_function<void(std::vector<Diag>)> CB) {
-    return updateWithDiags(S, File, getInputs(File, Contents), WD,
-                           std::move(CB));
-  }
-
-  llvm::StringMap<std::string> Files;
-  llvm::StringMap<time_t> Timestamps;
-  MockCompilationDatabase CDB;
-};
-
-Key<llvm::unique_function<void(PathRef File, std::vector<Diag>)>>
-    TUSchedulerTests::DiagsCallbackKey;
-
-TEST_F(TUSchedulerTests, MissingFiles) {
-  TUScheduler S(CDB, getDefaultAsyncThreadsCount(),
-                /*StorePreamblesInMemory=*/true, /*ASTCallbacks=*/nullptr,
-                /*UpdateDebounce=*/std::chrono::steady_clock::duration::zero(),
-                ASTRetentionPolicy());
-
-  auto Added = testPath("added.cpp");
-  Files[Added] = "";
-
-  auto Missing = testPath("missing.cpp");
-  Files[Missing] = "";
-
-  S.update(Added, getInputs(Added, ""), WantDiagnostics::No);
-
-  // Assert each operation for missing file is an error (even if it's available
-  // in VFS).
-  S.runWithAST("", Missing,
-               [&](Expected<InputsAndAST> AST) { EXPECT_ERROR(AST); });
-  S.runWithPreamble(
-      "", Missing, TUScheduler::Stale,
-      [&](Expected<InputsAndPreamble> Preamble) { EXPECT_ERROR(Preamble); });
-  // remove() shouldn't crash on missing files.
-  S.remove(Missing);
-
-  // Assert there aren't any errors for added file.
-  S.runWithAST("", Added,
-               [&](Expected<InputsAndAST> AST) { EXPECT_TRUE(bool(AST)); });
-  S.runWithPreamble("", Added, TUScheduler::Stale,
-                    [&](Expected<InputsAndPreamble> Preamble) {
-                      EXPECT_TRUE(bool(Preamble));
-                    });
-  S.remove(Added);
-
-  // Assert that all operations fail after removing the file.
-  S.runWithAST("", Added,
-               [&](Expected<InputsAndAST> AST) { EXPECT_ERROR(AST); });
-  S.runWithPreamble("", Added, TUScheduler::Stale,
-                    [&](Expected<InputsAndPreamble> Preamble) {
-                      ASSERT_FALSE(bool(Preamble));
-                      llvm::consumeError(Preamble.takeError());
-                    });
-  // remove() shouldn't crash on missing files.
-  S.remove(Added);
-}
-
-TEST_F(TUSchedulerTests, WantDiagnostics) {
-  std::atomic<int> CallbackCount(0);
-  {
-    // To avoid a racy test, don't allow tasks to actualy run on the worker
-    // thread until we've scheduled them all.
-    Notification Ready;
-    TUScheduler S(
-        CDB, getDefaultAsyncThreadsCount(),
-        /*StorePreamblesInMemory=*/true, captureDiags(),
-        /*UpdateDebounce=*/std::chrono::steady_clock::duration::zero(),
-        ASTRetentionPolicy());
-    auto Path = testPath("foo.cpp");
-    updateWithDiags(S, Path, "", WantDiagnostics::Yes,
-                    [&](std::vector<Diag>) { Ready.wait(); });
-    updateWithDiags(S, Path, "request diags", WantDiagnostics::Yes,
-                    [&](std::vector<Diag>) { ++CallbackCount; });
-    updateWithDiags(S, Path, "auto (clobbered)", WantDiagnostics::Auto,
-                    [&](std::vector<Diag>) {
-                      ADD_FAILURE()
-                          << "auto should have been cancelled by auto";
-                    });
-    updateWithDiags(S, Path, "request no diags", WantDiagnostics::No,
-                    [&](std::vector<Diag>) {
-                      ADD_FAILURE() << "no diags should not be called back";
-                    });
-    updateWithDiags(S, Path, "auto (produces)", WantDiagnostics::Auto,
-                    [&](std::vector<Diag>) { ++CallbackCount; });
-    Ready.notify();
-
-    ASSERT_TRUE(S.blockUntilIdle(timeoutSeconds(10)));
-  }
-  EXPECT_EQ(2, CallbackCount);
-}
-
-TEST_F(TUSchedulerTests, Debounce) {
-  std::atomic<int> CallbackCount(0);
-  {
-    TUScheduler S(CDB, getDefaultAsyncThreadsCount(),
-                  /*StorePreamblesInMemory=*/true, captureDiags(),
-                  /*UpdateDebounce=*/std::chrono::seconds(1),
-                  ASTRetentionPolicy());
-    // FIXME: we could probably use timeouts lower than 1 second here.
-    auto Path = testPath("foo.cpp");
-    updateWithDiags(S, Path, "auto (debounced)", WantDiagnostics::Auto,
-                    [&](std::vector<Diag>) {
-                      ADD_FAILURE()
-                          << "auto should have been debounced and canceled";
-                    });
-    std::this_thread::sleep_for(std::chrono::milliseconds(200));
-    updateWithDiags(S, Path, "auto (timed out)", WantDiagnostics::Auto,
-                    [&](std::vector<Diag>) { ++CallbackCount; });
-    std::this_thread::sleep_for(std::chrono::seconds(2));
-    updateWithDiags(S, Path, "auto (shut down)", WantDiagnostics::Auto,
-                    [&](std::vector<Diag>) { ++CallbackCount; });
-
-    ASSERT_TRUE(S.blockUntilIdle(timeoutSeconds(10)));
-  }
-  EXPECT_EQ(2, CallbackCount);
-}
-
-static std::vector<std::string> includes(const PreambleData *Preamble) {
-  std::vector<std::string> Result;
-  if (Preamble)
-    for (const auto &Inclusion : Preamble->Includes.MainFileIncludes)
-      Result.push_back(Inclusion.Written);
-  return Result;
-}
-
-TEST_F(TUSchedulerTests, PreambleConsistency) {
-  std::atomic<int> CallbackCount(0);
-  {
-    Notification InconsistentReadDone; // Must live longest.
-    TUScheduler S(
-        CDB, getDefaultAsyncThreadsCount(), /*StorePreamblesInMemory=*/true,
-        /*ASTCallbacks=*/nullptr,
-        /*UpdateDebounce=*/std::chrono::steady_clock::duration::zero(),
-        ASTRetentionPolicy());
-    auto Path = testPath("foo.cpp");
-    // Schedule two updates (A, B) and two preamble reads (stale, consistent).
-    // The stale read should see A, and the consistent read should see B.
-    // (We recognize the preambles by their included files).
-    updateWithCallback(S, Path, "#include <A>", WantDiagnostics::Yes, [&]() {
-      // This callback runs in between the two preamble updates.
-
-      // This blocks update B, preventing it from winning the race
-      // against the stale read.
-      // If the first read was instead consistent, this would deadlock.
-      InconsistentReadDone.wait();
-      // This delays update B, preventing it from winning a race
-      // against the consistent read. The consistent read sees B
-      // only because it waits for it.
-      // If the second read was stale, it would usually see A.
-      std::this_thread::sleep_for(std::chrono::milliseconds(100));
-    });
-    S.update(Path, getInputs(Path, "#include <B>"), WantDiagnostics::Yes);
-
-    S.runWithPreamble("StaleRead", Path, TUScheduler::Stale,
-                      [&](Expected<InputsAndPreamble> Pre) {
-                        ASSERT_TRUE(bool(Pre));
-                        assert(bool(Pre));
-                        EXPECT_THAT(includes(Pre->Preamble),
-                                    ElementsAre("<A>"));
-                        InconsistentReadDone.notify();
-                        ++CallbackCount;
-                      });
-    S.runWithPreamble("ConsistentRead", Path, TUScheduler::Consistent,
-                      [&](Expected<InputsAndPreamble> Pre) {
-                        ASSERT_TRUE(bool(Pre));
-                        EXPECT_THAT(includes(Pre->Preamble),
-                                    ElementsAre("<B>"));
-                        ++CallbackCount;
-                      });
-  }
-  EXPECT_EQ(2, CallbackCount);
-}
-
-TEST_F(TUSchedulerTests, Cancellation) {
-  // We have the following update/read sequence
-  //   U0
-  //   U1(WantDiags=Yes) <-- cancelled
-  //    R1               <-- cancelled
-  //   U2(WantDiags=Yes) <-- cancelled
-  //    R2A              <-- cancelled
-  //    R2B
-  //   U3(WantDiags=Yes)
-  //    R3               <-- cancelled
-  std::vector<std::string> DiagsSeen, ReadsSeen, ReadsCanceled;
-  {
-    Notification Proceed; // Ensure we schedule everything.
-    TUScheduler S(
-        CDB, getDefaultAsyncThreadsCount(), /*StorePreamblesInMemory=*/true,
-        /*ASTCallbacks=*/captureDiags(),
-        /*UpdateDebounce=*/std::chrono::steady_clock::duration::zero(),
-        ASTRetentionPolicy());
-    auto Path = testPath("foo.cpp");
-    // Helper to schedule a named update and return a function to cancel it.
-    auto Update = [&](std::string ID) -> Canceler {
-      auto T = cancelableTask();
-      WithContext C(std::move(T.first));
-      updateWithDiags(
-          S, Path, "//" + ID, WantDiagnostics::Yes,
-          [&, ID](std::vector<Diag> Diags) { DiagsSeen.push_back(ID); });
-      return std::move(T.second);
-    };
-    // Helper to schedule a named read and return a function to cancel it.
-    auto Read = [&](std::string ID) -> Canceler {
-      auto T = cancelableTask();
-      WithContext C(std::move(T.first));
-      S.runWithAST(ID, Path, [&, ID](llvm::Expected<InputsAndAST> E) {
-        if (auto Err = E.takeError()) {
-          if (Err.isA<CancelledError>()) {
-            ReadsCanceled.push_back(ID);
-            consumeError(std::move(Err));
-          } else {
-            ADD_FAILURE() << "Non-cancelled error for " << ID << ": "
-                          << llvm::toString(std::move(Err));
-          }
-        } else {
-          ReadsSeen.push_back(ID);
-        }
-      });
-      return std::move(T.second);
-    };
-
-    updateWithCallback(S, Path, "", WantDiagnostics::Yes,
-                       [&]() { Proceed.wait(); });
-    // The second parens indicate cancellation, where present.
-    Update("U1")();
-    Read("R1")();
-    Update("U2")();
-    Read("R2A")();
-    Read("R2B");
-    Update("U3");
-    Read("R3")();
-    Proceed.notify();
-
-    ASSERT_TRUE(S.blockUntilIdle(timeoutSeconds(10)));
-  }
-  EXPECT_THAT(DiagsSeen, ElementsAre("U2", "U3"))
-      << "U1 and all dependent reads were cancelled. "
-         "U2 has a dependent read R2A. "
-         "U3 was not cancelled.";
-  EXPECT_THAT(ReadsSeen, ElementsAre("R2B"))
-      << "All reads other than R2B were cancelled";
-  EXPECT_THAT(ReadsCanceled, ElementsAre("R1", "R2A", "R3"))
-      << "All reads other than R2B were cancelled";
-}
-
-TEST_F(TUSchedulerTests, ManyUpdates) {
-  const int FilesCount = 3;
-  const int UpdatesPerFile = 10;
-
-  std::mutex Mut;
-  int TotalASTReads = 0;
-  int TotalPreambleReads = 0;
-  int TotalUpdates = 0;
-
-  // Run TUScheduler and collect some stats.
-  {
-    TUScheduler S(CDB, getDefaultAsyncThreadsCount(),
-                  /*StorePreamblesInMemory=*/true, captureDiags(),
-                  /*UpdateDebounce=*/std::chrono::milliseconds(50),
-                  ASTRetentionPolicy());
-
-    std::vector<std::string> Files;
-    for (int I = 0; I < FilesCount; ++I) {
-      std::string Name = "foo" + std::to_string(I) + ".cpp";
-      Files.push_back(testPath(Name));
-      this->Files[Files.back()] = "";
-    }
-
-    StringRef Contents1 = R"cpp(int a;)cpp";
-    StringRef Contents2 = R"cpp(int main() { return 1; })cpp";
-    StringRef Contents3 = R"cpp(int a; int b; int sum() { return a + b; })cpp";
-
-    StringRef AllContents[] = {Contents1, Contents2, Contents3};
-    const int AllContentsSize = 3;
-
-    // Scheduler may run tasks asynchronously, but should propagate the context.
-    // We stash a nonce in the context, and verify it in the task.
-    static Key<int> NonceKey;
-    int Nonce = 0;
-
-    for (int FileI = 0; FileI < FilesCount; ++FileI) {
-      for (int UpdateI = 0; UpdateI < UpdatesPerFile; ++UpdateI) {
-        auto Contents = AllContents[(FileI + UpdateI) % AllContentsSize];
-
-        auto File = Files[FileI];
-        auto Inputs = getInputs(File, Contents.str());
-        {
-          WithContextValue WithNonce(NonceKey, ++Nonce);
-          updateWithDiags(
-              S, File, Inputs, WantDiagnostics::Auto,
-              [File, Nonce, &Mut, &TotalUpdates](std::vector<Diag>) {
-                EXPECT_THAT(Context::current().get(NonceKey), Pointee(Nonce));
-
-                std::lock_guard<std::mutex> Lock(Mut);
-                ++TotalUpdates;
-                EXPECT_EQ(File, *TUScheduler::getFileBeingProcessedInContext());
-              });
-        }
-        {
-          WithContextValue WithNonce(NonceKey, ++Nonce);
-          S.runWithAST(
-              "CheckAST", File,
-              [File, Inputs, Nonce, &Mut,
-               &TotalASTReads](Expected<InputsAndAST> AST) {
-                EXPECT_THAT(Context::current().get(NonceKey), Pointee(Nonce));
-
-                ASSERT_TRUE((bool)AST);
-                EXPECT_EQ(AST->Inputs.FS, Inputs.FS);
-                EXPECT_EQ(AST->Inputs.Contents, Inputs.Contents);
-
-                std::lock_guard<std::mutex> Lock(Mut);
-                ++TotalASTReads;
-                EXPECT_EQ(File, *TUScheduler::getFileBeingProcessedInContext());
-              });
-        }
-
-        {
-          WithContextValue WithNonce(NonceKey, ++Nonce);
-          S.runWithPreamble(
-              "CheckPreamble", File, TUScheduler::Stale,
-              [File, Inputs, Nonce, &Mut,
-               &TotalPreambleReads](Expected<InputsAndPreamble> Preamble) {
-                EXPECT_THAT(Context::current().get(NonceKey), Pointee(Nonce));
-
-                ASSERT_TRUE((bool)Preamble);
-                EXPECT_EQ(Preamble->Contents, Inputs.Contents);
-
-                std::lock_guard<std::mutex> Lock(Mut);
-                ++TotalPreambleReads;
-                EXPECT_EQ(File, *TUScheduler::getFileBeingProcessedInContext());
-              });
-        }
-      }
-    }
-    ASSERT_TRUE(S.blockUntilIdle(timeoutSeconds(10)));
-  } // TUScheduler destructor waits for all operations to finish.
-
-  std::lock_guard<std::mutex> Lock(Mut);
-  EXPECT_EQ(TotalUpdates, FilesCount * UpdatesPerFile);
-  EXPECT_EQ(TotalASTReads, FilesCount * UpdatesPerFile);
-  EXPECT_EQ(TotalPreambleReads, FilesCount * UpdatesPerFile);
-}
-
-TEST_F(TUSchedulerTests, EvictedAST) {
-  std::atomic<int> BuiltASTCounter(0);
-  ASTRetentionPolicy Policy;
-  Policy.MaxRetainedASTs = 2;
-  TUScheduler S(CDB,
-                /*AsyncThreadsCount=*/1, /*StorePreambleInMemory=*/true,
-                /*ASTCallbacks=*/nullptr,
-                /*UpdateDebounce=*/std::chrono::steady_clock::duration::zero(),
-                Policy);
-
-  llvm::StringLiteral SourceContents = R"cpp(
-    int* a;
-    double* b = a;
-  )cpp";
-  llvm::StringLiteral OtherSourceContents = R"cpp(
-    int* a;
-    double* b = a + 0;
-  )cpp";
-
-  auto Foo = testPath("foo.cpp");
-  auto Bar = testPath("bar.cpp");
-  auto Baz = testPath("baz.cpp");
-
-  // Build one file in advance. We will not access it later, so it will be the
-  // one that the cache will evict.
-  updateWithCallback(S, Foo, SourceContents, WantDiagnostics::Yes,
-                     [&BuiltASTCounter]() { ++BuiltASTCounter; });
-  ASSERT_TRUE(S.blockUntilIdle(timeoutSeconds(10)));
-  ASSERT_EQ(BuiltASTCounter.load(), 1);
-
-  // Build two more files. Since we can retain only 2 ASTs, these should be the
-  // ones we see in the cache later.
-  updateWithCallback(S, Bar, SourceContents, WantDiagnostics::Yes,
-                     [&BuiltASTCounter]() { ++BuiltASTCounter; });
-  updateWithCallback(S, Baz, SourceContents, WantDiagnostics::Yes,
-                     [&BuiltASTCounter]() { ++BuiltASTCounter; });
-  ASSERT_TRUE(S.blockUntilIdle(timeoutSeconds(10)));
-  ASSERT_EQ(BuiltASTCounter.load(), 3);
-
-  // Check only the last two ASTs are retained.
-  ASSERT_THAT(S.getFilesWithCachedAST(), UnorderedElementsAre(Bar, Baz));
-
-  // Access the old file again.
-  updateWithCallback(S, Foo, OtherSourceContents, WantDiagnostics::Yes,
-                     [&BuiltASTCounter]() { ++BuiltASTCounter; });
-  ASSERT_TRUE(S.blockUntilIdle(timeoutSeconds(10)));
-  ASSERT_EQ(BuiltASTCounter.load(), 4);
-
-  // Check the AST for foo.cpp is retained now and one of the others got
-  // evicted.
-  EXPECT_THAT(S.getFilesWithCachedAST(),
-              UnorderedElementsAre(Foo, AnyOf(Bar, Baz)));
-}
-
-TEST_F(TUSchedulerTests, EmptyPreamble) {
-  TUScheduler S(CDB,
-                /*AsyncThreadsCount=*/4, /*StorePreambleInMemory=*/true,
-                /*ASTCallbacks=*/nullptr,
-                /*UpdateDebounce=*/std::chrono::steady_clock::duration::zero(),
-                ASTRetentionPolicy());
-
-  auto Foo = testPath("foo.cpp");
-  auto Header = testPath("foo.h");
-
-  Files[Header] = "void foo()";
-  Timestamps[Header] = time_t(0);
-  auto WithPreamble = R"cpp(
-    #include "foo.h"
-    int main() {}
-  )cpp";
-  auto WithEmptyPreamble = R"cpp(int main() {})cpp";
-  S.update(Foo, getInputs(Foo, WithPreamble), WantDiagnostics::Auto);
-  S.runWithPreamble(
-      "getNonEmptyPreamble", Foo, TUScheduler::Stale,
-      [&](Expected<InputsAndPreamble> Preamble) {
-        // We expect to get a non-empty preamble.
-        EXPECT_GT(
-            cantFail(std::move(Preamble)).Preamble->Preamble.getBounds().Size,
-            0u);
-      });
-  // Wait for the preamble is being built.
-  ASSERT_TRUE(S.blockUntilIdle(timeoutSeconds(10)));
-
-  // Update the file which results in an empty preamble.
-  S.update(Foo, getInputs(Foo, WithEmptyPreamble), WantDiagnostics::Auto);
-  // Wait for the preamble is being built.
-  ASSERT_TRUE(S.blockUntilIdle(timeoutSeconds(10)));
-  S.runWithPreamble(
-      "getEmptyPreamble", Foo, TUScheduler::Stale,
-      [&](Expected<InputsAndPreamble> Preamble) {
-        // We expect to get an empty preamble.
-        EXPECT_EQ(
-            cantFail(std::move(Preamble)).Preamble->Preamble.getBounds().Size,
-            0u);
-      });
-}
-
-TEST_F(TUSchedulerTests, RunWaitsForPreamble) {
-  // Testing strategy: we update the file and schedule a few preamble reads at
-  // the same time. All reads should get the same non-null preamble.
-  TUScheduler S(CDB,
-                /*AsyncThreadsCount=*/4, /*StorePreambleInMemory=*/true,
-                /*ASTCallbacks=*/nullptr,
-                /*UpdateDebounce=*/std::chrono::steady_clock::duration::zero(),
-                ASTRetentionPolicy());
-  auto Foo = testPath("foo.cpp");
-  auto NonEmptyPreamble = R"cpp(
-    #define FOO 1
-    #define BAR 2
-
-    int main() {}
-  )cpp";
-  constexpr int ReadsToSchedule = 10;
-  std::mutex PreamblesMut;
-  std::vector<const void *> Preambles(ReadsToSchedule, nullptr);
-  S.update(Foo, getInputs(Foo, NonEmptyPreamble), WantDiagnostics::Auto);
-  for (int I = 0; I < ReadsToSchedule; ++I) {
-    S.runWithPreamble(
-        "test", Foo, TUScheduler::Stale,
-        [I, &PreamblesMut, &Preambles](Expected<InputsAndPreamble> IP) {
-          std::lock_guard<std::mutex> Lock(PreamblesMut);
-          Preambles[I] = cantFail(std::move(IP)).Preamble;
-        });
-  }
-  ASSERT_TRUE(S.blockUntilIdle(timeoutSeconds(10)));
-  // Check all actions got the same non-null preamble.
-  std::lock_guard<std::mutex> Lock(PreamblesMut);
-  ASSERT_NE(Preambles[0], nullptr);
-  ASSERT_THAT(Preambles, Each(Preambles[0]));
-}
-
-TEST_F(TUSchedulerTests, NoopOnEmptyChanges) {
-  TUScheduler S(CDB,
-                /*AsyncThreadsCount=*/getDefaultAsyncThreadsCount(),
-                /*StorePreambleInMemory=*/true, captureDiags(),
-                /*UpdateDebounce=*/std::chrono::steady_clock::duration::zero(),
-                ASTRetentionPolicy());
-
-  auto Source = testPath("foo.cpp");
-  auto Header = testPath("foo.h");
-
-  Files[Header] = "int a;";
-  Timestamps[Header] = time_t(0);
-
-  auto SourceContents = R"cpp(
-      #include "foo.h"
-      int b = a;
-    )cpp";
-
-  // Return value indicates if the updated callback was received.
-  auto DoUpdate = [&](std::string Contents) -> bool {
-    std::atomic<bool> Updated(false);
-    Updated = false;
-    updateWithDiags(S, Source, Contents, WantDiagnostics::Yes,
-                    [&Updated](std::vector<Diag>) { Updated = true; });
-    bool UpdateFinished = S.blockUntilIdle(timeoutSeconds(10));
-    if (!UpdateFinished)
-      ADD_FAILURE() << "Updated has not finished in one second. Threading bug?";
-    return Updated;
-  };
-
-  // Test that subsequent updates with the same inputs do not cause rebuilds.
-  ASSERT_TRUE(DoUpdate(SourceContents));
-  ASSERT_FALSE(DoUpdate(SourceContents));
-
-  // Update to a header should cause a rebuild, though.
-  Timestamps[Header] = time_t(1);
-  ASSERT_TRUE(DoUpdate(SourceContents));
-  ASSERT_FALSE(DoUpdate(SourceContents));
-
-  // Update to the contents should cause a rebuild.
-  auto OtherSourceContents = R"cpp(
-      #include "foo.h"
-      int c = d;
-    )cpp";
-  ASSERT_TRUE(DoUpdate(OtherSourceContents));
-  ASSERT_FALSE(DoUpdate(OtherSourceContents));
-
-  // Update to the compile commands should also cause a rebuild.
-  CDB.ExtraClangFlags.push_back("-DSOMETHING");
-  ASSERT_TRUE(DoUpdate(OtherSourceContents));
-  ASSERT_FALSE(DoUpdate(OtherSourceContents));
-}
-
-TEST_F(TUSchedulerTests, NoChangeDiags) {
-  TUScheduler S(CDB,
-                /*AsyncThreadsCount=*/getDefaultAsyncThreadsCount(),
-                /*StorePreambleInMemory=*/true, captureDiags(),
-                /*UpdateDebounce=*/std::chrono::steady_clock::duration::zero(),
-                ASTRetentionPolicy());
-
-  auto FooCpp = testPath("foo.cpp");
-  auto Contents = "int a; int b;";
-
-  updateWithDiags(
-      S, FooCpp, Contents, WantDiagnostics::No,
-      [](std::vector<Diag>) { ADD_FAILURE() << "Should not be called."; });
-  S.runWithAST("touchAST", FooCpp, [](Expected<InputsAndAST> IA) {
-    // Make sure the AST was actually built.
-    cantFail(std::move(IA));
-  });
-  ASSERT_TRUE(S.blockUntilIdle(timeoutSeconds(10)));
-
-  // Even though the inputs didn't change and AST can be reused, we need to
-  // report the diagnostics, as they were not reported previously.
-  std::atomic<bool> SeenDiags(false);
-  updateWithDiags(S, FooCpp, Contents, WantDiagnostics::Auto,
-                  [&](std::vector<Diag>) { SeenDiags = true; });
-  ASSERT_TRUE(S.blockUntilIdle(timeoutSeconds(10)));
-  ASSERT_TRUE(SeenDiags);
-
-  // Subsequent request does not get any diagnostics callback because the same
-  // diags have previously been reported and the inputs didn't change.
-  updateWithDiags(
-      S, FooCpp, Contents, WantDiagnostics::Auto,
-      [&](std::vector<Diag>) { ADD_FAILURE() << "Should not be called."; });
-  ASSERT_TRUE(S.blockUntilIdle(timeoutSeconds(10)));
-}
-
-TEST_F(TUSchedulerTests, Run) {
-  TUScheduler S(CDB, /*AsyncThreadsCount=*/getDefaultAsyncThreadsCount(),
-                /*StorePreambleInMemory=*/true, /*ASTCallbacks=*/nullptr,
-                /*UpdateDebounce=*/std::chrono::steady_clock::duration::zero(),
-                ASTRetentionPolicy());
-  std::atomic<int> Counter(0);
-  S.run("add 1", [&] { ++Counter; });
-  S.run("add 2", [&] { Counter += 2; });
-  ASSERT_TRUE(S.blockUntilIdle(timeoutSeconds(10)));
-  EXPECT_EQ(Counter.load(), 3);
-}
-
-TEST_F(TUSchedulerTests, TUStatus) {
-  class CaptureTUStatus : public DiagnosticsConsumer {
-  public:
-    void onDiagnosticsReady(PathRef File,
-                            std::vector<Diag> Diagnostics) override {}
-
-    void onFileUpdated(PathRef File, const TUStatus &Status) override {
-      std::lock_guard<std::mutex> Lock(Mutex);
-      AllStatus.push_back(Status);
-    }
-
-    std::vector<TUStatus> AllStatus;
-
-  private:
-    std::mutex Mutex;
-  } CaptureTUStatus;
-  MockFSProvider FS;
-  MockCompilationDatabase CDB;
-  ClangdServer Server(CDB, FS, CaptureTUStatus, ClangdServer::optsForTest());
-  Annotations Code("int m^ain () {}");
-
-  // We schedule the following tasks in the queue:
-  //   [Update] [GoToDefinition]
-  Server.addDocument(testPath("foo.cpp"), Code.code(), WantDiagnostics::Yes);
-  Server.locateSymbolAt(testPath("foo.cpp"), Code.point(),
-                        [](Expected<std::vector<LocatedSymbol>> Result) {
-                          ASSERT_TRUE((bool)Result);
-                        });
-
-  ASSERT_TRUE(Server.blockUntilIdleForTest());
-
-  EXPECT_THAT(CaptureTUStatus.AllStatus,
-              ElementsAre(
-                  // Statuses of "Update" action.
-                  TUState(TUAction::RunningAction, "Update"),
-                  TUState(TUAction::BuildingPreamble, "Update"),
-                  TUState(TUAction::BuildingFile, "Update"),
-
-                  // Statuses of "Definitions" action
-                  TUState(TUAction::RunningAction, "Definitions"),
-                  TUState(TUAction::Idle, /*No action*/ "")));
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/TestFS.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/TestFS.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/TestFS.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/TestFS.cpp (removed)
@@ -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

Removed: clang-tools-extra/trunk/unittests/clangd/TestFS.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/TestFS.h?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/TestFS.h (original)
+++ clang-tools-extra/trunk/unittests/clangd/TestFS.h (removed)
@@ -1,73 +0,0 @@
-//===-- 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_UNITTESTS_CLANGD_TESTFS_H
-#define LLVM_CLANG_TOOLS_EXTRA_UNITTESTS_CLANGD_TESTFS_H
-#include "ClangdServer.h"
-#include "llvm/ADT/IntrusiveRefCntPtr.h"
-#include "llvm/Support/Path.h"
-#include "llvm/Support/VirtualFileSystem.h"
-
-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 MockFSProvider : public FileSystemProvider {
-public:
-  IntrusiveRefCntPtr<llvm::vfs::FileSystem> getFileSystem() const override {
-    return buildTestFS(Files);
-  }
-
-  // If relative paths are used, they are resolved with testPath().
-  llvm::StringMap<std::string> Files;
-};
-
-// A Compilation database that returns a fixed set of compile flags.
-class MockCompilationDatabase : public GlobalCompilationDatabase {
-public:
-  /// If \p Directory is not empty, use that as the Directory field of the
-  /// CompileCommand, and as project SourceRoot.
-  ///
-  /// If \p RelPathPrefix is not empty, use that as a prefix in front of the
-  /// source file name, instead of using an absolute path.
-  MockCompilationDatabase(StringRef Directory = StringRef(),
-                          StringRef RelPathPrefix = StringRef());
-
-  llvm::Optional<tooling::CompileCommand>
-  getCompileCommand(PathRef File, ProjectInfo * = nullptr) const override;
-
-  std::vector<std::string> ExtraClangFlags;
-
-private:
-  StringRef Directory;
-  StringRef RelPathPrefix;
-};
-
-// 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);
-
-// 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

Removed: clang-tools-extra/trunk/unittests/clangd/TestIndex.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/TestIndex.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/TestIndex.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/TestIndex.cpp (removed)
@@ -1,118 +0,0 @@
-//===-- TestIndex.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 "TestIndex.h"
-#include "clang/Index/IndexSymbol.h"
-#include "llvm/Support/Regex.h"
-
-namespace clang {
-namespace clangd {
-
-Symbol symbol(llvm::StringRef QName) {
-  Symbol Sym;
-  Sym.ID = SymbolID(QName.str());
-  size_t Pos = QName.rfind("::");
-  if (Pos == llvm::StringRef::npos) {
-    Sym.Name = QName;
-    Sym.Scope = "";
-  } else {
-    Sym.Name = QName.substr(Pos + 2);
-    Sym.Scope = QName.substr(0, Pos + 2);
-  }
-  return Sym;
-}
-
-static std::string replace(llvm::StringRef Haystack, llvm::StringRef Needle,
-                           llvm::StringRef Repl) {
-  llvm::SmallVector<llvm::StringRef, 8> Parts;
-  Haystack.split(Parts, Needle);
-  return llvm::join(Parts, Repl);
-}
-
-// Helpers to produce fake index symbols for memIndex() or completions().
-// USRFormat is a regex replacement string for the unqualified part of the USR.
-Symbol sym(llvm::StringRef QName, index::SymbolKind Kind,
-           llvm::StringRef USRFormat) {
-  Symbol Sym;
-  std::string USR = "c:"; // We synthesize a few simple cases of USRs by hand!
-  size_t Pos = QName.rfind("::");
-  if (Pos == llvm::StringRef::npos) {
-    Sym.Name = QName;
-    Sym.Scope = "";
-  } else {
-    Sym.Name = QName.substr(Pos + 2);
-    Sym.Scope = QName.substr(0, Pos + 2);
-    USR += "@N@" + replace(QName.substr(0, Pos), "::", "@N@"); // ns:: -> @N at ns
-  }
-  USR += llvm::Regex("^.*$").sub(USRFormat, Sym.Name); // e.g. func -> @F at func#
-  Sym.ID = SymbolID(USR);
-  Sym.SymInfo.Kind = Kind;
-  Sym.Flags |= Symbol::IndexedForCodeCompletion;
-  Sym.Origin = SymbolOrigin::Static;
-  return Sym;
-}
-
-Symbol func(llvm::StringRef Name) { // Assumes the function has no args.
-  return sym(Name, index::SymbolKind::Function, "@F@\\0#"); // no args
-}
-
-Symbol cls(llvm::StringRef Name) {
-  return sym(Name, index::SymbolKind::Class, "@S@\\0");
-}
-
-Symbol var(llvm::StringRef Name) {
-  return sym(Name, index::SymbolKind::Variable, "@\\0");
-}
-
-Symbol ns(llvm::StringRef Name) {
-  return sym(Name, index::SymbolKind::Namespace, "@N@\\0");
-}
-
-SymbolSlab generateSymbols(std::vector<std::string> QualifiedNames) {
-  SymbolSlab::Builder Slab;
-  for (llvm::StringRef QName : QualifiedNames)
-    Slab.insert(symbol(QName));
-  return std::move(Slab).build();
-}
-
-SymbolSlab generateNumSymbols(int Begin, int End) {
-  std::vector<std::string> Names;
-  for (int i = Begin; i <= End; i++)
-    Names.push_back(std::to_string(i));
-  return generateSymbols(Names);
-}
-
-std::string getQualifiedName(const Symbol &Sym) {
-  return (Sym.Scope + Sym.Name + Sym.TemplateSpecializationArgs).str();
-}
-
-std::vector<std::string> match(const SymbolIndex &I,
-                               const FuzzyFindRequest &Req, bool *Incomplete) {
-  std::vector<std::string> Matches;
-  bool IsIncomplete = I.fuzzyFind(Req, [&](const Symbol &Sym) {
-    Matches.push_back(clang::clangd::getQualifiedName(Sym));
-  });
-  if (Incomplete)
-    *Incomplete = IsIncomplete;
-  return Matches;
-}
-
-// Returns qualified names of symbols with any of IDs in the index.
-std::vector<std::string> lookup(const SymbolIndex &I,
-                                llvm::ArrayRef<SymbolID> IDs) {
-  LookupRequest Req;
-  Req.IDs.insert(IDs.begin(), IDs.end());
-  std::vector<std::string> Results;
-  I.lookup(Req, [&](const Symbol &Sym) {
-    Results.push_back(getQualifiedName(Sym));
-  });
-  return Results;
-}
-
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/TestIndex.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/TestIndex.h?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/TestIndex.h (original)
+++ clang-tools-extra/trunk/unittests/clangd/TestIndex.h (removed)
@@ -1,57 +0,0 @@
-//===-- IndexHelpers.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
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_TOOLS_EXTRA_UNITTESTS_CLANGD_INDEXTESTCOMMON_H
-#define LLVM_CLANG_TOOLS_EXTRA_UNITTESTS_CLANGD_INDEXTESTCOMMON_H
-
-#include "index/Index.h"
-#include "index/Merge.h"
-
-namespace clang {
-namespace clangd {
-
-// Creates Symbol instance and sets SymbolID to given QualifiedName.
-Symbol symbol(llvm::StringRef QName);
-
-// Helpers to produce fake index symbols with proper SymbolID.
-// USRFormat is a regex replacement string for the unqualified part of the USR.
-Symbol sym(llvm::StringRef QName, index::SymbolKind Kind,
-           llvm::StringRef USRFormat);
-// Creats a function symbol assuming no function arg.
-Symbol func(llvm::StringRef Name);
-// Creates a class symbol.
-Symbol cls(llvm::StringRef Name);
-// Creates a variable symbol.
-Symbol var(llvm::StringRef Name);
-// Creates a namespace symbol.
-Symbol ns(llvm::StringRef Name);
-
-// Create a slab of symbols with the given qualified names as IDs and names.
-SymbolSlab generateSymbols(std::vector<std::string> QualifiedNames);
-
-// Create a slab of symbols with IDs and names [Begin, End].
-SymbolSlab generateNumSymbols(int Begin, int End);
-
-// Returns fully-qualified name out of given symbol.
-std::string getQualifiedName(const Symbol &Sym);
-
-// Performs fuzzy matching-based symbol lookup given a query and an index.
-// Incomplete is set true if more items than requested can be retrieved, false
-// otherwise.
-std::vector<std::string> match(const SymbolIndex &I,
-                               const FuzzyFindRequest &Req,
-                               bool *Incomplete = nullptr);
-
-// Returns qualified names of symbols with any of IDs in the index.
-std::vector<std::string> lookup(const SymbolIndex &I,
-                                llvm::ArrayRef<SymbolID> IDs);
-
-} // namespace clangd
-} // namespace clang
-
-#endif

Removed: clang-tools-extra/trunk/unittests/clangd/TestScheme.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/TestScheme.h?rev=359423&view=auto
==============================================================================
    (empty)

Removed: clang-tools-extra/trunk/unittests/clangd/TestTU.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/TestTU.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/TestTU.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/TestTU.cpp (removed)
@@ -1,153 +0,0 @@
-//===--- TestTU.cpp - Scratch source files for testing --------------------===//
-//
-// 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 "TestTU.h"
-#include "TestFS.h"
-#include "index/FileIndex.h"
-#include "index/MemIndex.h"
-#include "clang/AST/RecursiveASTVisitor.h"
-#include "clang/Frontend/CompilerInvocation.h"
-#include "clang/Frontend/Utils.h"
-
-namespace clang {
-namespace clangd {
-
-ParsedAST TestTU::build() const {
-  std::string FullFilename = testPath(Filename),
-              FullHeaderName = testPath(HeaderFilename),
-              ImportThunk = testPath("import_thunk.h");
-  std::vector<const char *> Cmd = {"clang", FullFilename.c_str()};
-  // We want to implicitly include HeaderFilename without messing up offsets.
-  // -include achieves this, but sometimes we want #import (to simulate a header
-  // guard without messing up offsets). In this case, use an intermediate file.
-  std::string ThunkContents = "#import \"" + FullHeaderName + "\"\n";
-  // FIXME: this shouldn't need to be conditional, but it breaks a
-  // GoToDefinition test for some reason (getMacroArgExpandedLocation fails).
-  if (!HeaderCode.empty()) {
-    Cmd.push_back("-include");
-    Cmd.push_back(ImplicitHeaderGuard ? ImportThunk.c_str()
-                                      : FullHeaderName.c_str());
-  }
-  Cmd.insert(Cmd.end(), ExtraArgs.begin(), ExtraArgs.end());
-  ParseInputs Inputs;
-  Inputs.CompileCommand.Filename = FullFilename;
-  Inputs.CompileCommand.CommandLine = {Cmd.begin(), Cmd.end()};
-  Inputs.CompileCommand.Directory = testRoot();
-  Inputs.Contents = Code;
-  Inputs.FS = buildTestFS({{FullFilename, Code},
-                           {FullHeaderName, HeaderCode},
-                           {ImportThunk, ThunkContents}});
-  Inputs.Opts = ParseOptions();
-  Inputs.Opts.ClangTidyOpts.Checks = ClangTidyChecks;
-  Inputs.Index = ExternalIndex;
-  if (Inputs.Index)
-    Inputs.Opts.SuggestMissingIncludes = true;
-  auto CI = buildCompilerInvocation(Inputs);
-  assert(CI && "Failed to build compilation invocation.");
-  auto Preamble =
-      buildPreamble(FullFilename, *CI,
-                    /*OldPreamble=*/nullptr,
-                    /*OldCompileCommand=*/Inputs.CompileCommand, Inputs,
-                    /*StoreInMemory=*/true, /*PreambleCallback=*/nullptr);
-  auto AST = buildAST(FullFilename, createInvocationFromCommandLine(Cmd),
-                      Inputs, Preamble);
-  if (!AST.hasValue()) {
-    ADD_FAILURE() << "Failed to build code:\n" << Code;
-    llvm_unreachable("Failed to build TestTU!");
-  }
-  return std::move(*AST);
-}
-
-SymbolSlab TestTU::headerSymbols() const {
-  auto AST = build();
-  return indexHeaderSymbols(AST.getASTContext(), AST.getPreprocessorPtr(),
-                            AST.getCanonicalIncludes());
-}
-
-std::unique_ptr<SymbolIndex> TestTU::index() const {
-  auto AST = build();
-  auto Idx = llvm::make_unique<FileIndex>(/*UseDex=*/true);
-  Idx->updatePreamble(Filename, AST.getASTContext(), AST.getPreprocessorPtr(),
-                      AST.getCanonicalIncludes());
-  Idx->updateMain(Filename, AST);
-  return std::move(Idx);
-}
-
-const Symbol &findSymbol(const SymbolSlab &Slab, llvm::StringRef QName) {
-  const Symbol *Result = nullptr;
-  for (const Symbol &S : Slab) {
-    if (QName != (S.Scope + S.Name).str())
-      continue;
-    if (Result) {
-      ADD_FAILURE() << "Multiple symbols named " << QName << ":\n"
-                    << *Result << "\n---\n"
-                    << S;
-      assert(false && "QName is not unique");
-    }
-    Result = &S;
-  }
-  if (!Result) {
-    ADD_FAILURE() << "No symbol named " << QName << " in "
-                  << ::testing::PrintToString(Slab);
-    assert(false && "No symbol with QName");
-  }
-  return *Result;
-}
-
-const NamedDecl &findDecl(ParsedAST &AST, llvm::StringRef QName) {
-  llvm::SmallVector<llvm::StringRef, 4> Components;
-  QName.split(Components, "::");
-
-  auto &Ctx = AST.getASTContext();
-  auto LookupDecl = [&Ctx](const DeclContext &Scope,
-                           llvm::StringRef Name) -> const NamedDecl & {
-    auto LookupRes = Scope.lookup(DeclarationName(&Ctx.Idents.get(Name)));
-    assert(!LookupRes.empty() && "Lookup failed");
-    assert(LookupRes.size() == 1 && "Lookup returned multiple results");
-    return *LookupRes.front();
-  };
-
-  const DeclContext *Scope = Ctx.getTranslationUnitDecl();
-  for (auto NameIt = Components.begin(), End = Components.end() - 1;
-       NameIt != End; ++NameIt) {
-    Scope = &cast<DeclContext>(LookupDecl(*Scope, *NameIt));
-  }
-  return LookupDecl(*Scope, Components.back());
-}
-
-const NamedDecl &findDecl(ParsedAST &AST,
-                          std::function<bool(const NamedDecl &)> Filter) {
-  struct Visitor : RecursiveASTVisitor<Visitor> {
-    decltype(Filter) F;
-    llvm::SmallVector<const NamedDecl *, 1> Decls;
-    bool VisitNamedDecl(const NamedDecl *ND) {
-      if (F(*ND))
-        Decls.push_back(ND);
-      return true;
-    }
-  } Visitor;
-  Visitor.F = Filter;
-  Visitor.TraverseDecl(AST.getASTContext().getTranslationUnitDecl());
-  if (Visitor.Decls.size() != 1) {
-    ADD_FAILURE() << Visitor.Decls.size() << " symbols matched.";
-    assert(Visitor.Decls.size() == 1);
-  }
-  return *Visitor.Decls.front();
-}
-
-const NamedDecl &findUnqualifiedDecl(ParsedAST &AST, llvm::StringRef Name) {
-  return findDecl(AST, [Name](const NamedDecl &ND) {
-    if (auto *ID = ND.getIdentifier())
-      if (ID->getName() == Name)
-        return true;
-    return false;
-  });
-}
-
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/TestTU.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/TestTU.h?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/TestTU.h (original)
+++ clang-tools-extra/trunk/unittests/clangd/TestTU.h (removed)
@@ -1,76 +0,0 @@
-//===--- TestTU.h - Scratch source files for testing -------------*- 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
-//
-//===----------------------------------------------------------------------===//
-//
-// Many tests for indexing, code completion etc are most naturally expressed
-// using code examples.
-// TestTU lets test define these examples in a common way without dealing with
-// the mechanics of VFS and compiler interactions, and then easily grab the
-// AST, particular symbols, etc.
-//
-//===---------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_TOOLS_EXTRA_UNITTESTS_CLANGD_TESTTU_H
-#define LLVM_CLANG_TOOLS_EXTRA_UNITTESTS_CLANGD_TESTTU_H
-
-#include "ClangdUnit.h"
-#include "index/Index.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-
-struct TestTU {
-  static TestTU withCode(llvm::StringRef Code) {
-    TestTU TU;
-    TU.Code = Code;
-    return TU;
-  }
-
-  static TestTU withHeaderCode(llvm::StringRef HeaderCode) {
-    TestTU TU;
-    TU.HeaderCode = HeaderCode;
-    return TU;
-  }
-
-  // The code to be compiled.
-  std::string Code;
-  std::string Filename = "TestTU.cpp";
-
-  // Define contents of a header which will be implicitly included by Code.
-  std::string HeaderCode;
-  std::string HeaderFilename = "TestTU.h";
-
-  // Extra arguments for the compiler invocation.
-  std::vector<const char *> ExtraArgs;
-
-  llvm::Optional<std::string> ClangTidyChecks;
-  // Index to use when building AST.
-  const SymbolIndex *ExternalIndex = nullptr;
-
-  // Simulate a header guard of the header (using an #import directive).
-  bool ImplicitHeaderGuard = true;
-
-  ParsedAST build() const;
-  SymbolSlab headerSymbols() const;
-  std::unique_ptr<SymbolIndex> index() const;
-};
-
-// Look up an index symbol by qualified name, which must be unique.
-const Symbol &findSymbol(const SymbolSlab &, llvm::StringRef QName);
-// Look up an AST symbol by qualified name, which must be unique and top-level.
-const NamedDecl &findDecl(ParsedAST &AST, llvm::StringRef QName);
-// Look up an AST symbol that satisfies \p Filter.
-const NamedDecl &findDecl(ParsedAST &AST,
-                          std::function<bool(const NamedDecl &)> Filter);
-// Look up an AST symbol by unqualified name, which must be unique.
-const NamedDecl &findUnqualifiedDecl(ParsedAST &AST, llvm::StringRef Name);
-
-} // namespace clangd
-} // namespace clang
-
-#endif // LLVM_CLANG_TOOLS_EXTRA_UNITTESTS_CLANGD_TESTTU_H

Removed: clang-tools-extra/trunk/unittests/clangd/ThreadingTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/ThreadingTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/ThreadingTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/ThreadingTests.cpp (removed)
@@ -1,64 +0,0 @@
-//===-- ThreadingTests.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 "Threading.h"
-#include "gtest/gtest.h"
-#include <mutex>
-
-namespace clang {
-namespace clangd {
-class ThreadingTest : public ::testing::Test {};
-
-TEST_F(ThreadingTest, TaskRunner) {
-  const int TasksCnt = 100;
-  // This should be const, but MSVC does not allow to use const vars in lambdas
-  // without capture. On the other hand, clang gives a warning that capture of
-  // const var is not required.
-  // Making it non-const makes both compilers happy.
-  int IncrementsPerTask = 1000;
-
-  std::mutex Mutex;
-  int Counter(0); /* GUARDED_BY(Mutex) */
-  {
-    AsyncTaskRunner Tasks;
-    auto scheduleIncrements = [&]() {
-      for (int TaskI = 0; TaskI < TasksCnt; ++TaskI) {
-        Tasks.runAsync("task", [&Counter, &Mutex, IncrementsPerTask]() {
-          for (int Increment = 0; Increment < IncrementsPerTask; ++Increment) {
-            std::lock_guard<std::mutex> Lock(Mutex);
-            ++Counter;
-          }
-        });
-      }
-    };
-
-    {
-      // Make sure runAsync is not running tasks synchronously on the same
-      // thread by locking the Mutex used for increments.
-      std::lock_guard<std::mutex> Lock(Mutex);
-      scheduleIncrements();
-    }
-
-    Tasks.wait();
-    {
-      std::lock_guard<std::mutex> Lock(Mutex);
-      ASSERT_EQ(Counter, TasksCnt * IncrementsPerTask);
-    }
-
-    {
-      std::lock_guard<std::mutex> Lock(Mutex);
-      Counter = 0;
-      scheduleIncrements();
-    }
-  }
-  // Check that destructor has waited for tasks to finish.
-  std::lock_guard<std::mutex> Lock(Mutex);
-  ASSERT_EQ(Counter, TasksCnt * IncrementsPerTask);
-}
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/TraceTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/TraceTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/TraceTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/TraceTests.cpp (removed)
@@ -1,127 +0,0 @@
-//===-- TraceTests.cpp - Tracing unit 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 "Trace.h"
-
-#include "llvm/ADT/DenseMap.h"
-#include "llvm/ADT/SmallString.h"
-#include "llvm/Support/SourceMgr.h"
-#include "llvm/Support/Threading.h"
-#include "llvm/Support/YAMLParser.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-
-MATCHER_P(StringNode, Val, "") {
-  if (arg->getType() != llvm::yaml::Node::NK_Scalar) {
-    *result_listener << "is a " << arg->getVerbatimTag();
-    return false;
-  }
-  llvm::SmallString<32> S;
-  return Val == static_cast<llvm::yaml::ScalarNode *>(arg)->getValue(S);
-}
-
-// Checks that N is a Mapping (JS object) with the expected scalar properties.
-// The object must have all the Expected properties, but may have others.
-bool VerifyObject(llvm::yaml::Node &N,
-                  std::map<std::string, std::string> Expected) {
-  auto *M = llvm::dyn_cast<llvm::yaml::MappingNode>(&N);
-  if (!M) {
-    ADD_FAILURE() << "Not an object";
-    return false;
-  }
-  bool Match = true;
-  llvm::SmallString<32> Tmp;
-  for (auto &Prop : *M) {
-    auto *K = llvm::dyn_cast_or_null<llvm::yaml::ScalarNode>(Prop.getKey());
-    if (!K)
-      continue;
-    std::string KS = K->getValue(Tmp).str();
-    auto I = Expected.find(KS);
-    if (I == Expected.end())
-      continue; // Ignore properties with no assertion.
-
-    auto *V = llvm::dyn_cast_or_null<llvm::yaml::ScalarNode>(Prop.getValue());
-    if (!V) {
-      ADD_FAILURE() << KS << " is not a string";
-      Match = false;
-    }
-    std::string VS = V->getValue(Tmp).str();
-    if (VS != I->second) {
-      ADD_FAILURE() << KS << " expected " << I->second << " but actual " << VS;
-      Match = false;
-    }
-    Expected.erase(I);
-  }
-  for (const auto &P : Expected) {
-    ADD_FAILURE() << P.first << " missing, expected " << P.second;
-    Match = false;
-  }
-  return Match;
-}
-
-TEST(TraceTest, SmokeTest) {
-  // Capture some events.
-  std::string JSON;
-  {
-    llvm::raw_string_ostream OS(JSON);
-    auto JSONTracer = trace::createJSONTracer(OS);
-    trace::Session Session(*JSONTracer);
-    {
-      trace::Span Tracer("A");
-      trace::log("B");
-    }
-  }
-
-  // Get the root JSON object using the YAML parser.
-  llvm::SourceMgr SM;
-  llvm::yaml::Stream Stream(JSON, SM);
-  auto Doc = Stream.begin();
-  ASSERT_NE(Doc, Stream.end());
-  auto *Root = llvm::dyn_cast_or_null<llvm::yaml::MappingNode>(Doc->getRoot());
-  ASSERT_NE(Root, nullptr) << "Root should be an object";
-
-  // Check whether we expect thread name events on this platform.
-  llvm::SmallString<32> ThreadName;
-  get_thread_name(ThreadName);
-  bool ThreadsHaveNames = !ThreadName.empty();
-
-  // We expect in order:
-  //   displayTimeUnit: "ns"
-  //   traceEvents: [process name, thread name, start span, log, end span]
-  // (The order doesn't matter, but the YAML parser is awkward to use otherwise)
-  auto Prop = Root->begin();
-  ASSERT_NE(Prop, Root->end()) << "Expected displayTimeUnit property";
-  ASSERT_THAT(Prop->getKey(), StringNode("displayTimeUnit"));
-  EXPECT_THAT(Prop->getValue(), StringNode("ns"));
-  ASSERT_NE(++Prop, Root->end()) << "Expected traceEvents property";
-  EXPECT_THAT(Prop->getKey(), StringNode("traceEvents"));
-  auto *Events =
-      llvm::dyn_cast_or_null<llvm::yaml::SequenceNode>(Prop->getValue());
-  ASSERT_NE(Events, nullptr) << "traceEvents should be an array";
-  auto Event = Events->begin();
-  ASSERT_NE(Event, Events->end()) << "Expected process name";
-  EXPECT_TRUE(VerifyObject(*Event, {{"ph", "M"}, {"name", "process_name"}}));
-  if (ThreadsHaveNames) {
-    ASSERT_NE(++Event, Events->end()) << "Expected thread name";
-    EXPECT_TRUE(VerifyObject(*Event, {{"ph", "M"}, {"name", "thread_name"}}));
-  }
-  ASSERT_NE(++Event, Events->end()) << "Expected log message";
-  EXPECT_TRUE(VerifyObject(*Event, {{"ph", "i"}, {"name", "Log"}}));
-  ASSERT_NE(++Event, Events->end()) << "Expected span end";
-  EXPECT_TRUE(VerifyObject(*Event, {{"ph", "X"}, {"name", "A"}}));
-  ASSERT_EQ(++Event, Events->end());
-  ASSERT_EQ(++Prop, Root->end());
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/TweakTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/TweakTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/TweakTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/TweakTests.cpp (removed)
@@ -1,190 +0,0 @@
-//===-- TweakTests.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 "Annotations.h"
-#include "SourceCode.h"
-#include "TestTU.h"
-#include "refactor/Tweak.h"
-#include "clang/AST/Expr.h"
-#include "clang/Rewrite/Core/Rewriter.h"
-#include "clang/Tooling/Core/Replacement.h"
-#include "llvm/ADT/StringRef.h"
-#include "llvm/Support/Error.h"
-#include "llvm/Testing/Support/Error.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-#include <cassert>
-
-using llvm::Failed;
-using llvm::HasValue;
-using llvm::Succeeded;
-
-namespace clang {
-namespace clangd {
-namespace {
-
-std::string markRange(llvm::StringRef Code, Range R) {
-  size_t Begin = llvm::cantFail(positionToOffset(Code, R.start));
-  size_t End = llvm::cantFail(positionToOffset(Code, R.end));
-  assert(Begin <= End);
-  if (Begin == End) // Mark a single point.
-    return (Code.substr(0, Begin) + "^" + Code.substr(Begin)).str();
-  // Mark a range.
-  return (Code.substr(0, Begin) + "[[" + Code.substr(Begin, End - Begin) +
-          "]]" + Code.substr(End))
-      .str();
-}
-
-void checkAvailable(StringRef ID, llvm::StringRef Input, bool Available) {
-  Annotations Code(Input);
-  ASSERT_TRUE(0 < Code.points().size() || 0 < Code.ranges().size())
-      << "no points of interest specified";
-  TestTU TU;
-  TU.Filename = "foo.cpp";
-  TU.Code = Code.code();
-
-  ParsedAST AST = TU.build();
-
-  auto CheckOver = [&](Range Selection) {
-    unsigned Begin = cantFail(positionToOffset(Code.code(), Selection.start));
-    unsigned End = cantFail(positionToOffset(Code.code(), Selection.end));
-    auto T = prepareTweak(ID, Tweak::Selection(AST, Begin, End));
-    if (Available)
-      EXPECT_THAT_EXPECTED(T, Succeeded())
-          << "code is " << markRange(Code.code(), Selection);
-    else
-      EXPECT_THAT_EXPECTED(T, Failed())
-          << "code is " << markRange(Code.code(), Selection);
-  };
-  for (auto P : Code.points())
-    CheckOver(Range{P, P});
-  for (auto R : Code.ranges())
-    CheckOver(R);
-}
-
-/// Checks action is available at every point and range marked in \p Input.
-void checkAvailable(StringRef ID, llvm::StringRef Input) {
-  return checkAvailable(ID, Input, /*Available=*/true);
-}
-
-/// Same as checkAvailable, but checks the action is not available.
-void checkNotAvailable(StringRef ID, llvm::StringRef Input) {
-  return checkAvailable(ID, Input, /*Available=*/false);
-}
-llvm::Expected<std::string> apply(StringRef ID, llvm::StringRef Input) {
-  Annotations Code(Input);
-  Range SelectionRng;
-  if (Code.points().size() != 0) {
-    assert(Code.ranges().size() == 0 &&
-           "both a cursor point and a selection range were specified");
-    SelectionRng = Range{Code.point(), Code.point()};
-  } else {
-    SelectionRng = Code.range();
-  }
-  TestTU TU;
-  TU.Filename = "foo.cpp";
-  TU.Code = Code.code();
-
-  ParsedAST AST = TU.build();
-  unsigned Begin = cantFail(positionToOffset(Code.code(), SelectionRng.start));
-  unsigned End = cantFail(positionToOffset(Code.code(), SelectionRng.end));
-  Tweak::Selection S(AST, Begin, End);
-
-  auto T = prepareTweak(ID, S);
-  if (!T)
-    return T.takeError();
-  auto Replacements = (*T)->apply(S);
-  if (!Replacements)
-    return Replacements.takeError();
-  return applyAllReplacements(Code.code(), *Replacements);
-}
-
-void checkTransform(llvm::StringRef ID, llvm::StringRef Input,
-                    llvm::StringRef Output) {
-  EXPECT_THAT_EXPECTED(apply(ID, Input), HasValue(Output))
-      << "action id is" << ID;
-}
-
-TEST(TweakTest, SwapIfBranches) {
-  llvm::StringLiteral ID = "SwapIfBranches";
-
-  checkAvailable(ID, R"cpp(
-    void test() {
-      ^i^f^^(^t^r^u^e^) { return 100; } ^e^l^s^e^ { continue; }
-    }
-  )cpp");
-
-  checkNotAvailable(ID, R"cpp(
-    void test() {
-      if (true) {^return ^100;^ } else { ^continue^;^ }
-    }
-  )cpp");
-
-  llvm::StringLiteral Input = R"cpp(
-    void test() {
-      ^if (true) { return 100; } else { continue; }
-    }
-  )cpp";
-  llvm::StringLiteral Output = R"cpp(
-    void test() {
-      if (true) { continue; } else { return 100; }
-    }
-  )cpp";
-  checkTransform(ID, Input, Output);
-
-  Input = R"cpp(
-    void test() {
-      ^if () { return 100; } else { continue; }
-    }
-  )cpp";
-  Output = R"cpp(
-    void test() {
-      if () { continue; } else { return 100; }
-    }
-  )cpp";
-  checkTransform(ID, Input, Output);
-
-  // Available in subexpressions of the condition.
-  checkAvailable(ID, R"cpp(
-    void test() {
-      if(2 + [[2]] + 2) { return 2 + 2 + 2; } else { continue; }
-    }
-  )cpp");
-  // But not as part of the branches.
-  checkNotAvailable(ID, R"cpp(
-    void test() {
-      if(2 + 2 + 2) { return 2 + [[2]] + 2; } else { continue; }
-    }
-  )cpp");
-  // Range covers the "else" token, so available.
-  checkAvailable(ID, R"cpp(
-    void test() {
-      if(2 + 2 + 2) { return 2 + [[2 + 2; } else { continue;]] }
-    }
-  )cpp");
-  // Not available in compound statements in condition.
-  checkNotAvailable(ID, R"cpp(
-    void test() {
-      if([]{return [[true]];}()) { return 2 + 2 + 2; } else { continue; }
-    }
-  )cpp");
-  // Not available if both sides aren't braced.
-  checkNotAvailable(ID, R"cpp(
-    void test() {
-      ^if (1) return; else { return; }
-    }
-  )cpp");
-  // Only one if statement is supported!
-  checkNotAvailable(ID, R"cpp(
-    [[if(1){}else{}if(2){}else{}]]
-  )cpp");
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/TypeHierarchyTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/TypeHierarchyTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/TypeHierarchyTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/TypeHierarchyTests.cpp (removed)
@@ -1,455 +0,0 @@
-//===-- TypeHierarchyTests.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 "Annotations.h"
-#include "ClangdUnit.h"
-#include "Compiler.h"
-#include "Matchers.h"
-#include "SyncAPI.h"
-#include "TestFS.h"
-#include "TestTU.h"
-#include "XRefs.h"
-#include "index/FileIndex.h"
-#include "index/SymbolCollector.h"
-#include "clang/AST/DeclCXX.h"
-#include "clang/AST/DeclTemplate.h"
-#include "clang/Index/IndexingAction.h"
-#include "llvm/Support/Path.h"
-#include "llvm/Support/ScopedPrinter.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-
-using testing::AllOf;
-using testing::ElementsAre;
-using testing::Eq;
-using testing::Field;
-using testing::IsEmpty;
-using testing::Matcher;
-using testing::Pointee;
-using testing::UnorderedElementsAreArray;
-
-// GMock helpers for matching TypeHierarchyItem.
-MATCHER_P(WithName, N, "") { return arg.name == N; }
-MATCHER_P(WithKind, Kind, "") { return arg.kind == Kind; }
-MATCHER_P(SelectionRangeIs, R, "") { return arg.selectionRange == R; }
-template <class... ParentMatchers>
-testing::Matcher<TypeHierarchyItem> Parents(ParentMatchers... ParentsM) {
-  return Field(&TypeHierarchyItem::parents, HasValue(ElementsAre(ParentsM...)));
-}
-
-TEST(FindRecordTypeAt, TypeOrVariable) {
-  Annotations Source(R"cpp(
-struct Ch^ild2 {
-  int c;
-};
-
-int main() {
-  Ch^ild2 ch^ild2;
-  ch^ild2.c = 1;
-}
-)cpp");
-
-  TestTU TU = TestTU::withCode(Source.code());
-  auto AST = TU.build();
-
-  ASSERT_TRUE(AST.getDiagnostics().empty());
-
-  for (Position Pt : Source.points()) {
-    const CXXRecordDecl *RD = findRecordTypeAt(AST, Pt);
-    EXPECT_EQ(&findDecl(AST, "Child2"), static_cast<const NamedDecl *>(RD));
-  }
-}
-
-TEST(FindRecordTypeAt, Method) {
-  Annotations Source(R"cpp(
-struct Child2 {
-  void met^hod ();
-  void met^hod (int x);
-};
-
-int main() {
-  Child2 child2;
-  child2.met^hod(5);
-}
-)cpp");
-
-  TestTU TU = TestTU::withCode(Source.code());
-  auto AST = TU.build();
-
-  ASSERT_TRUE(AST.getDiagnostics().empty());
-
-  for (Position Pt : Source.points()) {
-    const CXXRecordDecl *RD = findRecordTypeAt(AST, Pt);
-    EXPECT_EQ(&findDecl(AST, "Child2"), static_cast<const NamedDecl *>(RD));
-  }
-}
-
-TEST(FindRecordTypeAt, Field) {
-  Annotations Source(R"cpp(
-struct Child2 {
-  int fi^eld;
-};
-
-int main() {
-  Child2 child2;
-  child2.fi^eld = 5;
-}
-)cpp");
-
-  TestTU TU = TestTU::withCode(Source.code());
-  auto AST = TU.build();
-
-  ASSERT_TRUE(AST.getDiagnostics().empty());
-
-  for (Position Pt : Source.points()) {
-    const CXXRecordDecl *RD = findRecordTypeAt(AST, Pt);
-    // A field does not unambiguously specify a record type
-    // (possible associated reocrd types could be the field's type,
-    // or the type of the record that the field is a member of).
-    EXPECT_EQ(nullptr, RD);
-  }
-}
-
-TEST(TypeParents, SimpleInheritance) {
-  Annotations Source(R"cpp(
-struct Parent {
-  int a;
-};
-
-struct Child1 : Parent {
-  int b;
-};
-
-struct Child2 : Child1 {
-  int c;
-};
-)cpp");
-
-  TestTU TU = TestTU::withCode(Source.code());
-  auto AST = TU.build();
-
-  ASSERT_TRUE(AST.getDiagnostics().empty());
-
-  const CXXRecordDecl *Parent =
-      dyn_cast<CXXRecordDecl>(&findDecl(AST, "Parent"));
-  const CXXRecordDecl *Child1 =
-      dyn_cast<CXXRecordDecl>(&findDecl(AST, "Child1"));
-  const CXXRecordDecl *Child2 =
-      dyn_cast<CXXRecordDecl>(&findDecl(AST, "Child2"));
-
-  EXPECT_THAT(typeParents(Parent), ElementsAre());
-  EXPECT_THAT(typeParents(Child1), ElementsAre(Parent));
-  EXPECT_THAT(typeParents(Child2), ElementsAre(Child1));
-}
-
-TEST(TypeParents, MultipleInheritance) {
-  Annotations Source(R"cpp(
-struct Parent1 {
-  int a;
-};
-
-struct Parent2 {
-  int b;
-};
-
-struct Parent3 : Parent2 {
-  int c;
-};
-
-struct Child : Parent1, Parent3 {
-  int d;
-};
-)cpp");
-
-  TestTU TU = TestTU::withCode(Source.code());
-  auto AST = TU.build();
-
-  ASSERT_TRUE(AST.getDiagnostics().empty());
-
-  const CXXRecordDecl *Parent1 =
-      dyn_cast<CXXRecordDecl>(&findDecl(AST, "Parent1"));
-  const CXXRecordDecl *Parent2 =
-      dyn_cast<CXXRecordDecl>(&findDecl(AST, "Parent2"));
-  const CXXRecordDecl *Parent3 =
-      dyn_cast<CXXRecordDecl>(&findDecl(AST, "Parent3"));
-  const CXXRecordDecl *Child = dyn_cast<CXXRecordDecl>(&findDecl(AST, "Child"));
-
-  EXPECT_THAT(typeParents(Parent1), ElementsAre());
-  EXPECT_THAT(typeParents(Parent2), ElementsAre());
-  EXPECT_THAT(typeParents(Parent3), ElementsAre(Parent2));
-  EXPECT_THAT(typeParents(Child), ElementsAre(Parent1, Parent3));
-}
-
-TEST(TypeParents, ClassTemplate) {
-  Annotations Source(R"cpp(
-struct Parent {};
-
-template <typename T>
-struct Child : Parent {};
-)cpp");
-
-  TestTU TU = TestTU::withCode(Source.code());
-  auto AST = TU.build();
-
-  ASSERT_TRUE(AST.getDiagnostics().empty());
-
-  const CXXRecordDecl *Parent =
-      dyn_cast<CXXRecordDecl>(&findDecl(AST, "Parent"));
-  const CXXRecordDecl *Child =
-      dyn_cast<ClassTemplateDecl>(&findDecl(AST, "Child"))->getTemplatedDecl();
-
-  EXPECT_THAT(typeParents(Child), ElementsAre(Parent));
-}
-
-MATCHER_P(ImplicitSpecOf, ClassTemplate, "") {
-  const ClassTemplateSpecializationDecl *CTS =
-      dyn_cast<ClassTemplateSpecializationDecl>(arg);
-  return CTS &&
-         CTS->getSpecializedTemplate()->getTemplatedDecl() == ClassTemplate &&
-         CTS->getSpecializationKind() == TSK_ImplicitInstantiation;
-}
-
-// This is similar to findDecl(AST, QName), but supports using
-// a template-id as a query.
-const NamedDecl &findDeclWithTemplateArgs(ParsedAST &AST,
-                                          llvm::StringRef Query) {
-  return findDecl(AST, [&Query](const NamedDecl &ND) {
-    std::string QName;
-    llvm::raw_string_ostream OS(QName);
-    PrintingPolicy Policy(ND.getASTContext().getLangOpts());
-    // Use getNameForDiagnostic() which includes the template
-    // arguments in the printed name.
-    ND.getNameForDiagnostic(OS, Policy, /*Qualified=*/true);
-    OS.flush();
-    return QName == Query;
-  });
-}
-
-TEST(TypeParents, TemplateSpec1) {
-  Annotations Source(R"cpp(
-template <typename T>
-struct Parent {};
-
-template <>
-struct Parent<int> {};
-
-struct Child1 : Parent<float> {};
-
-struct Child2 : Parent<int> {};
-)cpp");
-
-  TestTU TU = TestTU::withCode(Source.code());
-  auto AST = TU.build();
-
-  ASSERT_TRUE(AST.getDiagnostics().empty());
-
-  const CXXRecordDecl *Parent =
-      dyn_cast<ClassTemplateDecl>(&findDecl(AST, "Parent"))->getTemplatedDecl();
-  const CXXRecordDecl *ParentSpec =
-      dyn_cast<CXXRecordDecl>(&findDeclWithTemplateArgs(AST, "Parent<int>"));
-  const CXXRecordDecl *Child1 =
-      dyn_cast<CXXRecordDecl>(&findDecl(AST, "Child1"));
-  const CXXRecordDecl *Child2 =
-      dyn_cast<CXXRecordDecl>(&findDecl(AST, "Child2"));
-
-  EXPECT_THAT(typeParents(Child1), ElementsAre(ImplicitSpecOf(Parent)));
-  EXPECT_THAT(typeParents(Child2), ElementsAre(ParentSpec));
-}
-
-TEST(TypeParents, TemplateSpec2) {
-  Annotations Source(R"cpp(
-struct Parent {};
-
-template <typename T>
-struct Child {};
-
-template <>
-struct Child<int> : Parent {};
-)cpp");
-
-  TestTU TU = TestTU::withCode(Source.code());
-  auto AST = TU.build();
-
-  ASSERT_TRUE(AST.getDiagnostics().empty());
-
-  const CXXRecordDecl *Parent =
-      dyn_cast<CXXRecordDecl>(&findDecl(AST, "Parent"));
-  const CXXRecordDecl *Child =
-      dyn_cast<ClassTemplateDecl>(&findDecl(AST, "Child"))->getTemplatedDecl();
-  const CXXRecordDecl *ChildSpec =
-      dyn_cast<CXXRecordDecl>(&findDeclWithTemplateArgs(AST, "Child<int>"));
-
-  EXPECT_THAT(typeParents(Child), ElementsAre());
-  EXPECT_THAT(typeParents(ChildSpec), ElementsAre(Parent));
-}
-
-TEST(TypeParents, DependentBase) {
-  Annotations Source(R"cpp(
-template <typename T>
-struct Parent {};
-
-template <typename T>
-struct Child1 : Parent<T> {};
-
-template <typename T>
-struct Child2 : Parent<T>::Type {};
-
-template <typename T>
-struct Child3 : T {};
-)cpp");
-
-  TestTU TU = TestTU::withCode(Source.code());
-  auto AST = TU.build();
-
-  ASSERT_TRUE(AST.getDiagnostics().empty());
-
-  const CXXRecordDecl *Parent =
-      dyn_cast<ClassTemplateDecl>(&findDecl(AST, "Parent"))->getTemplatedDecl();
-  const CXXRecordDecl *Child1 =
-      dyn_cast<ClassTemplateDecl>(&findDecl(AST, "Child1"))->getTemplatedDecl();
-  const CXXRecordDecl *Child2 =
-      dyn_cast<ClassTemplateDecl>(&findDecl(AST, "Child2"))->getTemplatedDecl();
-  const CXXRecordDecl *Child3 =
-      dyn_cast<ClassTemplateDecl>(&findDecl(AST, "Child3"))->getTemplatedDecl();
-
-  // For "Parent<T>", use the primary template as a best-effort guess.
-  EXPECT_THAT(typeParents(Child1), ElementsAre(Parent));
-  // For "Parent<T>::Type", there is nothing we can do.
-  EXPECT_THAT(typeParents(Child2), ElementsAre());
-  // Likewise for "T".
-  EXPECT_THAT(typeParents(Child3), ElementsAre());
-}
-
-// Parts of getTypeHierarchy() are tested in more detail by the
-// FindRecordTypeAt.* and TypeParents.* tests above. This test exercises the
-// entire operation.
-TEST(TypeHierarchy, Parents) {
-  Annotations Source(R"cpp(
-struct $Parent1Def[[Parent1]] {
-  int a;
-};
-
-struct $Parent2Def[[Parent2]] {
-  int b;
-};
-
-struct $Parent3Def[[Parent3]] : Parent2 {
-  int c;
-};
-
-struct Ch^ild : Parent1, Parent3 {
-  int d;
-};
-
-int main() {
-  Ch^ild  ch^ild;
-
-  ch^ild.a = 1;
-}
-)cpp");
-
-  TestTU TU = TestTU::withCode(Source.code());
-  auto AST = TU.build();
-
-  for (Position Pt : Source.points()) {
-    // Set ResolveLevels to 0 because it's only used for Children;
-    // for Parents, getTypeHierarchy() always returns all levels.
-    llvm::Optional<TypeHierarchyItem> Result = getTypeHierarchy(
-        AST, Pt, /*ResolveLevels=*/0, TypeHierarchyDirection::Parents);
-    ASSERT_TRUE(bool(Result));
-    EXPECT_THAT(
-        *Result,
-        AllOf(
-            WithName("Child"), WithKind(SymbolKind::Struct),
-            Parents(AllOf(WithName("Parent1"), WithKind(SymbolKind::Struct),
-                          SelectionRangeIs(Source.range("Parent1Def")),
-                          Parents()),
-                    AllOf(WithName("Parent3"), WithKind(SymbolKind::Struct),
-                          SelectionRangeIs(Source.range("Parent3Def")),
-                          Parents(AllOf(
-                              WithName("Parent2"), WithKind(SymbolKind::Struct),
-                              SelectionRangeIs(Source.range("Parent2Def")),
-                              Parents()))))));
-  }
-}
-
-TEST(TypeHierarchy, RecursiveHierarchyUnbounded) {
-  Annotations Source(R"cpp(
-  template <int N>
-  struct $SDef[[S]] : S<N + 1> {};
-
-  S^<0> s;
-  )cpp");
-
-  TestTU TU = TestTU::withCode(Source.code());
-  auto AST = TU.build();
-
-  // The compiler should produce a diagnostic for hitting the
-  // template instantiation depth.
-  ASSERT_TRUE(!AST.getDiagnostics().empty());
-
-  // Make sure getTypeHierarchy() doesn't get into an infinite recursion.
-  // FIXME(nridge): It would be preferable if the type hierarchy gave us type
-  // names (e.g. "S<0>" for the child and "S<1>" for the parent) rather than
-  // template names (e.g. "S").
-  llvm::Optional<TypeHierarchyItem> Result = getTypeHierarchy(
-      AST, Source.points()[0], 0, TypeHierarchyDirection::Parents);
-  ASSERT_TRUE(bool(Result));
-  EXPECT_THAT(
-      *Result,
-      AllOf(WithName("S"), WithKind(SymbolKind::Struct),
-            Parents(AllOf(WithName("S"), WithKind(SymbolKind::Struct),
-                          SelectionRangeIs(Source.range("SDef")), Parents()))));
-}
-
-TEST(TypeHierarchy, RecursiveHierarchyBounded) {
-  Annotations Source(R"cpp(
-  template <int N>
-  struct $SDef[[S]] : S<N - 1> {};
-
-  template <>
-  struct S<0>{};
-
-  S$SRefConcrete^<2> s;
-
-  template <int N>
-  struct Foo {
-    S$SRefDependent^<N> s;
-  };)cpp");
-
-  TestTU TU = TestTU::withCode(Source.code());
-  auto AST = TU.build();
-
-  ASSERT_TRUE(AST.getDiagnostics().empty());
-
-  // Make sure getTypeHierarchy() doesn't get into an infinite recursion
-  // for either a concrete starting point or a dependent starting point.
-  llvm::Optional<TypeHierarchyItem> Result = getTypeHierarchy(
-      AST, Source.point("SRefConcrete"), 0, TypeHierarchyDirection::Parents);
-  ASSERT_TRUE(bool(Result));
-  EXPECT_THAT(
-      *Result,
-      AllOf(WithName("S"), WithKind(SymbolKind::Struct),
-            Parents(AllOf(WithName("S"), WithKind(SymbolKind::Struct),
-                          SelectionRangeIs(Source.range("SDef")), Parents()))));
-  Result = getTypeHierarchy(AST, Source.point("SRefDependent"), 0,
-                            TypeHierarchyDirection::Parents);
-  ASSERT_TRUE(bool(Result));
-  EXPECT_THAT(
-      *Result,
-      AllOf(WithName("S"), WithKind(SymbolKind::Struct),
-            Parents(AllOf(WithName("S"), WithKind(SymbolKind::Struct),
-                          SelectionRangeIs(Source.range("SDef")), Parents()))));
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/URITests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/URITests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/URITests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/URITests.cpp (removed)
@@ -1,187 +0,0 @@
-//===-- URITests.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 "Matchers.h"
-#include "TestFS.h"
-#include "URI.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-
-// Force the unittest URI scheme to be linked,
-static int LLVM_ATTRIBUTE_UNUSED UnittestSchemeAnchorDest =
-    UnittestSchemeAnchorSource;
-
-namespace {
-
-using ::testing::AllOf;
-
-MATCHER_P(Scheme, S, "") { return arg.scheme() == S; }
-MATCHER_P(Authority, A, "") { return arg.authority() == A; }
-MATCHER_P(Body, B, "") { return arg.body() == B; }
-
-std::string createOrDie(llvm::StringRef AbsolutePath,
-                        llvm::StringRef Scheme = "file") {
-  auto Uri = URI::create(AbsolutePath, Scheme);
-  if (!Uri)
-    llvm_unreachable(toString(Uri.takeError()).c_str());
-  return Uri->toString();
-}
-
-URI parseOrDie(llvm::StringRef Uri) {
-  auto U = URI::parse(Uri);
-  if (!U)
-    llvm_unreachable(toString(U.takeError()).c_str());
-  return *U;
-}
-
-TEST(PercentEncodingTest, Encode) {
-  EXPECT_EQ(URI("x", /*Authority=*/"", "a/b/c").toString(), "x:a/b/c");
-  EXPECT_EQ(URI("x", /*Authority=*/"", "a!b;c~").toString(), "x:a%21b%3Bc~");
-  EXPECT_EQ(URI("x", /*Authority=*/"", "a123b").toString(), "x:a123b");
-  EXPECT_EQ(URI("x", /*Authority=*/"", "a:b;c").toString(), "x:a:b%3Bc");
-}
-
-TEST(PercentEncodingTest, Decode) {
-  EXPECT_EQ(parseOrDie("x:a/b/c").body(), "a/b/c");
-
-  EXPECT_EQ(parseOrDie("s%2b://%3a/%3").scheme(), "s+");
-  EXPECT_EQ(parseOrDie("s%2b://%3a/%3").authority(), ":");
-  EXPECT_EQ(parseOrDie("s%2b://%3a/%3").body(), "/%3");
-
-  EXPECT_EQ(parseOrDie("x:a%21b%3ac~").body(), "a!b:c~");
-  EXPECT_EQ(parseOrDie("x:a:b%3bc").body(), "a:b;c");
-}
-
-std::string resolveOrDie(const URI &U, llvm::StringRef HintPath = "") {
-  auto Path = URI::resolve(U, HintPath);
-  if (!Path)
-    llvm_unreachable(toString(Path.takeError()).c_str());
-  return *Path;
-}
-
-TEST(URITest, Create) {
-#ifdef _WIN32
-  EXPECT_THAT(createOrDie("c:\\x\\y\\z"), "file:///c:/x/y/z");
-#else
-  EXPECT_THAT(createOrDie("/x/y/z"), "file:///x/y/z");
-  EXPECT_THAT(createOrDie("/(x)/y/\\ z"), "file:///%28x%29/y/%5C%20z");
-#endif
-}
-
-TEST(URITest, FailedCreate) {
-  EXPECT_ERROR(URI::create("/x/y/z", "no"));
-  // Path has to be absolute.
-  EXPECT_ERROR(URI::create("x/y/z", "file"));
-}
-
-TEST(URITest, Parse) {
-  EXPECT_THAT(parseOrDie("file://auth/x/y/z"),
-              AllOf(Scheme("file"), Authority("auth"), Body("/x/y/z")));
-
-  EXPECT_THAT(parseOrDie("file://au%3dth/%28x%29/y/%5c%20z"),
-              AllOf(Scheme("file"), Authority("au=th"), Body("/(x)/y/\\ z")));
-
-  EXPECT_THAT(parseOrDie("file:///%28x%29/y/%5c%20z"),
-              AllOf(Scheme("file"), Authority(""), Body("/(x)/y/\\ z")));
-  EXPECT_THAT(parseOrDie("file:///x/y/z"),
-              AllOf(Scheme("file"), Authority(""), Body("/x/y/z")));
-  EXPECT_THAT(parseOrDie("file:"),
-              AllOf(Scheme("file"), Authority(""), Body("")));
-  EXPECT_THAT(parseOrDie("file:///x/y/z%2"),
-              AllOf(Scheme("file"), Authority(""), Body("/x/y/z%2")));
-  EXPECT_THAT(parseOrDie("http://llvm.org"),
-              AllOf(Scheme("http"), Authority("llvm.org"), Body("")));
-  EXPECT_THAT(parseOrDie("http://llvm.org/"),
-              AllOf(Scheme("http"), Authority("llvm.org"), Body("/")));
-  EXPECT_THAT(parseOrDie("http://llvm.org/D"),
-              AllOf(Scheme("http"), Authority("llvm.org"), Body("/D")));
-  EXPECT_THAT(parseOrDie("http:/"),
-              AllOf(Scheme("http"), Authority(""), Body("/")));
-  EXPECT_THAT(parseOrDie("urn:isbn:0451450523"),
-              AllOf(Scheme("urn"), Authority(""), Body("isbn:0451450523")));
-  EXPECT_THAT(
-      parseOrDie("file:///c:/windows/system32/"),
-      AllOf(Scheme("file"), Authority(""), Body("/c:/windows/system32/")));
-}
-
-TEST(URITest, ParseFailed) {
-  // Expect ':' in URI.
-  EXPECT_ERROR(URI::parse("file//x/y/z"));
-  // Empty.
-  EXPECT_ERROR(URI::parse(""));
-  EXPECT_ERROR(URI::parse(":/a/b/c"));
-  EXPECT_ERROR(URI::parse("\"/a/b/c\" IWYU pragma: abc"));
-}
-
-TEST(URITest, Resolve) {
-#ifdef _WIN32
-  EXPECT_THAT(resolveOrDie(parseOrDie("file:///c%3a/x/y/z")), "c:\\x\\y\\z");
-  EXPECT_THAT(resolveOrDie(parseOrDie("file:///c:/x/y/z")), "c:\\x\\y\\z");
-#else
-  EXPECT_EQ(resolveOrDie(parseOrDie("file:/a/b/c")), "/a/b/c");
-  EXPECT_EQ(resolveOrDie(parseOrDie("file://auth/a/b/c")), "/a/b/c");
-  EXPECT_THAT(resolveOrDie(parseOrDie("file://au%3dth/%28x%29/y/%20z")),
-              "/(x)/y/ z");
-  EXPECT_THAT(resolveOrDie(parseOrDie("file:///c:/x/y/z")), "c:/x/y/z");
-#endif
-  EXPECT_EQ(resolveOrDie(parseOrDie("unittest:///a"), testPath("x")),
-            testPath("a"));
-}
-
-std::string resolvePathOrDie(llvm::StringRef AbsPath,
-                             llvm::StringRef HintPath = "") {
-  auto Path = URI::resolvePath(AbsPath, HintPath);
-  if (!Path)
-    llvm_unreachable(toString(Path.takeError()).c_str());
-  return *Path;
-}
-
-TEST(URITest, ResolvePath) {
-  StringRef FilePath =
-#ifdef _WIN32
-      "c:\\x\\y\\z";
-#else
-      "/a/b/c";
-#endif
-  EXPECT_EQ(resolvePathOrDie(FilePath), FilePath);
-  EXPECT_EQ(resolvePathOrDie(testPath("x"), testPath("hint")), testPath("x"));
-  // HintPath is not in testRoot(); resolution fails.
-  auto Resolve = URI::resolvePath(testPath("x"), FilePath);
-  EXPECT_FALSE(Resolve);
-  llvm::consumeError(Resolve.takeError());
-}
-
-TEST(URITest, Platform) {
-  auto Path = testPath("x");
-  auto U = URI::create(Path, "file");
-  EXPECT_TRUE(static_cast<bool>(U));
-  EXPECT_THAT(resolveOrDie(*U), Path);
-}
-
-TEST(URITest, ResolveFailed) {
-  auto FailedResolve = [](StringRef Uri) {
-    auto Path = URI::resolve(parseOrDie(Uri));
-    if (!Path) {
-      consumeError(Path.takeError());
-      return true;
-    }
-    return false;
-  };
-
-  // Invalid scheme.
-  EXPECT_TRUE(FailedResolve("no:/a/b/c"));
-  // File path needs to be absolute.
-  EXPECT_TRUE(FailedResolve("file:a/b/c"));
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/XRefsTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/XRefsTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/XRefsTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/XRefsTests.cpp (removed)
@@ -1,1504 +0,0 @@
-//===-- XRefsTests.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 "Annotations.h"
-#include "ClangdUnit.h"
-#include "Compiler.h"
-#include "Matchers.h"
-#include "SyncAPI.h"
-#include "TestFS.h"
-#include "TestTU.h"
-#include "XRefs.h"
-#include "index/FileIndex.h"
-#include "index/SymbolCollector.h"
-#include "clang/Index/IndexingAction.h"
-#include "llvm/Support/Path.h"
-#include "llvm/Support/ScopedPrinter.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-namespace clang {
-namespace clangd {
-namespace {
-
-using testing::ElementsAre;
-using testing::IsEmpty;
-using testing::Matcher;
-using testing::UnorderedElementsAreArray;
-
-class IgnoreDiagnostics : public DiagnosticsConsumer {
-  void onDiagnosticsReady(PathRef File,
-                          std::vector<Diag> Diagnostics) override {}
-};
-
-MATCHER_P2(FileRange, File, Range, "") {
-  return Location{URIForFile::canonicalize(File, testRoot()), Range} == arg;
-}
-
-// Extracts ranges from an annotated example, and constructs a matcher for a
-// highlight set. Ranges should be named $read/$write as appropriate.
-Matcher<const std::vector<DocumentHighlight> &>
-HighlightsFrom(const Annotations &Test) {
-  std::vector<DocumentHighlight> Expected;
-  auto Add = [&](const Range &R, DocumentHighlightKind K) {
-    Expected.emplace_back();
-    Expected.back().range = R;
-    Expected.back().kind = K;
-  };
-  for (const auto &Range : Test.ranges())
-    Add(Range, DocumentHighlightKind::Text);
-  for (const auto &Range : Test.ranges("read"))
-    Add(Range, DocumentHighlightKind::Read);
-  for (const auto &Range : Test.ranges("write"))
-    Add(Range, DocumentHighlightKind::Write);
-  return UnorderedElementsAreArray(Expected);
-}
-
-TEST(HighlightsTest, All) {
-  const char *Tests[] = {
-      R"cpp(// Local variable
-        int main() {
-          int [[bonjour]];
-          $write[[^bonjour]] = 2;
-          int test1 = $read[[bonjour]];
-        }
-      )cpp",
-
-      R"cpp(// Struct
-        namespace ns1 {
-        struct [[MyClass]] {
-          static void foo([[MyClass]]*) {}
-        };
-        } // namespace ns1
-        int main() {
-          ns1::[[My^Class]]* Params;
-        }
-      )cpp",
-
-      R"cpp(// Function
-        int [[^foo]](int) {}
-        int main() {
-          [[foo]]([[foo]](42));
-          auto *X = &[[foo]];
-        }
-      )cpp",
-
-      R"cpp(// Function parameter in decl
-        void foo(int [[^bar]]);
-      )cpp",
-  };
-  for (const char *Test : Tests) {
-    Annotations T(Test);
-    auto AST = TestTU::withCode(T.code()).build();
-    EXPECT_THAT(findDocumentHighlights(AST, T.point()), HighlightsFrom(T))
-        << Test;
-  }
-}
-
-MATCHER_P3(Sym, Name, Decl, DefOrNone, "") {
-  llvm::Optional<Range> Def = DefOrNone;
-  if (Name != arg.Name) {
-    *result_listener << "Name is " << arg.Name;
-    return false;
-  }
-  if (Decl != arg.PreferredDeclaration.range) {
-    *result_listener << "Declaration is "
-                     << llvm::to_string(arg.PreferredDeclaration);
-    return false;
-  }
-  if (Def && !arg.Definition) {
-    *result_listener << "Has no definition";
-    return false;
-  }
-  if (Def && arg.Definition->range != *Def) {
-    *result_listener << "Definition is " << llvm::to_string(arg.Definition);
-    return false;
-  }
-  return true;
-}
-testing::Matcher<LocatedSymbol> Sym(std::string Name, Range Decl) {
-  return Sym(Name, Decl, llvm::None);
-}
-MATCHER_P(Sym, Name, "") { return arg.Name == Name; }
-
-MATCHER_P(RangeIs, R, "") { return arg.range == R; }
-
-TEST(LocateSymbol, WithIndex) {
-  Annotations SymbolHeader(R"cpp(
-        class $forward[[Forward]];
-        class $foo[[Foo]] {};
-
-        void $f1[[f1]]();
-
-        inline void $f2[[f2]]() {}
-      )cpp");
-  Annotations SymbolCpp(R"cpp(
-      class $forward[[forward]] {};
-      void  $f1[[f1]]() {}
-    )cpp");
-
-  TestTU TU;
-  TU.Code = SymbolCpp.code();
-  TU.HeaderCode = SymbolHeader.code();
-  auto Index = TU.index();
-  auto LocateWithIndex = [&Index](const Annotations &Main) {
-    auto AST = TestTU::withCode(Main.code()).build();
-    return clangd::locateSymbolAt(AST, Main.point(), Index.get());
-  };
-
-  Annotations Test(R"cpp(// only declaration in AST.
-        void [[f1]]();
-        int main() {
-          ^f1();
-        }
-      )cpp");
-  EXPECT_THAT(LocateWithIndex(Test),
-              ElementsAre(Sym("f1", Test.range(), SymbolCpp.range("f1"))));
-
-  Test = Annotations(R"cpp(// definition in AST.
-        void [[f1]]() {}
-        int main() {
-          ^f1();
-        }
-      )cpp");
-  EXPECT_THAT(LocateWithIndex(Test),
-              ElementsAre(Sym("f1", SymbolHeader.range("f1"), Test.range())));
-
-  Test = Annotations(R"cpp(// forward declaration in AST.
-        class [[Foo]];
-        F^oo* create();
-      )cpp");
-  EXPECT_THAT(LocateWithIndex(Test),
-              ElementsAre(Sym("Foo", Test.range(), SymbolHeader.range("foo"))));
-
-  Test = Annotations(R"cpp(// defintion in AST.
-        class [[Forward]] {};
-        F^orward create();
-      )cpp");
-  EXPECT_THAT(
-      LocateWithIndex(Test),
-      ElementsAre(Sym("Forward", SymbolHeader.range("forward"), Test.range())));
-}
-
-TEST(LocateSymbol, WithIndexPreferredLocation) {
-  Annotations SymbolHeader(R"cpp(
-        class $[[Proto]] {};
-      )cpp");
-  TestTU TU;
-  TU.HeaderCode = SymbolHeader.code();
-  TU.HeaderFilename = "x.proto"; // Prefer locations in codegen files.
-  auto Index = TU.index();
-
-  Annotations Test(R"cpp(// only declaration in AST.
-        // Shift to make range different.
-        class [[Proto]];
-        P^roto* create();
-      )cpp");
-
-  auto AST = TestTU::withCode(Test.code()).build();
-  auto Locs = clangd::locateSymbolAt(AST, Test.point(), Index.get());
-  EXPECT_THAT(Locs, ElementsAre(Sym("Proto", SymbolHeader.range())));
-}
-
-TEST(LocateSymbol, All) {
-  // Ranges in tests:
-  //   $decl is the declaration location (if absent, no symbol is located)
-  //   $def is the definition location (if absent, symbol has no definition)
-  //   unnamed range becomes both $decl and $def.
-  const char *Tests[] = {
-      R"cpp(// Local variable
-        int main() {
-          int [[bonjour]];
-          ^bonjour = 2;
-          int test1 = bonjour;
-        }
-      )cpp",
-
-      R"cpp(// Struct
-        namespace ns1 {
-        struct [[MyClass]] {};
-        } // namespace ns1
-        int main() {
-          ns1::My^Class* Params;
-        }
-      )cpp",
-
-      R"cpp(// Function definition via pointer
-        int [[foo]](int) {}
-        int main() {
-          auto *X = &^foo;
-        }
-      )cpp",
-
-      R"cpp(// Function declaration via call
-        int $decl[[foo]](int);
-        int main() {
-          return ^foo(42);
-        }
-      )cpp",
-
-      R"cpp(// Field
-        struct Foo { int [[x]]; };
-        int main() {
-          Foo bar;
-          bar.^x;
-        }
-      )cpp",
-
-      R"cpp(// Field, member initializer
-        struct Foo {
-          int [[x]];
-          Foo() : ^x(0) {}
-        };
-      )cpp",
-
-      R"cpp(// Field, GNU old-style field designator
-        struct Foo { int [[x]]; };
-        int main() {
-          Foo bar = { ^x : 1 };
-        }
-      )cpp",
-
-      R"cpp(// Field, field designator
-        struct Foo { int [[x]]; };
-        int main() {
-          Foo bar = { .^x = 2 };
-        }
-      )cpp",
-
-      R"cpp(// Method call
-        struct Foo { int $decl[[x]](); };
-        int main() {
-          Foo bar;
-          bar.^x();
-        }
-      )cpp",
-
-      R"cpp(// Typedef
-        typedef int $decl[[Foo]];
-        int main() {
-          ^Foo bar;
-        }
-      )cpp",
-
-      R"cpp(// Template type parameter
-        template <typename [[T]]>
-        void foo() { ^T t; }
-      )cpp",
-
-      R"cpp(// Template template type parameter
-        template <template<typename> class [[T]]>
-        void foo() { ^T<int> t; }
-      )cpp",
-
-      R"cpp(// Namespace
-        namespace $decl[[ns]] {
-        struct Foo { static void bar(); }
-        } // namespace ns
-        int main() { ^ns::Foo::bar(); }
-      )cpp",
-
-      R"cpp(// Macro
-        #define MACRO 0
-        #define [[MACRO]] 1
-        int main() { return ^MACRO; }
-        #define MACRO 2
-        #undef macro
-      )cpp",
-
-      R"cpp(// Macro
-       class TTT { public: int a; };
-       #define [[FF]](S) if (int b = S.a) {}
-       void f() {
-         TTT t;
-         F^F(t);
-       }
-      )cpp",
-
-      R"cpp(// Macro argument
-       int [[i]];
-       #define ADDRESSOF(X) &X;
-       int *j = ADDRESSOF(^i);
-      )cpp",
-
-      R"cpp(// Symbol concatenated inside macro (not supported)
-       int *pi;
-       #define POINTER(X) p # X;
-       int i = *POINTER(^i);
-      )cpp",
-
-      R"cpp(// Forward class declaration
-        class Foo;
-        class [[Foo]] {};
-        F^oo* foo();
-      )cpp",
-
-      R"cpp(// Function declaration
-        void foo();
-        void g() { f^oo(); }
-        void [[foo]]() {}
-      )cpp",
-
-      R"cpp(
-        #define FF(name) class name##_Test {};
-        [[FF]](my);
-        void f() { my^_Test a; }
-      )cpp",
-
-      R"cpp(
-         #define FF() class [[Test]] {};
-         FF();
-         void f() { T^est a; }
-      )cpp",
-
-      R"cpp(// explicit template specialization
-        template <typename T>
-        struct Foo { void bar() {} };
-
-        template <>
-        struct [[Foo]]<int> { void bar() {} };
-
-        void foo() {
-          Foo<char> abc;
-          Fo^o<int> b;
-        }
-      )cpp",
-
-      R"cpp(// implicit template specialization
-        template <typename T>
-        struct [[Foo]] { void bar() {} };
-        template <>
-        struct Foo<int> { void bar() {} };
-        void foo() {
-          Fo^o<char> abc;
-          Foo<int> b;
-        }
-      )cpp",
-
-      R"cpp(// partial template specialization
-        template <typename T>
-        struct Foo { void bar() {} };
-        template <typename T>
-        struct [[Foo]]<T*> { void bar() {} };
-        ^Foo<int*> x;
-      )cpp",
-
-      R"cpp(// function template specializations
-        template <class T>
-        void foo(T) {}
-        template <>
-        void [[foo]](int) {}
-        void bar() {
-          fo^o(10);
-        }
-      )cpp",
-
-      R"cpp(// variable template decls
-        template <class T>
-        T var = T();
-
-        template <>
-        double [[var]]<int> = 10;
-
-        double y = va^r<int>;
-      )cpp",
-
-      R"cpp(// No implicit constructors
-        class X {
-          X(X&& x) = default;
-        };
-        X [[makeX]]() {}
-        void foo() {
-          auto x = m^akeX();
-        }
-      )cpp",
-  };
-  for (const char *Test : Tests) {
-    Annotations T(Test);
-    llvm::Optional<Range> WantDecl;
-    llvm::Optional<Range> WantDef;
-    if (!T.ranges().empty())
-      WantDecl = WantDef = T.range();
-    if (!T.ranges("decl").empty())
-      WantDecl = T.range("decl");
-    if (!T.ranges("def").empty())
-      WantDef = T.range("def");
-
-    auto AST = TestTU::withCode(T.code()).build();
-    auto Results = locateSymbolAt(AST, T.point());
-
-    if (!WantDecl) {
-      EXPECT_THAT(Results, IsEmpty()) << Test;
-    } else {
-      ASSERT_THAT(Results, ::testing::SizeIs(1)) << Test;
-      EXPECT_EQ(Results[0].PreferredDeclaration.range, *WantDecl) << Test;
-      llvm::Optional<Range> GotDef;
-      if (Results[0].Definition)
-        GotDef = Results[0].Definition->range;
-      EXPECT_EQ(WantDef, GotDef) << Test;
-    }
-  }
-}
-
-TEST(LocateSymbol, Ambiguous) {
-  auto T = Annotations(R"cpp(
-    struct Foo {
-      Foo();
-      Foo(Foo&&);
-      Foo(const char*);
-    };
-
-    Foo f();
-
-    void g(Foo foo);
-
-    void call() {
-      const char* str = "123";
-      Foo a = $1^str;
-      Foo b = Foo($2^str);
-      Foo c = $3^f();
-      $4^g($5^f());
-      g($6^str);
-      Foo ab$7^c;
-      Foo ab$8^cd("asdf");
-      Foo foox = Fo$9^o("asdf");
-    }
-  )cpp");
-  auto AST = TestTU::withCode(T.code()).build();
-  // Ordered assertions are deliberate: we expect a predictable order.
-  EXPECT_THAT(locateSymbolAt(AST, T.point("1")), ElementsAre(Sym("str")));
-  EXPECT_THAT(locateSymbolAt(AST, T.point("2")), ElementsAre(Sym("str")));
-  EXPECT_THAT(locateSymbolAt(AST, T.point("3")), ElementsAre(Sym("f")));
-  EXPECT_THAT(locateSymbolAt(AST, T.point("4")), ElementsAre(Sym("g")));
-  EXPECT_THAT(locateSymbolAt(AST, T.point("5")), ElementsAre(Sym("f")));
-  EXPECT_THAT(locateSymbolAt(AST, T.point("6")), ElementsAre(Sym("str")));
-  EXPECT_THAT(locateSymbolAt(AST, T.point("7")), ElementsAre(Sym("abc")));
-  EXPECT_THAT(locateSymbolAt(AST, T.point("8")),
-              ElementsAre(Sym("Foo"), Sym("abcd")));
-  EXPECT_THAT(locateSymbolAt(AST, T.point("9")),
-              // First one is class definition, second is the constructor.
-              ElementsAre(Sym("Foo"), Sym("Foo")));
-}
-
-TEST(LocateSymbol, RelPathsInCompileCommand) {
-  // The source is in "/clangd-test/src".
-  // We build in "/clangd-test/build".
-
-  Annotations SourceAnnotations(R"cpp(
-#include "header_in_preamble.h"
-int [[foo]];
-#include "header_not_in_preamble.h"
-int baz = f$p1^oo + bar_pre$p2^amble + bar_not_pre$p3^amble;
-)cpp");
-
-  Annotations HeaderInPreambleAnnotations(R"cpp(
-int [[bar_preamble]];
-)cpp");
-
-  Annotations HeaderNotInPreambleAnnotations(R"cpp(
-int [[bar_not_preamble]];
-)cpp");
-
-  // Make the compilation paths appear as ../src/foo.cpp in the compile
-  // commands.
-  SmallString<32> RelPathPrefix("..");
-  llvm::sys::path::append(RelPathPrefix, "src");
-  std::string BuildDir = testPath("build");
-  MockCompilationDatabase CDB(BuildDir, RelPathPrefix);
-
-  IgnoreDiagnostics DiagConsumer;
-  MockFSProvider FS;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  // Fill the filesystem.
-  auto FooCpp = testPath("src/foo.cpp");
-  FS.Files[FooCpp] = "";
-  auto HeaderInPreambleH = testPath("src/header_in_preamble.h");
-  FS.Files[HeaderInPreambleH] = HeaderInPreambleAnnotations.code();
-  auto HeaderNotInPreambleH = testPath("src/header_not_in_preamble.h");
-  FS.Files[HeaderNotInPreambleH] = HeaderNotInPreambleAnnotations.code();
-
-  runAddDocument(Server, FooCpp, SourceAnnotations.code());
-
-  // Go to a definition in main source file.
-  auto Locations =
-      runLocateSymbolAt(Server, FooCpp, SourceAnnotations.point("p1"));
-  EXPECT_TRUE(bool(Locations)) << "findDefinitions returned an error";
-  EXPECT_THAT(*Locations, ElementsAre(Sym("foo", SourceAnnotations.range())));
-
-  // Go to a definition in header_in_preamble.h.
-  Locations = runLocateSymbolAt(Server, FooCpp, SourceAnnotations.point("p2"));
-  EXPECT_TRUE(bool(Locations)) << "findDefinitions returned an error";
-  EXPECT_THAT(
-      *Locations,
-      ElementsAre(Sym("bar_preamble", HeaderInPreambleAnnotations.range())));
-
-  // Go to a definition in header_not_in_preamble.h.
-  Locations = runLocateSymbolAt(Server, FooCpp, SourceAnnotations.point("p3"));
-  EXPECT_TRUE(bool(Locations)) << "findDefinitions returned an error";
-  EXPECT_THAT(*Locations,
-              ElementsAre(Sym("bar_not_preamble",
-                              HeaderNotInPreambleAnnotations.range())));
-}
-
-TEST(Hover, All) {
-  struct OneTest {
-    StringRef Input;
-    StringRef ExpectedHover;
-  };
-
-  OneTest Tests[] = {
-      {
-          R"cpp(// No hover
-            ^int main() {
-            }
-          )cpp",
-          "",
-      },
-      {
-          R"cpp(// Local variable
-            int main() {
-              int bonjour;
-              ^bonjour = 2;
-              int test1 = bonjour;
-            }
-          )cpp",
-          "Declared in function main\n\nint bonjour",
-      },
-      {
-          R"cpp(// Local variable in method
-            struct s {
-              void method() {
-                int bonjour;
-                ^bonjour = 2;
-              }
-            };
-          )cpp",
-          "Declared in function s::method\n\nint bonjour",
-      },
-      {
-          R"cpp(// Struct
-            namespace ns1 {
-              struct MyClass {};
-            } // namespace ns1
-            int main() {
-              ns1::My^Class* Params;
-            }
-          )cpp",
-          "Declared in namespace ns1\n\nstruct MyClass {}",
-      },
-      {
-          R"cpp(// Class
-            namespace ns1 {
-              class MyClass {};
-            } // namespace ns1
-            int main() {
-              ns1::My^Class* Params;
-            }
-          )cpp",
-          "Declared in namespace ns1\n\nclass MyClass {}",
-      },
-      {
-          R"cpp(// Union
-            namespace ns1 {
-              union MyUnion { int x; int y; };
-            } // namespace ns1
-            int main() {
-              ns1::My^Union Params;
-            }
-          )cpp",
-          "Declared in namespace ns1\n\nunion MyUnion {}",
-      },
-      {
-          R"cpp(// Function definition via pointer
-            int foo(int) {}
-            int main() {
-              auto *X = &^foo;
-            }
-          )cpp",
-          "Declared in global namespace\n\nint foo(int)",
-      },
-      {
-          R"cpp(// Function declaration via call
-            int foo(int);
-            int main() {
-              return ^foo(42);
-            }
-          )cpp",
-          "Declared in global namespace\n\nint foo(int)",
-      },
-      {
-          R"cpp(// Field
-            struct Foo { int x; };
-            int main() {
-              Foo bar;
-              bar.^x;
-            }
-          )cpp",
-          "Declared in struct Foo\n\nint x",
-      },
-      {
-          R"cpp(// Field with initialization
-            struct Foo { int x = 5; };
-            int main() {
-              Foo bar;
-              bar.^x;
-            }
-          )cpp",
-          "Declared in struct Foo\n\nint x = 5",
-      },
-      {
-          R"cpp(// Static field
-            struct Foo { static int x; };
-            int main() {
-              Foo::^x;
-            }
-          )cpp",
-          "Declared in struct Foo\n\nstatic int x",
-      },
-      {
-          R"cpp(// Field, member initializer
-            struct Foo {
-              int x;
-              Foo() : ^x(0) {}
-            };
-          )cpp",
-          "Declared in struct Foo\n\nint x",
-      },
-      {
-          R"cpp(// Field, GNU old-style field designator
-            struct Foo { int x; };
-            int main() {
-              Foo bar = { ^x : 1 };
-            }
-          )cpp",
-          "Declared in struct Foo\n\nint x",
-      },
-      {
-          R"cpp(// Field, field designator
-            struct Foo { int x; };
-            int main() {
-              Foo bar = { .^x = 2 };
-            }
-          )cpp",
-          "Declared in struct Foo\n\nint x",
-      },
-      {
-          R"cpp(// Method call
-            struct Foo { int x(); };
-            int main() {
-              Foo bar;
-              bar.^x();
-            }
-          )cpp",
-          "Declared in struct Foo\n\nint x()",
-      },
-      {
-          R"cpp(// Static method call
-            struct Foo { static int x(); };
-            int main() {
-              Foo::^x();
-            }
-          )cpp",
-          "Declared in struct Foo\n\nstatic int x()",
-      },
-      {
-          R"cpp(// Typedef
-            typedef int Foo;
-            int main() {
-              ^Foo bar;
-            }
-          )cpp",
-          "Declared in global namespace\n\ntypedef int Foo",
-      },
-      {
-          R"cpp(// Namespace
-            namespace ns {
-            struct Foo { static void bar(); }
-            } // namespace ns
-            int main() { ^ns::Foo::bar(); }
-          )cpp",
-          "Declared in global namespace\n\nnamespace ns {\n}",
-      },
-      {
-          R"cpp(// Anonymous namespace
-            namespace ns {
-              namespace {
-                int foo;
-              } // anonymous namespace
-            } // namespace ns
-            int main() { ns::f^oo++; }
-          )cpp",
-          "Declared in namespace ns::(anonymous)\n\nint foo",
-      },
-      {
-          R"cpp(// Macro
-            #define MACRO 0
-            #define MACRO 1
-            int main() { return ^MACRO; }
-            #define MACRO 2
-            #undef macro
-          )cpp",
-          "#define MACRO 1",
-      },
-      {
-          R"cpp(// Macro
-            #define MACRO 0
-            #define MACRO2 ^MACRO
-          )cpp",
-          "#define MACRO 0",
-      },
-      {
-          R"cpp(// Macro
-            #define MACRO {\
-              return 0;\
-            }
-            int main() ^MACRO
-          )cpp",
-          R"cpp(#define MACRO {\
-              return 0;\
-            })cpp",
-      },
-      {
-          R"cpp(// Forward class declaration
-            class Foo;
-            class Foo {};
-            F^oo* foo();
-          )cpp",
-          "Declared in global namespace\n\nclass Foo {}",
-      },
-      {
-          R"cpp(// Function declaration
-            void foo();
-            void g() { f^oo(); }
-            void foo() {}
-          )cpp",
-          "Declared in global namespace\n\nvoid foo()",
-      },
-      {
-          R"cpp(// Enum declaration
-            enum Hello {
-              ONE, TWO, THREE,
-            };
-            void foo() {
-              Hel^lo hello = ONE;
-            }
-          )cpp",
-          "Declared in global namespace\n\nenum Hello {\n}",
-      },
-      {
-          R"cpp(// Enumerator
-            enum Hello {
-              ONE, TWO, THREE,
-            };
-            void foo() {
-              Hello hello = O^NE;
-            }
-          )cpp",
-          "Declared in enum Hello\n\nONE",
-      },
-      {
-          R"cpp(// Enumerator in anonymous enum
-            enum {
-              ONE, TWO, THREE,
-            };
-            void foo() {
-              int hello = O^NE;
-            }
-          )cpp",
-          "Declared in enum (anonymous)\n\nONE",
-      },
-      {
-          R"cpp(// Global variable
-            static int hey = 10;
-            void foo() {
-              he^y++;
-            }
-          )cpp",
-          "Declared in global namespace\n\nstatic int hey = 10",
-      },
-      {
-          R"cpp(// Global variable in namespace
-            namespace ns1 {
-              static int hey = 10;
-            }
-            void foo() {
-              ns1::he^y++;
-            }
-          )cpp",
-          "Declared in namespace ns1\n\nstatic int hey = 10",
-      },
-      {
-          R"cpp(// Field in anonymous struct
-            static struct {
-              int hello;
-            } s;
-            void foo() {
-              s.he^llo++;
-            }
-          )cpp",
-          "Declared in struct (anonymous)\n\nint hello",
-      },
-      {
-          R"cpp(// Templated function
-            template <typename T>
-            T foo() {
-              return 17;
-            }
-            void g() { auto x = f^oo<int>(); }
-          )cpp",
-          "Declared in global namespace\n\ntemplate <typename T> T foo()",
-      },
-      {
-          R"cpp(// Anonymous union
-            struct outer {
-              union {
-                int abc, def;
-              } v;
-            };
-            void g() { struct outer o; o.v.d^ef++; }
-          )cpp",
-          "Declared in union outer::(anonymous)\n\nint def",
-      },
-      {
-          R"cpp(// Nothing
-            void foo() {
-              ^
-            }
-          )cpp",
-          "",
-      },
-      {
-          R"cpp(// Simple initialization with auto
-            void foo() {
-              ^auto i = 1;
-            }
-          )cpp",
-          "int",
-      },
-      {
-          R"cpp(// Simple initialization with const auto
-            void foo() {
-              const ^auto i = 1;
-            }
-          )cpp",
-          "int",
-      },
-      {
-          R"cpp(// Simple initialization with const auto&
-            void foo() {
-              const ^auto& i = 1;
-            }
-          )cpp",
-          "int",
-      },
-      {
-          R"cpp(// Simple initialization with auto&
-            void foo() {
-              ^auto& i = 1;
-            }
-          )cpp",
-          "int",
-      },
-      {
-          R"cpp(// Simple initialization with auto*
-            void foo() {
-              int a = 1;
-              ^auto* i = &a;
-            }
-          )cpp",
-          "int",
-      },
-      {
-          R"cpp(// Auto with initializer list.
-            namespace std
-            {
-              template<class _E>
-              class initializer_list {};
-            }
-            void foo() {
-              ^auto i = {1,2};
-            }
-          )cpp",
-          "class std::initializer_list<int>",
-      },
-      {
-          R"cpp(// User defined conversion to auto
-            struct Bar {
-              operator ^auto() const { return 10; }
-            };
-          )cpp",
-          "int",
-      },
-      {
-          R"cpp(// Simple initialization with decltype(auto)
-            void foo() {
-              ^decltype(auto) i = 1;
-            }
-          )cpp",
-          "int",
-      },
-      {
-          R"cpp(// Simple initialization with const decltype(auto)
-            void foo() {
-              const int j = 0;
-              ^decltype(auto) i = j;
-            }
-          )cpp",
-          "const int",
-      },
-      {
-          R"cpp(// Simple initialization with const& decltype(auto)
-            void foo() {
-              int k = 0;
-              const int& j = k;
-              ^decltype(auto) i = j;
-            }
-          )cpp",
-          "const int &",
-      },
-      {
-          R"cpp(// Simple initialization with & decltype(auto)
-            void foo() {
-              int k = 0;
-              int& j = k;
-              ^decltype(auto) i = j;
-            }
-          )cpp",
-          "int &",
-      },
-      {
-          R"cpp(// decltype with initializer list: nothing
-            namespace std
-            {
-              template<class _E>
-              class initializer_list {};
-            }
-            void foo() {
-              ^decltype(auto) i = {1,2};
-            }
-          )cpp",
-          "",
-      },
-      {
-          R"cpp(// simple trailing return type
-            ^auto main() -> int {
-              return 0;
-            }
-          )cpp",
-          "int",
-      },
-      {
-          R"cpp(// auto function return with trailing type
-            struct Bar {};
-            ^auto test() -> decltype(Bar()) {
-              return Bar();
-            }
-          )cpp",
-          "struct Bar",
-      },
-      {
-          R"cpp(// trailing return type
-            struct Bar {};
-            auto test() -> ^decltype(Bar()) {
-              return Bar();
-            }
-          )cpp",
-          "struct Bar",
-      },
-      {
-          R"cpp(// auto in function return
-            struct Bar {};
-            ^auto test() {
-              return Bar();
-            }
-          )cpp",
-          "struct Bar",
-      },
-      {
-          R"cpp(// auto& in function return
-            struct Bar {};
-            ^auto& test() {
-              return Bar();
-            }
-          )cpp",
-          "struct Bar",
-      },
-      {
-          R"cpp(// auto* in function return
-            struct Bar {};
-            ^auto* test() {
-              Bar* bar;
-              return bar;
-            }
-          )cpp",
-          "struct Bar",
-      },
-      {
-          R"cpp(// const auto& in function return
-            struct Bar {};
-            const ^auto& test() {
-              return Bar();
-            }
-          )cpp",
-          "struct Bar",
-      },
-      {
-          R"cpp(// decltype(auto) in function return
-            struct Bar {};
-            ^decltype(auto) test() {
-              return Bar();
-            }
-          )cpp",
-          "struct Bar",
-      },
-      {
-          R"cpp(// decltype(auto) reference in function return
-            struct Bar {};
-            ^decltype(auto) test() {
-              int a;
-              return (a);
-            }
-          )cpp",
-          "int &",
-      },
-      {
-          R"cpp(// decltype lvalue reference
-            void foo() {
-              int I = 0;
-              ^decltype(I) J = I;
-            }
-          )cpp",
-          "int",
-      },
-      {
-          R"cpp(// decltype lvalue reference
-            void foo() {
-              int I= 0;
-              int &K = I;
-              ^decltype(K) J = I;
-            }
-          )cpp",
-          "int &",
-      },
-      {
-          R"cpp(// decltype lvalue reference parenthesis
-            void foo() {
-              int I = 0;
-              ^decltype((I)) J = I;
-            }
-          )cpp",
-          "int &",
-      },
-      {
-          R"cpp(// decltype rvalue reference
-            void foo() {
-              int I = 0;
-              ^decltype(static_cast<int&&>(I)) J = static_cast<int&&>(I);
-            }
-          )cpp",
-          "int &&",
-      },
-      {
-          R"cpp(// decltype rvalue reference function call
-            int && bar();
-            void foo() {
-              int I = 0;
-              ^decltype(bar()) J = bar();
-            }
-          )cpp",
-          "int &&",
-      },
-      {
-          R"cpp(// decltype of function with trailing return type.
-            struct Bar {};
-            auto test() -> decltype(Bar()) {
-              return Bar();
-            }
-            void foo() {
-              ^decltype(test()) i = test();
-            }
-          )cpp",
-          "struct Bar",
-      },
-      {
-          R"cpp(// decltype of var with decltype.
-            void foo() {
-              int I = 0;
-              decltype(I) J = I;
-              ^decltype(J) K = J;
-            }
-          )cpp",
-          "int",
-      },
-      {
-          R"cpp(// structured binding. Not supported yet
-            struct Bar {};
-            void foo() {
-              Bar a[2];
-              ^auto [x,y] = a;
-            }
-          )cpp",
-          "",
-      },
-      {
-          R"cpp(// Template auto parameter. Nothing (Not useful).
-            template<^auto T>
-            void func() {
-            }
-            void foo() {
-               func<1>();
-            }
-          )cpp",
-          "",
-      },
-      {
-          R"cpp(// More compilcated structured types.
-            int bar();
-            ^auto (*foo)() = bar;
-          )cpp",
-          "int",
-      },
-  };
-
-  for (const OneTest &Test : Tests) {
-    Annotations T(Test.Input);
-    TestTU TU = TestTU::withCode(T.code());
-    TU.ExtraArgs.push_back("-std=c++17");
-    auto AST = TU.build();
-    if (auto H = getHover(AST, T.point())) {
-      EXPECT_NE("", Test.ExpectedHover) << Test.Input;
-      EXPECT_EQ(H->contents.value, Test.ExpectedHover.str()) << Test.Input;
-    } else
-      EXPECT_EQ("", Test.ExpectedHover.str()) << Test.Input;
-  }
-}
-
-TEST(GoToInclude, All) {
-  MockFSProvider FS;
-  IgnoreDiagnostics DiagConsumer;
-  MockCompilationDatabase CDB;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  auto FooCpp = testPath("foo.cpp");
-  const char *SourceContents = R"cpp(
-  #include ^"$2^foo.h$3^"
-  #include "$4^invalid.h"
-  int b = a;
-  // test
-  int foo;
-  #in$5^clude "$6^foo.h"$7^
-  )cpp";
-  Annotations SourceAnnotations(SourceContents);
-  FS.Files[FooCpp] = SourceAnnotations.code();
-  auto FooH = testPath("foo.h");
-
-  const char *HeaderContents = R"cpp([[]]#pragma once
-                                     int a;
-                                     )cpp";
-  Annotations HeaderAnnotations(HeaderContents);
-  FS.Files[FooH] = HeaderAnnotations.code();
-
-  Server.addDocument(FooH, HeaderAnnotations.code());
-  Server.addDocument(FooCpp, SourceAnnotations.code());
-
-  // Test include in preamble.
-  auto Locations = runLocateSymbolAt(Server, FooCpp, SourceAnnotations.point());
-  ASSERT_TRUE(bool(Locations)) << "locateSymbolAt returned an error";
-  EXPECT_THAT(*Locations, ElementsAre(Sym("foo.h", HeaderAnnotations.range())));
-
-  // Test include in preamble, last char.
-  Locations = runLocateSymbolAt(Server, FooCpp, SourceAnnotations.point("2"));
-  ASSERT_TRUE(bool(Locations)) << "locateSymbolAt returned an error";
-  EXPECT_THAT(*Locations, ElementsAre(Sym("foo.h", HeaderAnnotations.range())));
-
-  Locations = runLocateSymbolAt(Server, FooCpp, SourceAnnotations.point("3"));
-  ASSERT_TRUE(bool(Locations)) << "locateSymbolAt returned an error";
-  EXPECT_THAT(*Locations, ElementsAre(Sym("foo.h", HeaderAnnotations.range())));
-
-  // Test include outside of preamble.
-  Locations = runLocateSymbolAt(Server, FooCpp, SourceAnnotations.point("6"));
-  ASSERT_TRUE(bool(Locations)) << "locateSymbolAt returned an error";
-  EXPECT_THAT(*Locations, ElementsAre(Sym("foo.h", HeaderAnnotations.range())));
-
-  // Test a few positions that do not result in Locations.
-  Locations = runLocateSymbolAt(Server, FooCpp, SourceAnnotations.point("4"));
-  ASSERT_TRUE(bool(Locations)) << "locateSymbolAt returned an error";
-  EXPECT_THAT(*Locations, IsEmpty());
-
-  Locations = runLocateSymbolAt(Server, FooCpp, SourceAnnotations.point("5"));
-  ASSERT_TRUE(bool(Locations)) << "locateSymbolAt returned an error";
-  EXPECT_THAT(*Locations, ElementsAre(Sym("foo.h", HeaderAnnotations.range())));
-
-  Locations = runLocateSymbolAt(Server, FooCpp, SourceAnnotations.point("7"));
-  ASSERT_TRUE(bool(Locations)) << "locateSymbolAt returned an error";
-  EXPECT_THAT(*Locations, ElementsAre(Sym("foo.h", HeaderAnnotations.range())));
-
-  // Objective C #import directive.
-  Annotations ObjC(R"objc(
-  #import "^foo.h"
-  )objc");
-  auto FooM = testPath("foo.m");
-  FS.Files[FooM] = ObjC.code();
-
-  Server.addDocument(FooM, ObjC.code());
-  Locations = runLocateSymbolAt(Server, FooM, ObjC.point());
-  ASSERT_TRUE(bool(Locations)) << "locateSymbolAt returned an error";
-  EXPECT_THAT(*Locations, ElementsAre(Sym("foo.h", HeaderAnnotations.range())));
-}
-
-TEST(LocateSymbol, WithPreamble) {
-  // Test stragety: AST should always use the latest preamble instead of last
-  // good preamble.
-  MockFSProvider FS;
-  IgnoreDiagnostics DiagConsumer;
-  MockCompilationDatabase CDB;
-  ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest());
-
-  auto FooCpp = testPath("foo.cpp");
-  // The trigger locations must be the same.
-  Annotations FooWithHeader(R"cpp(#include "fo^o.h")cpp");
-  Annotations FooWithoutHeader(R"cpp(double    [[fo^o]]();)cpp");
-
-  FS.Files[FooCpp] = FooWithHeader.code();
-
-  auto FooH = testPath("foo.h");
-  Annotations FooHeader(R"cpp([[]])cpp");
-  FS.Files[FooH] = FooHeader.code();
-
-  runAddDocument(Server, FooCpp, FooWithHeader.code());
-  // LocateSymbol goes to a #include file: the result comes from the preamble.
-  EXPECT_THAT(
-      cantFail(runLocateSymbolAt(Server, FooCpp, FooWithHeader.point())),
-      ElementsAre(Sym("foo.h", FooHeader.range())));
-
-  // Only preamble is built, and no AST is built in this request.
-  Server.addDocument(FooCpp, FooWithoutHeader.code(), WantDiagnostics::No);
-  // We build AST here, and it should use the latest preamble rather than the
-  // stale one.
-  EXPECT_THAT(
-      cantFail(runLocateSymbolAt(Server, FooCpp, FooWithoutHeader.point())),
-      ElementsAre(Sym("foo", FooWithoutHeader.range())));
-
-  // Reset test environment.
-  runAddDocument(Server, FooCpp, FooWithHeader.code());
-  // Both preamble and AST are built in this request.
-  Server.addDocument(FooCpp, FooWithoutHeader.code(), WantDiagnostics::Yes);
-  // Use the AST being built in above request.
-  EXPECT_THAT(
-      cantFail(runLocateSymbolAt(Server, FooCpp, FooWithoutHeader.point())),
-      ElementsAre(Sym("foo", FooWithoutHeader.range())));
-}
-
-TEST(FindReferences, WithinAST) {
-  const char *Tests[] = {
-      R"cpp(// Local variable
-        int main() {
-          int [[foo]];
-          [[^foo]] = 2;
-          int test1 = [[foo]];
-        }
-      )cpp",
-
-      R"cpp(// Struct
-        namespace ns1 {
-        struct [[Foo]] {};
-        } // namespace ns1
-        int main() {
-          ns1::[[Fo^o]]* Params;
-        }
-      )cpp",
-
-      R"cpp(// Forward declaration
-        class [[Foo]];
-        class [[Foo]] {}
-        int main() {
-          [[Fo^o]] foo;
-        }
-      )cpp",
-
-      R"cpp(// Function
-        int [[foo]](int) {}
-        int main() {
-          auto *X = &[[^foo]];
-          [[foo]](42)
-        }
-      )cpp",
-
-      R"cpp(// Field
-        struct Foo {
-          int [[foo]];
-          Foo() : [[foo]](0) {}
-        };
-        int main() {
-          Foo f;
-          f.[[f^oo]] = 1;
-        }
-      )cpp",
-
-      R"cpp(// Method call
-        struct Foo { int [[foo]](); };
-        int Foo::[[foo]]() {}
-        int main() {
-          Foo f;
-          f.[[^foo]]();
-        }
-      )cpp",
-
-      R"cpp(// Constructor
-        struct Foo {
-          [[F^oo]](int);
-        };
-        void foo() {
-          Foo f = [[Foo]](42);
-        }
-      )cpp",
-
-      R"cpp(// Typedef
-        typedef int [[Foo]];
-        int main() {
-          [[^Foo]] bar;
-        }
-      )cpp",
-
-      R"cpp(// Namespace
-        namespace [[ns]] {
-        struct Foo {};
-        } // namespace ns
-        int main() { [[^ns]]::Foo foo; }
-      )cpp",
-  };
-  for (const char *Test : Tests) {
-    Annotations T(Test);
-    auto AST = TestTU::withCode(T.code()).build();
-    std::vector<Matcher<Location>> ExpectedLocations;
-    for (const auto &R : T.ranges())
-      ExpectedLocations.push_back(RangeIs(R));
-    EXPECT_THAT(findReferences(AST, T.point(), 0),
-                ElementsAreArray(ExpectedLocations))
-        << Test;
-  }
-}
-
-TEST(FindReferences, ExplicitSymbols) {
-  const char *Tests[] = {
-      R"cpp(
-      struct Foo { Foo* [self]() const; };
-      void f() {
-        if (Foo* T = foo.[^self]()) {} // Foo member call expr.
-      }
-      )cpp",
-
-      R"cpp(
-      struct Foo { Foo(int); };
-      Foo f() {
-        int [b];
-        return [^b]; // Foo constructor expr.
-      }
-      )cpp",
-
-      R"cpp(
-      struct Foo {};
-      void g(Foo);
-      Foo [f]();
-      void call() {
-        g([^f]());  // Foo constructor expr.
-      }
-      )cpp",
-
-      R"cpp(
-      void [foo](int);
-      void [foo](double);
-
-      namespace ns {
-      using ::[fo^o];
-      }
-      )cpp",
-  };
-  for (const char *Test : Tests) {
-    Annotations T(Test);
-    auto AST = TestTU::withCode(T.code()).build();
-    std::vector<Matcher<Location>> ExpectedLocations;
-    for (const auto &R : T.ranges())
-      ExpectedLocations.push_back(RangeIs(R));
-    EXPECT_THAT(findReferences(AST, T.point(), 0),
-                ElementsAreArray(ExpectedLocations))
-        << Test;
-  }
-}
-
-TEST(FindReferences, NeedsIndex) {
-  const char *Header = "int foo();";
-  Annotations Main("int main() { [[f^oo]](); }");
-  TestTU TU;
-  TU.Code = Main.code();
-  TU.HeaderCode = Header;
-  auto AST = TU.build();
-
-  // References in main file are returned without index.
-  EXPECT_THAT(findReferences(AST, Main.point(), 0, /*Index=*/nullptr),
-              ElementsAre(RangeIs(Main.range())));
-  Annotations IndexedMain(R"cpp(
-    int main() { [[f^oo]](); }
-  )cpp");
-
-  // References from indexed files are included.
-  TestTU IndexedTU;
-  IndexedTU.Code = IndexedMain.code();
-  IndexedTU.Filename = "Indexed.cpp";
-  IndexedTU.HeaderCode = Header;
-  EXPECT_THAT(findReferences(AST, Main.point(), 0, IndexedTU.index().get()),
-              ElementsAre(RangeIs(Main.range()), RangeIs(IndexedMain.range())));
-
-  EXPECT_EQ(1u, findReferences(AST, Main.point(), /*Limit*/ 1,
-                               IndexedTU.index().get())
-                    .size());
-
-  // If the main file is in the index, we don't return duplicates.
-  // (even if the references are in a different location)
-  TU.Code = ("\n\n" + Main.code()).str();
-  EXPECT_THAT(findReferences(AST, Main.point(), 0, TU.index().get()),
-              ElementsAre(RangeIs(Main.range())));
-}
-
-TEST(FindReferences, NoQueryForLocalSymbols) {
-  struct RecordingIndex : public MemIndex {
-    mutable Optional<llvm::DenseSet<SymbolID>> RefIDs;
-    void refs(const RefsRequest &Req,
-              llvm::function_ref<void(const Ref &)>) const override {
-      RefIDs = Req.IDs;
-    }
-  };
-
-  struct Test {
-    StringRef AnnotatedCode;
-    bool WantQuery;
-  } Tests[] = {
-      {"int ^x;", true},
-      // For now we don't assume header structure which would allow skipping.
-      {"namespace { int ^x; }", true},
-      {"static int ^x;", true},
-      // Anything in a function certainly can't be referenced though.
-      {"void foo() { int ^x; }", false},
-      {"void foo() { struct ^x{}; }", false},
-      {"auto lambda = []{ int ^x; };", false},
-  };
-  for (Test T : Tests) {
-    Annotations File(T.AnnotatedCode);
-    RecordingIndex Rec;
-    auto AST = TestTU::withCode(File.code()).build();
-    findReferences(AST, File.point(), 0, &Rec);
-    if (T.WantQuery)
-      EXPECT_NE(Rec.RefIDs, None) << T.AnnotatedCode;
-    else
-      EXPECT_EQ(Rec.RefIDs, None) << T.AnnotatedCode;
-  }
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang

Removed: clang-tools-extra/trunk/unittests/clangd/xpc/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/xpc/CMakeLists.txt?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/xpc/CMakeLists.txt (original)
+++ clang-tools-extra/trunk/unittests/clangd/xpc/CMakeLists.txt (removed)
@@ -1,21 +0,0 @@
-set(LLVM_LINK_COMPONENTS
-  support
-  )
-
-get_filename_component(CLANGD_SOURCE_DIR
-  ${CMAKE_CURRENT_SOURCE_DIR}/../../clangd REALPATH)
-include_directories(
-  ${CLANGD_SOURCE_DIR}
-  )
-
-add_extra_unittest(ClangdXpcTests
-  ConversionTests.cpp
-  )
-
-target_link_libraries(ClangdXpcTests
-  PRIVATE
-  clangdXpcJsonConversions
-  clangDaemon
-  LLVMSupport
-  LLVMTestingSupport
-  )

Removed: clang-tools-extra/trunk/unittests/clangd/xpc/ConversionTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/xpc/ConversionTests.cpp?rev=359423&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/xpc/ConversionTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/xpc/ConversionTests.cpp (removed)
@@ -1,35 +0,0 @@
-//===-- ConversionTests.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 "xpc/Conversion.h"
-#include "gtest/gtest.h"
-
-#include <limits>
-
-namespace clang {
-namespace clangd {
-namespace {
-
-using namespace llvm;
-
-TEST(JsonXpcConversionTest, JsonToXpcToJson) {
-
-  for (auto &testcase :
-       {json::Value(false), json::Value(3.14), json::Value(42),
-        json::Value(-100), json::Value("foo"), json::Value(""),
-        json::Value("123"), json::Value(" "),
-        json::Value{true, "foo", nullptr, 42},
-        json::Value(json::Object{
-            {"a", true}, {"b", "foo"}, {"c", nullptr}, {"d", 42}})}) {
-    EXPECT_TRUE(testcase == xpcToJson(jsonToXpc(testcase))) << testcase;
-  }
-}
-
-} // namespace
-} // namespace clangd
-} // namespace clang




More information about the cfe-commits mailing list