Skip to content

Commit 853567e

Browse files
authored
test: replace sleeps with event-driven waits (#475)
1 parent ee2ead3 commit 853567e

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

src/test/multiRoot/extension.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import type { ElixirLS } from "../../extension";
88
import { WorkspaceMode } from "../../project";
99
import {
1010
getExtension,
11-
sleep,
1211
waitForLanguageClientManagerUpdate,
12+
waitForNoLanguageClientManagerUpdate,
1313
waitForWorkspaceUpdate,
1414
} from "../utils";
1515

@@ -180,10 +180,10 @@ suite("Multi root workspace tests", () => {
180180
const fileUri = vscode.Uri.file(
181181
path.join(fixturesPath, "sample_umbrella", "apps", "child2", "mix.exs"),
182182
);
183-
const document = await vscode.workspace.openTextDocument(fileUri);
184-
await vscode.window.showTextDocument(document);
185-
186-
await sleep(3000);
183+
await waitForNoLanguageClientManagerUpdate(extension, async () => {
184+
const document = await vscode.workspace.openTextDocument(fileUri);
185+
await vscode.window.showTextDocument(document);
186+
});
187187

188188
assert.ok(!extension.exports.languageClientManager.defaultClient);
189189
assert.equal(extension.exports.languageClientManager.clients.size, 2);
@@ -196,7 +196,7 @@ suite("Multi root workspace tests", () => {
196196
vscode.workspace.updateWorkspaceFolders(addedWorkspaceFolder.index, 1);
197197
});
198198

199-
await sleep(3000);
199+
await waitForNoLanguageClientManagerUpdate(extension, () => {});
200200

201201
assert.equal(extension.exports.languageClientManager.clients.size, 2);
202202
}).timeout(30000);

src/test/utils.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,28 @@ export const waitForLanguageClientManagerUpdate = (
6363
reject(e);
6464
}
6565
});
66+
67+
export const waitForNoLanguageClientManagerUpdate = (
68+
extension: vscode.Extension<ElixirLS>,
69+
fun: () => void,
70+
timeout = 3000,
71+
) =>
72+
new Promise<void>((resolve, reject) => {
73+
const disposable = extension.exports.languageClientManager.onDidChange(
74+
() => {
75+
disposable.dispose();
76+
reject(new Error("language client manager changed"));
77+
},
78+
);
79+
try {
80+
fun();
81+
} catch (e) {
82+
disposable.dispose();
83+
reject(e);
84+
return;
85+
}
86+
setTimeout(() => {
87+
disposable.dispose();
88+
resolve();
89+
}, timeout);
90+
});

0 commit comments

Comments
 (0)