mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
127 lines
2.6 KiB
TypeScript
127 lines
2.6 KiB
TypeScript
import { spawnSync } from "bun";
|
|
import { beforeAll, beforeEach, expect, setDefaultTimeout, test } from "bun:test";
|
|
import { mkdirSync, writeFileSync } from "fs";
|
|
import { bunEnv, bunExe, tmpdirSync } from "harness";
|
|
|
|
let cwd: string;
|
|
|
|
beforeAll(() => {
|
|
setDefaultTimeout(1000 * 60 * 5);
|
|
});
|
|
|
|
beforeEach(() => {
|
|
cwd = tmpdirSync();
|
|
});
|
|
|
|
test("bad workspace path", () => {
|
|
writeFileSync(
|
|
`${cwd}/package.json`,
|
|
JSON.stringify(
|
|
{
|
|
name: "hey",
|
|
workspaces: ["i-dont-exist"],
|
|
},
|
|
null,
|
|
2,
|
|
),
|
|
);
|
|
const { stderr, exitCode } = spawnSync({
|
|
cmd: [bunExe(), "install"],
|
|
cwd,
|
|
env: bunEnv,
|
|
stderr: "pipe",
|
|
stdout: "pipe",
|
|
});
|
|
const text = stderr!.toString();
|
|
|
|
expect(text).toContain('Workspace not found "i-dont-exist"');
|
|
|
|
expect(exitCode).toBe(1);
|
|
});
|
|
|
|
test("workspace with ./ should not crash", () => {
|
|
writeFileSync(
|
|
`${cwd}/package.json`,
|
|
JSON.stringify(
|
|
{
|
|
name: "my-app",
|
|
version: "1.0.0",
|
|
workspaces: ["./", "some-workspace"],
|
|
devDependencies: {
|
|
"@eslint/js": "^9.28.0",
|
|
},
|
|
},
|
|
null,
|
|
2,
|
|
),
|
|
);
|
|
mkdirSync(`${cwd}/some-workspace`);
|
|
writeFileSync(
|
|
`${cwd}/some-workspace/package.json`,
|
|
JSON.stringify(
|
|
{
|
|
name: "some-workspace",
|
|
version: "1.0.0",
|
|
},
|
|
null,
|
|
2,
|
|
),
|
|
);
|
|
const { stderr, exitCode } = spawnSync({
|
|
cmd: [bunExe(), "install"],
|
|
cwd,
|
|
env: bunEnv,
|
|
stderr: "pipe",
|
|
stdout: "pipe",
|
|
});
|
|
const text = stderr!.toString();
|
|
|
|
// Should not crash, should succeed
|
|
expect(exitCode).toBe(0);
|
|
expect(text).not.toContain("panic");
|
|
expect(text).not.toContain("Internal assertion failure");
|
|
});
|
|
|
|
test("workspace with .\\ should not crash", () => {
|
|
writeFileSync(
|
|
`${cwd}/package.json`,
|
|
JSON.stringify(
|
|
{
|
|
name: "my-app",
|
|
version: "1.0.0",
|
|
workspaces: [".\\", "some-workspace"],
|
|
devDependencies: {
|
|
"@eslint/js": "^9.28.0",
|
|
},
|
|
},
|
|
null,
|
|
2,
|
|
),
|
|
);
|
|
mkdirSync(`${cwd}/some-workspace`);
|
|
writeFileSync(
|
|
`${cwd}/some-workspace/package.json`,
|
|
JSON.stringify(
|
|
{
|
|
name: "some-workspace",
|
|
version: "1.0.0",
|
|
},
|
|
null,
|
|
2,
|
|
),
|
|
);
|
|
const { stderr, exitCode } = spawnSync({
|
|
cmd: [bunExe(), "install"],
|
|
cwd,
|
|
env: bunEnv,
|
|
stderr: "pipe",
|
|
stdout: "pipe",
|
|
});
|
|
const text = stderr!.toString();
|
|
|
|
// Should not crash, should succeed
|
|
expect(exitCode).toBe(0);
|
|
expect(text).not.toContain("panic");
|
|
expect(text).not.toContain("Internal assertion failure");
|
|
});
|