Skip to content

Commit 2314ef2

Browse files
authored
Fix the snippet test (#1551)
Cleanup and add a retry mechanism for continue
1 parent f1ca26f commit 2314ef2

File tree

1 file changed

+43
-24
lines changed

1 file changed

+43
-24
lines changed

test/integration-tests/SwiftSnippet.test.ts

Lines changed: 43 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
//===----------------------------------------------------------------------===//
1414

1515
import * as vscode from "vscode";
16-
import { testAssetPath, testAssetUri } from "../fixtures";
16+
import { testAssetUri } from "../fixtures";
1717
import { waitForNoRunningTasks } from "../utilities/tasks";
1818
import { expect } from "chai";
1919
import {
@@ -22,19 +22,14 @@ import {
2222
waitUntilDebugSessionTerminates,
2323
} from "../utilities/debug";
2424
import { Version } from "../../src/utilities/version";
25-
import { activateExtensionForSuite, folderInRootWorkspace } from "./utilities/testutilities";
25+
import {
26+
activateExtensionForSuite,
27+
folderInRootWorkspace,
28+
updateSettings,
29+
} from "./utilities/testutilities";
2630
import { WorkspaceContext } from "../../src/WorkspaceContext";
27-
import { join } from "path";
2831
import { closeAllEditors } from "../utilities/commands";
29-
30-
function normalizePath(...segments: string[]): string {
31-
let path = join(...segments);
32-
if (process.platform === "win32") {
33-
path = path.endsWith(".exe") ? path : path + ".exe";
34-
path = path.replace(/\//g, "\\");
35-
}
36-
return path.toLocaleLowerCase(); // Windows may use d:\ or D:\
37-
}
32+
import { Commands } from "../../src/commands";
3833

3934
suite("SwiftSnippet Test Suite @slow", function () {
4035
this.timeout(180000);
@@ -44,20 +39,24 @@ suite("SwiftSnippet Test Suite @slow", function () {
4439
new vscode.SourceBreakpoint(new vscode.Location(uri, new vscode.Position(2, 0))),
4540
];
4641
let workspaceContext: WorkspaceContext;
42+
let resetSettings: (() => Promise<void>) | undefined;
4743

4844
activateExtensionForSuite({
4945
async setup(ctx) {
5046
workspaceContext = ctx;
5147

5248
const folder = await folderInRootWorkspace("defaultPackage", workspaceContext);
53-
if (folder.toolchain.swiftVersion.isLessThan(new Version(5, 9, 0))) {
49+
if (folder.toolchain.swiftVersion.isLessThan(new Version(5, 10, 0))) {
5450
this.skip();
5551
}
52+
resetSettings = await updateSettings({
53+
"swift.debugger.debugAdapter": "lldb-dap",
54+
});
5655
await waitForNoRunningTasks();
5756

5857
// File needs to be open for command to be enabled
59-
const doc = await vscode.workspace.openTextDocument(uri.fsPath);
60-
await vscode.window.showTextDocument(doc);
58+
await workspaceContext.focusFolder(folder);
59+
await vscode.window.showTextDocument(uri);
6160

6261
// Set a breakpoint
6362
vscode.debug.addBreakpoints(breakpoints);
@@ -66,19 +65,24 @@ suite("SwiftSnippet Test Suite @slow", function () {
6665
});
6766

6867
suiteTeardown(async () => {
69-
closeAllEditors();
68+
await closeAllEditors();
7069
vscode.debug.removeBreakpoints(breakpoints);
70+
if (resetSettings) {
71+
await resetSettings();
72+
}
7173
});
7274

7375
test("Run `Swift: Run Swift Snippet` command for snippet file", async () => {
7476
const sessionPromise = waitUntilDebugSessionTerminates("Run hello");
7577

76-
const succeeded = await vscode.commands.executeCommand("swift.runSnippet");
78+
const succeeded = await vscode.commands.executeCommand(Commands.RUN_SNIPPET, "hello");
7779

7880
expect(succeeded).to.be.true;
7981
const session = await sessionPromise;
80-
expect(normalizePath(session.configuration.program)).to.equal(
81-
normalizePath(testAssetPath("defaultPackage"), ".build", "debug", "hello")
82+
expect(vscode.Uri.file(session.configuration.program).fsPath).to.equal(
83+
testAssetUri(
84+
"defaultPackage/.build/debug/hello" + (process.platform === "win32" ? ".exe" : "")
85+
).fsPath
8286
);
8387
expect(session.configuration).to.have.property("noDebug", true);
8488
});
@@ -91,16 +95,31 @@ suite("SwiftSnippet Test Suite @slow", function () {
9195
);
9296
const sessionPromise = waitUntilDebugSessionTerminates("Run hello");
9397

94-
const succeeded = vscode.commands.executeCommand("swift.debugSnippet");
98+
const succeededPromise: Thenable<boolean> = vscode.commands.executeCommand(
99+
Commands.DEBUG_SNIPPET,
100+
"hello"
101+
);
95102

96103
// Once bp is hit, continue
97-
await bpPromise.then(() => continueSession());
104+
await bpPromise;
105+
let succeeded = false;
106+
succeededPromise.then(s => (succeeded = s));
107+
while (!succeeded) {
108+
try {
109+
await continueSession();
110+
} catch {
111+
// Ignore
112+
}
113+
await new Promise(r => setTimeout(r, 500));
114+
}
98115

99-
await expect(succeeded).to.eventually.be.true;
116+
expect(succeeded).to.be.true;
100117

101118
const session = await sessionPromise;
102-
expect(normalizePath(session.configuration.program)).to.equal(
103-
normalizePath(testAssetPath("defaultPackage"), ".build", "debug", "hello")
119+
expect(vscode.Uri.file(session.configuration.program).fsPath).to.equal(
120+
testAssetUri(
121+
"defaultPackage/.build/debug/hello" + (process.platform === "win32" ? ".exe" : "")
122+
).fsPath
104123
);
105124
expect(session.configuration).to.not.have.property("noDebug");
106125
});

0 commit comments

Comments
 (0)