|
11 | 11 | // SPDX-License-Identifier: Apache-2.0 |
12 | 12 | // |
13 | 13 | //===----------------------------------------------------------------------===// |
14 | | -import * as assert from "assert"; |
| 14 | +import { expect } from "chai"; |
| 15 | +import { match } from "sinon"; |
15 | 16 | import * as vscode from "vscode"; |
16 | 17 |
|
| 18 | +import { BackgroundCompilation } from "@src/BackgroundCompilation"; |
| 19 | +import { FolderContext } from "@src/FolderContext"; |
17 | 20 | import { WorkspaceContext } from "@src/WorkspaceContext"; |
| 21 | +import configuration from "@src/configuration"; |
| 22 | +import { getBuildAllTask } from "@src/tasks/SwiftTaskProvider"; |
18 | 23 |
|
| 24 | +import { mockGlobalObject, mockGlobalValue } from "../MockUtils"; |
19 | 25 | import { testAssetUri } from "../fixtures"; |
20 | 26 | import { tag } from "../tags"; |
21 | 27 | import { closeAllEditors } from "../utilities/commands"; |
22 | 28 | import { waitForNoRunningTasks } from "../utilities/tasks"; |
23 | | -import { activateExtensionForTest, updateSettings } from "./utilities/testutilities"; |
| 29 | +import { |
| 30 | + activateExtensionForTest, |
| 31 | + folderInRootWorkspace, |
| 32 | + updateSettings, |
| 33 | +} from "./utilities/testutilities"; |
24 | 34 |
|
25 | 35 | tag("large").suite("BackgroundCompilation Test Suite", () => { |
26 | 36 | let subscriptions: vscode.Disposable[]; |
27 | 37 | let workspaceContext: WorkspaceContext; |
| 38 | + let folderContext: FolderContext; |
| 39 | + let buildAllTask: vscode.Task; |
28 | 40 |
|
29 | 41 | activateExtensionForTest({ |
30 | 42 | async setup(ctx) { |
31 | 43 | subscriptions = []; |
32 | 44 | workspaceContext = ctx; |
33 | | - assert.notEqual(workspaceContext.folders.length, 0); |
| 45 | + folderContext = await folderInRootWorkspace("defaultPackage", workspaceContext); |
| 46 | + buildAllTask = await getBuildAllTask(folderContext); |
34 | 47 | return await updateSettings({ |
35 | 48 | "swift.backgroundCompilation": true, |
36 | 49 | }); |
@@ -62,4 +75,65 @@ tag("large").suite("BackgroundCompilation Test Suite", () => { |
62 | 75 | await taskStartPromise; |
63 | 76 | await waitForNoRunningTasks(); |
64 | 77 | }); |
| 78 | + |
| 79 | + suite("getTask", () => { |
| 80 | + const tasksMock = mockGlobalObject(vscode, "tasks"); |
| 81 | + let swiftTask: vscode.Task; |
| 82 | + let nonSwiftTask: vscode.Task; |
| 83 | + let backgroundConfiguration: BackgroundCompilation; |
| 84 | + const useDefaultTaskConfig = mockGlobalValue(configuration, "useDefaultTask"); |
| 85 | + |
| 86 | + setup(async () => { |
| 87 | + nonSwiftTask = new vscode.Task( |
| 88 | + { |
| 89 | + type: "shell", |
| 90 | + args: ["./build.sh"], |
| 91 | + cwd: "defaultPackage", |
| 92 | + group: { |
| 93 | + id: "build", |
| 94 | + isDefault: true, |
| 95 | + }, |
| 96 | + label: "Default build", |
| 97 | + }, |
| 98 | + folderContext.workspaceFolder, |
| 99 | + "Default build", |
| 100 | + "shell" |
| 101 | + ); |
| 102 | + swiftTask = new vscode.Task( |
| 103 | + { |
| 104 | + type: "swift", |
| 105 | + args: ["build"], |
| 106 | + cwd: "defaultPackage", |
| 107 | + group: "build", |
| 108 | + label: "swift build", |
| 109 | + }, |
| 110 | + folderContext.workspaceFolder, |
| 111 | + "Swift build", |
| 112 | + "swift" |
| 113 | + ); |
| 114 | + backgroundConfiguration = new BackgroundCompilation(folderContext); |
| 115 | + tasksMock.fetchTasks.resolves([nonSwiftTask, swiftTask, buildAllTask]); |
| 116 | + tasksMock.fetchTasks.withArgs(match.object).resolves([swiftTask, buildAllTask]); |
| 117 | + useDefaultTaskConfig.setValue(true); |
| 118 | + }); |
| 119 | + |
| 120 | + teardown(() => { |
| 121 | + backgroundConfiguration.dispose(); |
| 122 | + }); |
| 123 | + |
| 124 | + test("non-swift default task", async () => { |
| 125 | + expect(await backgroundConfiguration.getTask()).to.equal(buildAllTask); |
| 126 | + }); |
| 127 | + |
| 128 | + test("swift default task", async () => { |
| 129 | + swiftTask.group = { id: "build", isDefault: true }; |
| 130 | + expect(await backgroundConfiguration.getTask()).to.equal(swiftTask); |
| 131 | + }); |
| 132 | + |
| 133 | + test("don't use default task", async () => { |
| 134 | + useDefaultTaskConfig.setValue(false); |
| 135 | + swiftTask.group = { id: "build", isDefault: true }; |
| 136 | + expect(await backgroundConfiguration.getTask()).to.equal(buildAllTask); |
| 137 | + }); |
| 138 | + }); |
65 | 139 | }); |
0 commit comments