mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-28 14:03:35 +00:00
139 lines
4.3 KiB
TypeScript
139 lines
4.3 KiB
TypeScript
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,
|
|
};
|
|
}
|
|
}
|