1# Copy over the server file into test workspace
2# RUN: rm -rf %t
3# RUN: cp -r %S/Inputs/path-mappings %t
4#
5# RUN: clangd --path-mappings 'C:\client=%t/server' -lit-test < %s | FileCheck -strict-whitespace %s
6{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
7---
8{
9  "jsonrpc": "2.0",
10  "method": "textDocument/didOpen",
11  "params": {
12    "textDocument": {
13      "uri": "file:///C:/client/bar.cpp",
14      "languageId": "cpp",
15      "text": "#include \"foo.h\"\nint main(){\nreturn foo();\n}"
16    }
17  }
18}
19# Ensure that the client gets back the same client path (clangd thinks it edited %t/server/bar.cpp)
20#      CHECK:  "method": "textDocument/publishDiagnostics",
21# CHECK-NEXT:  "params": {
22# CHECK-NEXT:    "diagnostics": [],
23# CHECK-NEXT:    "uri": "file:///C:/client/bar.cpp",
24# CHECK-NEXT:    "version": 0
25# CHECK-NEXT:  }
26---
27# We're editing bar.cpp, which includes foo.h, where foo.h "exists" at a server location
28# With path mappings, when we go to definition on foo(), we get back a client file uri
29{
30  "jsonrpc": "2.0",
31  "id": 1,
32  "method": "textDocument/definition",
33  "params": {
34    "textDocument": {
35      "uri": "file:///C:/client/bar.cpp"
36    },
37    "position": {
38      "line": 2,
39      "character": 8
40    }
41  }
42}
43#      CHECK:  "id": 1,
44# CHECK-NEXT:  "jsonrpc": "2.0",
45# CHECK-NEXT:  "result": [
46# CHECK-NEXT:    {
47# CHECK-NEXT:      "range": {
48# CHECK-NEXT:        "end": {
49# CHECK-NEXT:          "character": {{[0-9]+}},
50# CHECK-NEXT:          "line": {{[0-9]+}}
51# CHECK-NEXT:        },
52# CHECK-NEXT:        "start": {
53# CHECK-NEXT:          "character": {{[0-9]+}},
54# CHECK-NEXT:          "line": {{[0-9]+}}
55# CHECK-NEXT:        }
56# CHECK-NEXT:      },
57# CHECK-NEXT:      "uri": "file:///C:/client/foo.h"
58# CHECK-NEXT:    }
59# CHECK-NEXT:  ]
60#
61---
62{"jsonrpc":"2.0","id":2,"method":"shutdown"}
63---
64{"jsonrpc":"2.0","method":"exit"}
65