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, }; } }