From 5abb99457b823313f785a7456343a090990d2e16 Mon Sep 17 00:00:00 2001 From: Luna Phipps-Costin Date: Sat, 19 Apr 2025 17:30:01 -0400 Subject: [PATCH 1/2] Remove asynchrony from commands --- src/state/extension.ts | 6 +++--- test/suite/utils.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/state/extension.ts b/src/state/extension.ts index 6085d262..57f4832a 100644 --- a/src/state/extension.ts +++ b/src/state/extension.ts @@ -398,15 +398,15 @@ export class Extension implements vscode.Disposable { * Runs the given async function, displaying an error message and returning * the specified value if it throws an exception during its execution. */ - public async runPromiseSafely( - f: () => Thenable, + public runPromiseSafely( + f: () => T, errorValue: () => T, errorMessage: (error: any) => string, ) { this.dismissErrorMessage(); try { - return await f(); + return f(); } catch (e) { if (!(e instanceof CancellationError)) { this.showDismissibleErrorMessage(errorMessage(e)); diff --git a/test/suite/utils.ts b/test/suite/utils.ts index 29bd28d6..6cd9abcc 100644 --- a/test/suite/utils.ts +++ b/test/suite/utils.ts @@ -82,9 +82,9 @@ export async function executeCommand(command: string, ...args: readonly any[]) { const extension = vscode.extensions.getExtension<{ extension: Extension }>("gregoire.dance")!.exports.extension; - extension.runPromiseSafely = async (f) => { + extension.runPromiseSafely = (f) => { try { - return await f(); + return f(); } catch (e) { error = e; throw e; From 4fe0b50dea2a4415001b170e23a245ea0a459b14 Mon Sep 17 00:00:00 2001 From: Luna Phipps-Costin Date: Sat, 19 Apr 2025 17:30:24 -0400 Subject: [PATCH 2/2] Test synchrony (may be flaky) --- test/suite/commands/synchrony.md | 227 +++++++++++++++++++++++ test/suite/commands/synchrony.test.ts | 252 ++++++++++++++++++++++++++ 2 files changed, 479 insertions(+) create mode 100644 test/suite/commands/synchrony.md create mode 100644 test/suite/commands/synchrony.test.ts diff --git a/test/suite/commands/synchrony.md b/test/suite/commands/synchrony.md new file mode 100644 index 00000000..2e0aa383 --- /dev/null +++ b/test/suite/commands/synchrony.md @@ -0,0 +1,227 @@ +# 1 + +> behavior <- character + +``` + +^ 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +b +``` + +## 1 down +[up](#1) + +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump +- .select.down.jump + +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +b +^ 0 +``` diff --git a/test/suite/commands/synchrony.test.ts b/test/suite/commands/synchrony.test.ts new file mode 100644 index 00000000..0d945f85 --- /dev/null +++ b/test/suite/commands/synchrony.test.ts @@ -0,0 +1,252 @@ +import * as vscode from "vscode"; + +import { executeCommand, ExpectedDocument, groupTestsByParentName } from "../utils"; + +suite("./test/suite/commands/synchrony.md", function () { + // Set up document. + let document: vscode.TextDocument, + editor: vscode.TextEditor; + + this.beforeAll(async () => { + document = await vscode.workspace.openTextDocument({ language: "plaintext" }); + editor = await vscode.window.showTextDocument(document); + editor.options.insertSpaces = true; + editor.options.tabSize = 2; + + await executeCommand("dance.dev.setSelectionBehavior", { mode: "normal", value: "caret" }); + }); + + this.afterAll(async () => { + await executeCommand("workbench.action.closeActiveEditor"); + }); + + test("1 > down", async function () { + // Set-up document to be in expected initial state. + await ExpectedDocument.apply(editor, 6, String.raw` + + ^ 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + b + `); + + // Perform all operations. + await executeCommand("dance.dev.setSelectionBehavior", { mode: "normal", value: "character" }); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.select.down.jump"); + await executeCommand("dance.dev.setSelectionBehavior", { mode: "normal", value: "caret" }); + + // Ensure document is as expected. + ExpectedDocument.assertEquals(editor, "./test/suite/commands/synchrony.md:79:1", 6, String.raw` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + b + ^ 0 + `); + }); + + groupTestsByParentName(this); +});