|
11 | 11 | // SPDX-License-Identifier: Apache-2.0
|
12 | 12 | //
|
13 | 13 | //===----------------------------------------------------------------------===//
|
14 |
| -import * as assert from "assert"; |
| 14 | +import { expect } from "chai"; |
15 | 15 | import * as vscode from "vscode";
|
16 | 16 |
|
| 17 | +import { BackgroundCompilation } from "@src/BackgroundCompilation"; |
| 18 | +import { FolderContext } from "@src/FolderContext"; |
17 | 19 | import { WorkspaceContext } from "@src/WorkspaceContext";
|
| 20 | +import { createSwiftTask, getBuildAllTask } from "@src/tasks/SwiftTaskProvider"; |
18 | 21 |
|
| 22 | +import { mockGlobalObject } from "../MockUtils"; |
19 | 23 | import { testAssetUri } from "../fixtures";
|
20 | 24 | import { tag } from "../tags";
|
21 | 25 | import { closeAllEditors } from "../utilities/commands";
|
22 | 26 | import { waitForNoRunningTasks } from "../utilities/tasks";
|
23 |
| -import { activateExtensionForTest, updateSettings } from "./utilities/testutilities"; |
| 27 | +import { |
| 28 | + activateExtensionForSuite, |
| 29 | + folderInRootWorkspace, |
| 30 | + updateSettings, |
| 31 | +} from "./utilities/testutilities"; |
24 | 32 |
|
25 | 33 | tag("large").suite("BackgroundCompilation Test Suite", () => {
|
26 |
| - let subscriptions: vscode.Disposable[]; |
27 | 34 | let workspaceContext: WorkspaceContext;
|
| 35 | + let folderContext: FolderContext; |
| 36 | + let buildAllTask: vscode.Task; |
28 | 37 |
|
29 |
| - activateExtensionForTest({ |
30 |
| - async setup(ctx) { |
31 |
| - subscriptions = []; |
32 |
| - workspaceContext = ctx; |
33 |
| - assert.notEqual(workspaceContext.folders.length, 0); |
34 |
| - return await updateSettings({ |
35 |
| - "swift.backgroundCompilation": true, |
| 38 | + async function setupFolder(ctx: WorkspaceContext) { |
| 39 | + workspaceContext = ctx; |
| 40 | + folderContext = await folderInRootWorkspace("defaultPackage", workspaceContext); |
| 41 | + buildAllTask = await getBuildAllTask(folderContext); |
| 42 | + } |
| 43 | + |
| 44 | + suite("build all on save", () => { |
| 45 | + let subscriptions: vscode.Disposable[]; |
| 46 | + |
| 47 | + activateExtensionForSuite({ |
| 48 | + async setup(ctx) { |
| 49 | + subscriptions = []; |
| 50 | + await setupFolder(ctx); |
| 51 | + return await updateSettings({ |
| 52 | + "swift.backgroundCompilation": true, |
| 53 | + }); |
| 54 | + }, |
| 55 | + }); |
| 56 | + |
| 57 | + suiteTeardown(async () => { |
| 58 | + subscriptions.forEach(s => s.dispose()); |
| 59 | + await closeAllEditors(); |
| 60 | + }); |
| 61 | + |
| 62 | + test("runs build task", async () => { |
| 63 | + const taskStartPromise = new Promise<void>(resolve => { |
| 64 | + subscriptions.push( |
| 65 | + vscode.tasks.onDidStartTask(e => { |
| 66 | + const task = e.execution.task; |
| 67 | + if (task.name.includes("Build All")) { |
| 68 | + resolve(); |
| 69 | + } |
| 70 | + }) |
| 71 | + ); |
36 | 72 | });
|
37 |
| - }, |
38 |
| - }); |
39 | 73 |
|
40 |
| - suiteTeardown(async () => { |
41 |
| - subscriptions.forEach(s => s.dispose()); |
42 |
| - await closeAllEditors(); |
43 |
| - }); |
| 74 | + const uri = testAssetUri("defaultPackage/Sources/PackageExe/main.swift"); |
| 75 | + const doc = await vscode.workspace.openTextDocument(uri.fsPath); |
| 76 | + await vscode.window.showTextDocument(doc); |
| 77 | + await vscode.workspace.save(uri); |
44 | 78 |
|
45 |
| - test("build all on save", async () => { |
46 |
| - const taskStartPromise = new Promise<void>(resolve => { |
47 |
| - subscriptions.push( |
48 |
| - vscode.tasks.onDidStartTask(e => { |
49 |
| - const task = e.execution.task; |
50 |
| - if (task.name.includes("Build All")) { |
51 |
| - resolve(); |
52 |
| - } |
53 |
| - }) |
54 |
| - ); |
| 79 | + await taskStartPromise; |
| 80 | + await waitForNoRunningTasks(); |
55 | 81 | });
|
| 82 | + }); |
56 | 83 |
|
57 |
| - const uri = testAssetUri("defaultPackage/Sources/PackageExe/main.swift"); |
58 |
| - const doc = await vscode.workspace.openTextDocument(uri.fsPath); |
59 |
| - await vscode.window.showTextDocument(doc); |
60 |
| - await vscode.workspace.save(uri); |
| 84 | + suite("getTask", () => { |
| 85 | + const tasksMock = mockGlobalObject(vscode, "tasks"); |
| 86 | + let swiftTask: vscode.Task; |
| 87 | + let nonSwiftTask: vscode.Task; |
| 88 | + let backgroundConfiguration: BackgroundCompilation; |
| 89 | + |
| 90 | + suite("useDefaultTask", () => { |
| 91 | + activateExtensionForSuite({ |
| 92 | + async setup(ctx) { |
| 93 | + await setupFolder(ctx); |
| 94 | + nonSwiftTask = new vscode.Task( |
| 95 | + { |
| 96 | + type: "shell", |
| 97 | + command: ["swift"], |
| 98 | + args: ["build"], |
| 99 | + group: { |
| 100 | + id: "build", |
| 101 | + isDefault: true, |
| 102 | + }, |
| 103 | + label: "shell build", |
| 104 | + }, |
| 105 | + folderContext.workspaceFolder, |
| 106 | + "shell build", |
| 107 | + "Workspace", |
| 108 | + new vscode.ShellExecution("", { |
| 109 | + cwd: testAssetUri("defaultPackage").fsPath, |
| 110 | + }) |
| 111 | + ); |
| 112 | + swiftTask = createSwiftTask( |
| 113 | + ["build"], |
| 114 | + "swift build", |
| 115 | + { |
| 116 | + cwd: testAssetUri("defaultPackage"), |
| 117 | + scope: folderContext.workspaceFolder, |
| 118 | + }, |
| 119 | + folderContext.toolchain |
| 120 | + ); |
| 121 | + swiftTask.source = "Workspace"; |
| 122 | + return await updateSettings({ |
| 123 | + "swift.backgroundCompilation": { |
| 124 | + enabled: true, |
| 125 | + useDefaultTask: true, |
| 126 | + }, |
| 127 | + }); |
| 128 | + }, |
| 129 | + }); |
61 | 130 |
|
62 |
| - await taskStartPromise; |
63 |
| - await waitForNoRunningTasks(); |
| 131 | + setup(() => { |
| 132 | + tasksMock.fetchTasks.withArgs().resolves([nonSwiftTask, swiftTask, buildAllTask]); |
| 133 | + backgroundConfiguration = new BackgroundCompilation(folderContext); |
| 134 | + }); |
| 135 | + |
| 136 | + teardown(() => { |
| 137 | + backgroundConfiguration.dispose(); |
| 138 | + }); |
| 139 | + |
| 140 | + test("swift default task", async () => { |
| 141 | + swiftTask.group = { id: "build", isDefault: true }; |
| 142 | + expect(await backgroundConfiguration.getTask()).to.equal(swiftTask); |
| 143 | + }); |
| 144 | + |
| 145 | + test("non-swift default task", async () => { |
| 146 | + nonSwiftTask.group = { id: "build", isDefault: true }; |
| 147 | + expect(await backgroundConfiguration.getTask()).to.equal(nonSwiftTask); |
| 148 | + }); |
| 149 | + |
| 150 | + test("don't use default task", async () => { |
| 151 | + swiftTask.group = { id: "build", isDefault: true }; |
| 152 | + await vscode.workspace.getConfiguration("swift").update("backgroundCompilation", { |
| 153 | + enabled: true, |
| 154 | + useDefaultTask: false, |
| 155 | + }); |
| 156 | + expect(await backgroundConfiguration.getTask()).to.equal(buildAllTask); |
| 157 | + }); |
| 158 | + }); |
64 | 159 | });
|
65 | 160 | });
|
0 commit comments