aboutsummaryrefslogtreecommitdiff
path: root/tests/drivers/core_lsp_test.js
diff options
context:
space:
mode:
Diffstat (limited to 'tests/drivers/core_lsp_test.js')
-rw-r--r--tests/drivers/core_lsp_test.js8
1 files changed, 5 insertions, 3 deletions
diff --git a/tests/drivers/core_lsp_test.js b/tests/drivers/core_lsp_test.js
index 41d0095..983f9aa 100644
--- a/tests/drivers/core_lsp_test.js
+++ b/tests/drivers/core_lsp_test.js
@@ -4,7 +4,7 @@ const fs = require('fs');
const cp = require('child_process');
const path = require('path');
const target = process.argv[2];
-const files = ['src/runtime/rt.zc', 'src/compiler/compiler.zc', 'src/runtime/run.zc', 'src/lib/std.zc', 'src/lsp/server.zc', 'src/tools/build.zc'];
+const files = ['src/core/core.zc', 'src/runtime/rt.zc', 'src/compiler/compiler.zc', 'src/runtime/run.zc', 'src/lib/std.zc', 'src/lib/icon.zc', 'src/lsp/server.zc', 'src/tools/build.zc'];
const frame = message => {
const body = Buffer.from(JSON.stringify(message));
return Buffer.concat([Buffer.from('Content-Length: ' + body.length + '\r\n\r\n'), body]);
@@ -18,6 +18,7 @@ for (const file of files) {
{ jsonrpc: '2.0', method: 'textDocument/didOpen', params: { textDocument: { uri, version: 1, languageId: 'zc', text } } },
{ jsonrpc: '2.0', id: 2, method: 'textDocument/semanticTokens/full', params: { textDocument: { uri } } },
{ jsonrpc: '2.0', method: 'textDocument/didChange', params: { textDocument: { uri, version: 2 }, contentChanges: [{ text: text + '\n' }] } },
+ { jsonrpc: '2.0', id: 4, method: 'textDocument/semanticTokens/full', params: { textDocument: { uri } } },
{ jsonrpc: '2.0', method: 'textDocument/didClose', params: { textDocument: { uri } } },
{ jsonrpc: '2.0', id: 3, method: 'shutdown', params: null },
{ jsonrpc: '2.0', method: 'exit' },
@@ -34,10 +35,11 @@ for (const file of files) {
data = data.subarray(end + 4 + length);
}
const diagnostics = replies.filter(m => m.method === 'textDocument/publishDiagnostics');
- assert.strictEqual(diagnostics.length, 3, file + ': open, change, and close publish diagnostics');
+ assert.ok(diagnostics.length >= 3, file + ': open and change are checked before close, with streamed publications allowed');
const errors = diagnostics.flatMap(m => m.params.diagnostics).filter(d => d.severity === 1);
assert.deepStrictEqual(errors, [], file + ': ' + errors.map(d => (d.range.start.line + 1) + ': ' + d.message).join('\n'));
assert.ok(replies.find(m => m.id === 2).result.data.length, file + ': semantic tokens are available');
- assert.deepStrictEqual(diagnostics[2].params.diagnostics, [], 'close clears diagnostics');
+ assert.ok(replies.find(m => m.id === 4).result.data.length, file + ': the changed source also has semantic tokens');
+ assert.deepStrictEqual(diagnostics.at(-1).params.diagnostics, [], 'close clears diagnostics');
console.log('ok editor open, highlight, change, and close: ' + file);
}