|
| 1 | +# A smoke test to check that a simple dependency chain for modules can work. |
| 2 | +# |
| 3 | +# FIXME: This fails on the Windows ARM64 build server. Not entirely sure why as it has been tested on |
| 4 | +# an ARM64 Windows VM and appears to work there. |
| 5 | +# UNSUPPORTED: host=aarch64-pc-windows-msvc |
| 6 | +# |
| 7 | +# RUN: rm -fr %t |
| 8 | +# RUN: mkdir -p %t |
| 9 | +# RUN: split-file %s %t |
| 10 | +# |
| 11 | +# RUN: sed -e "s|DIR|%/t|g" %t/compile_commands.json.tmpl > %t/compile_commands.json.tmp |
| 12 | +# RUN: sed -e "s|CLANG_CC|%clang|g" %t/compile_commands.json.tmp > %t/compile_commands.json |
| 13 | +# RUN: sed -e "s|DIR|%/t|g" %t/definition.jsonrpc.tmpl > %t/definition.jsonrpc.tmp |
| 14 | +# |
| 15 | +# On Windows, we need the URI in didOpen to look like "uri":"file:///C:/..." |
| 16 | +# (with the extra slash in the front), so we add it here. |
| 17 | +# RUN: sed -E -e 's|"file://([A-Z]):/|"file:///\1:/|g' %/t/definition.jsonrpc.tmp > %/t/definition.jsonrpc |
| 18 | +# |
| 19 | +# RUN: clangd -experimental-modules-support -lit-test < %t/definition.jsonrpc \ |
| 20 | +# RUN: | FileCheck -strict-whitespace %t/definition.jsonrpc |
| 21 | + |
| 22 | +#--- A-frag.cppm |
| 23 | +export module A:frag; |
| 24 | +export void printA() {} |
| 25 | + |
| 26 | +#--- A.cppm |
| 27 | +export module A; |
| 28 | +export import :frag; |
| 29 | + |
| 30 | +#--- Use.cpp |
| 31 | +import A; |
| 32 | +void foo() { |
| 33 | + print |
| 34 | +} |
| 35 | + |
| 36 | +#--- compile_commands.json.tmpl |
| 37 | +[ |
| 38 | + { |
| 39 | + "directory": "DIR", |
| 40 | + "command": "CLANG_CC -fprebuilt-module-path=DIR -std=c++20 -o DIR/main.cpp.o -c DIR/Use.cpp", |
| 41 | + "file": "DIR/Use.cpp" |
| 42 | + }, |
| 43 | + { |
| 44 | + "directory": "DIR", |
| 45 | + "command": "CLANG_CC -std=c++20 DIR/A.cppm --precompile -o DIR/A.pcm", |
| 46 | + "file": "DIR/A.cppm" |
| 47 | + }, |
| 48 | + { |
| 49 | + "directory": "DIR", |
| 50 | + "command": "CLANG_CC -std=c++20 DIR/A-frag.cppm --precompile -o DIR/A-frag.pcm", |
| 51 | + "file": "DIR/A-frag.cppm" |
| 52 | + } |
| 53 | +] |
| 54 | + |
| 55 | +#--- definition.jsonrpc.tmpl |
| 56 | +{ |
| 57 | + "jsonrpc": "2.0", |
| 58 | + "id": 0, |
| 59 | + "method": "initialize", |
| 60 | + "params": { |
| 61 | + "processId": 123, |
| 62 | + "rootPath": "clangd", |
| 63 | + "capabilities": { |
| 64 | + "textDocument": { |
| 65 | + "completion": { |
| 66 | + "completionItem": { |
| 67 | + "snippetSupport": true |
| 68 | + } |
| 69 | + } |
| 70 | + } |
| 71 | + }, |
| 72 | + "trace": "off" |
| 73 | + } |
| 74 | +} |
| 75 | +--- |
| 76 | +{ |
| 77 | + "jsonrpc": "2.0", |
| 78 | + "method": "textDocument/didOpen", |
| 79 | + "params": { |
| 80 | + "textDocument": { |
| 81 | + "uri": "file://DIR/Use.cpp", |
| 82 | + "languageId": "cpp", |
| 83 | + "version": 1, |
| 84 | + "text": "import A;\nvoid foo() {\n print\n}\n" |
| 85 | + } |
| 86 | + } |
| 87 | +} |
| 88 | + |
| 89 | +# CHECK: "message"{{.*}}printA{{.*}}(fix available) |
| 90 | + |
| 91 | +--- |
| 92 | +{"jsonrpc":"2.0","id":1,"method":"textDocument/completion","params":{"textDocument":{"uri":"file://DIR/Use.cpp"},"context":{"triggerKind":1},"position":{"line":2,"character":6}}} |
| 93 | +--- |
| 94 | +{"jsonrpc":"2.0","id":2,"method":"shutdown"} |
| 95 | +--- |
| 96 | +{"jsonrpc":"2.0","method":"exit"} |
0 commit comments