mirror of
				https://github.com/rust-lang/rust-analyzer.git
				synced 2025-10-31 12:04:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			140 lines
		
	
	
	
		
			4.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
	
		
			4.4 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,
 | |
|         };
 | |
|     }
 | |
| }
 | 
