| import type { Context } from "."; |
| import * as vscode from "vscode"; |
| import * as assert from "assert"; |
| import { targetToExecution } from "../../src/tasks"; |
| |
| export async function getTests(ctx: Context) { |
| await ctx.suite("Tasks", (suite) => { |
| suite.addTest("cargo targetToExecution", async () => { |
| assert.deepStrictEqual( |
| await targetToExecution({ |
| type: "cargo", |
| command: "check", |
| args: ["foo"], |
| }).then(executionToSimple), |
| { |
| process: "cargo", |
| args: ["check", "foo"], |
| }, |
| ); |
| }); |
| |
| suite.addTest("shell targetToExecution", async () => { |
| assert.deepStrictEqual( |
| await targetToExecution({ |
| type: "shell", |
| command: "thing", |
| args: ["foo"], |
| }).then(executionToSimple), |
| { |
| process: "thing", |
| args: ["foo"], |
| }, |
| ); |
| }); |
| |
| suite.addTest("base tasks", async () => { |
| const tasks = await vscode.tasks.fetchTasks({ type: "cargo" }); |
| const expectedTasks = [ |
| { |
| definition: { type: "cargo", command: "build" }, |
| name: "cargo build", |
| execution: { |
| process: "cargo", |
| args: ["build"], |
| }, |
| }, |
| { |
| definition: { |
| type: "cargo", |
| command: "check", |
| }, |
| name: "cargo check", |
| execution: { |
| process: "cargo", |
| args: ["check"], |
| }, |
| }, |
| { |
| definition: { type: "cargo", command: "clippy" }, |
| name: "cargo clippy", |
| execution: { |
| process: "cargo", |
| args: ["clippy"], |
| }, |
| }, |
| { |
| definition: { type: "cargo", command: "test" }, |
| name: "cargo test", |
| execution: { |
| process: "cargo", |
| args: ["test"], |
| }, |
| }, |
| { |
| definition: { |
| type: "cargo", |
| command: "clean", |
| }, |
| name: "cargo clean", |
| execution: { |
| process: "cargo", |
| args: ["clean"], |
| }, |
| }, |
| { |
| definition: { type: "cargo", command: "run" }, |
| name: "cargo run", |
| execution: { |
| process: "cargo", |
| args: ["run"], |
| }, |
| }, |
| ]; |
| tasks.map(f).forEach((actual, i) => { |
| const expected = expectedTasks[i]; |
| assert.deepStrictEqual(actual, expected); |
| }); |
| }); |
| }); |
| } |
| |
| function f(task: vscode.Task): { |
| definition: vscode.TaskDefinition; |
| name: string; |
| execution: { |
| args: string[]; |
| } & ({ command: string } | { process: string }); |
| } { |
| const execution = executionToSimple(task.execution!); |
| |
| return { |
| definition: task.definition, |
| name: task.name, |
| execution, |
| }; |
| } |
| |
| function executionToSimple( |
| taskExecution: vscode.ProcessExecution | vscode.ShellExecution | vscode.CustomExecution, |
| ): { |
| args: string[]; |
| } & ({ command: string } | { process: string }) { |
| const exec = taskExecution as vscode.ProcessExecution | vscode.ShellExecution; |
| if (exec instanceof vscode.ShellExecution) { |
| return { |
| command: typeof exec.command === "string" ? exec.command : (exec.command?.value ?? ""), |
| args: (exec.args ?? []).map((arg) => { |
| if (typeof arg === "string") { |
| return arg; |
| } |
| return arg.value; |
| }), |
| }; |
| } else { |
| return { |
| process: exec.process, |
| args: exec.args, |
| }; |
| } |
| } |