blob: 900bb2779d5651da010510bd96d1c5af69e848b8 [file]
import * as assert from "node:assert/strict";
import {
cargoNewArgs,
determineNewProjectOpenAction,
validateNewProjectName,
} from "../../src/new_project";
import type { Context } from ".";
export async function getTests(ctx: Context) {
await ctx.suite("New project command", (suite) => {
suite.addTest("rejects empty project name", async () => {
assert.equal(validateNewProjectName("", []), "Project name cannot be empty.");
assert.equal(validateNewProjectName(" ", []), "Project name cannot be empty.");
});
suite.addTest("rejects dot project names", async () => {
assert.equal(validateNewProjectName(".", []), "Project name cannot be '.' or '..'.");
assert.equal(validateNewProjectName("..", []), "Project name cannot be '.' or '..'.");
});
suite.addTest("rejects path separators", async () => {
assert.equal(
validateNewProjectName("foo/bar", []),
"Project name cannot contain '/' or '\\' characters.",
);
assert.equal(
validateNewProjectName("foo\\bar", []),
"Project name cannot contain '/' or '\\' characters.",
);
});
suite.addTest("rejects invalid Cargo package name characters", async () => {
assert.equal(
validateNewProjectName("foo.bar", []),
"Project name can contain only alphanumeric characters, '-' or '_'.",
);
assert.equal(
validateNewProjectName("foo bar", []),
"Project name can contain only alphanumeric characters, '-' or '_'.",
);
assert.equal(
validateNewProjectName("foo+bar", []),
"Project name can contain only alphanumeric characters, '-' or '_'.",
);
});
suite.addTest("rejects existing child folder collisions", async () => {
assert.equal(
validateNewProjectName("demo", ["demo"]),
"A file or folder with this name already exists.",
);
});
suite.addTest("accepts a normal project name", async () => {
assert.equal(validateNewProjectName("demo-project", []), undefined);
});
suite.addTest("resolves addToWorkspace fallback without workspace", async () => {
assert.equal(determineNewProjectOpenAction("addToWorkspace", false), "open");
});
suite.addTest("keeps addToWorkspace when workspace exists", async () => {
assert.equal(determineNewProjectOpenAction("addToWorkspace", true), "addToWorkspace");
});
suite.addTest("defaults to ask for unknown values", async () => {
assert.equal(determineNewProjectOpenAction(undefined, true), "ask");
assert.equal(determineNewProjectOpenAction("ask", true), "ask");
});
suite.addTest("builds binary cargo args", async () => {
assert.deepEqual(cargoNewArgs("bin", "demo"), ["new", "--bin", "demo"]);
});
suite.addTest("builds library cargo args", async () => {
assert.deepEqual(cargoNewArgs("lib", "demo"), ["new", "--lib", "demo"]);
});
});
}