aboutsummaryrefslogtreecommitdiff
path: root/tests/drivers/lsp_test.js
diff options
context:
space:
mode:
Diffstat (limited to 'tests/drivers/lsp_test.js')
-rw-r--r--tests/drivers/lsp_test.js8
1 files changed, 5 insertions, 3 deletions
diff --git a/tests/drivers/lsp_test.js b/tests/drivers/lsp_test.js
index ab43c41..18d8bf7 100644
--- a/tests/drivers/lsp_test.js
+++ b/tests/drivers/lsp_test.js
@@ -1,5 +1,7 @@
// protocol tests for the language server (node, no packages).
// usage: node tests/drivers/lsp_test.js path/to/zclsp
+// interpreted hosts (no jit) are far slower; ZC_TEST_TIMEOUT_SCALE stretches every deadline
+const TIMEOUT_SCALE = Number(process.env.ZC_TEST_TIMEOUT_SCALE) || 1;
const { spawnSync } = require('child_process');
const fs = require('fs');
const server = process.argv[2];
@@ -24,7 +26,7 @@ function parse(buf) {
return out;
}
function run(msgs) {
- const r = spawnSync(server, [], { input: Buffer.concat(msgs.map(frame)), timeout: 30000, maxBuffer: 1 << 28 });
+ const r = spawnSync(server, [], { input: Buffer.concat(msgs.map(frame)), timeout: 30000 * TIMEOUT_SCALE, maxBuffer: 1 << 28 });
return { code: r.status, msgs: parse(r.stdout) };
}
const init = id => ({ jsonrpc: '2.0', id, method: 'initialize', params: {} });
@@ -173,7 +175,7 @@ check(hv && hv.includes('leaves the function with a value'), 'a keyword shows wh
const builtinSource = 'include rt; fn main() {\n\trt.put_c(32);\n\treturn 0;\n}\n';
hv = hover(builtinSource, 1, at(builtinSource, 1, 'put_c'));
check(hv && hv.includes('put_c('), 'a built-in function shows its signature', hv);
-const kwsrc = 'include rt; fn main() {\n\tint* p = new(int);\n\trt.free(p);\n\treturn 0;\n}\n';
+const kwsrc = 'include rt; fn main() {\n\tint* p = rt.new(int);\n\trt.free(p);\n\treturn 0;\n}\n';
hv = hover(kwsrc, 1, at(kwsrc, 1, 'new'));
check(hv && hv.includes('new(T)') && hv.includes('fresh heap object') && hv.includes('owns it'), 'hover on new shows its form and ownership behavior', hv);
hv = hover(kwsrc, 2, at(kwsrc, 2, 'free'));
@@ -209,7 +211,7 @@ check(r.code === 0 && r.msgs.some(m => m.id === 9 && m.result === null), 'shutdo
// the corpus: every valid program checks clean, every bad one is rejected with its message
function cli(file) {
- const r = spawnSync(server, [], { input: fs.readFileSync(file), timeout: 30000 });
+ const r = spawnSync(server, [], { input: fs.readFileSync(file), timeout: 30000 * TIMEOUT_SCALE });
return r.stdout.toString();
}
let clean = 0, dirty = [];