Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'editors/code/tests/unit/tasks.test.ts')
-rw-r--r--editors/code/tests/unit/tasks.test.ts139
1 files changed, 139 insertions, 0 deletions
diff --git a/editors/code/tests/unit/tasks.test.ts b/editors/code/tests/unit/tasks.test.ts
new file mode 100644
index 0000000000..9bccaaf3d4
--- /dev/null
+++ b/editors/code/tests/unit/tasks.test.ts
@@ -0,0 +1,139 @@
+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,
+ };
+ }
+}