Files
bun.sh/test/bundler/compile-argv.test.ts
Jarred Sumner 9411c62756 Make the bundler tests use the API by default in most cases (#22646)
### What does this PR do?

This branch:
> Ran 1600 tests across 46 files. [63.24s]

Main:
> Ran 1600 tests across 46 files. [137.05s]

This makes the bundler tests run about 60 seconds faster 

### How did you verify your code works?
2025-09-14 02:27:53 -07:00

179 lines
6.6 KiB
TypeScript

import { describe } from "bun:test";
import { itBundled } from "./expectBundled";
describe("bundler", () => {
// Test that the --compile-exec-argv flag works for both runtime processing and execArgv
itBundled("compile/CompileExecArgvDualBehavior", {
compile: {
execArgv: ["--title=CompileExecArgvDualBehavior", "--smol"],
},
backend: "cli",
files: {
"/entry.ts": /* js */ `
// Test that --compile-exec-argv both processes flags AND populates execArgv
console.log("execArgv:", JSON.stringify(process.execArgv));
console.log("argv:", JSON.stringify(process.argv));
if (process.argv.findIndex(arg => arg === "runtime") === -1) {
console.error("FAIL: runtime not found in argv");
process.exit(1);
}
if (process.argv.findIndex(arg => arg === "test") === -1) {
console.error("FAIL: test not found in argv");
process.exit(1);
}
if (process.execArgv.findIndex(arg => arg === "--title=CompileExecArgvDualBehavior") === -1) {
console.error("FAIL: --title=CompileExecArgvDualBehavior not found in execArgv");
process.exit(1);
}
if (process.execArgv.findIndex(arg => arg === "--smol") === -1) {
console.error("FAIL: --smol not found in execArgv");
process.exit(1);
}
if (process.title !== "CompileExecArgvDualBehavior") {
console.error("FAIL: process.title mismatch. Expected: CompileExecArgvDualBehavior, Got:", process.title);
process.exit(1);
}
console.log("SUCCESS: process.title and process.execArgv are both set correctly");
`,
},
run: {
args: ["runtime", "test"],
stdout: /SUCCESS: process.title and process.execArgv are both set correctly/,
},
});
// Test that exec argv options don't leak into process.argv when no user arguments are provided
itBundled("compile/CompileExecArgvNoLeak", {
compile: {
execArgv: ["--user-agent=test-agent", "--smol"],
},
backend: "cli",
files: {
"/entry.ts": /* js */ `
// Test that compile-exec-argv options don't appear in process.argv
console.log("execArgv:", JSON.stringify(process.execArgv));
console.log("argv:", JSON.stringify(process.argv));
// Check that execArgv contains the expected options
if (process.execArgv.length !== 2) {
console.error("FAIL: Expected exactly 2 items in execArgv, got", process.execArgv.length);
process.exit(1);
}
if (process.execArgv[0] !== "--user-agent=test-agent") {
console.error("FAIL: Expected --user-agent=test-agent in execArgv[0], got", process.execArgv[0]);
process.exit(1);
}
if (process.execArgv[1] !== "--smol") {
console.error("FAIL: Expected --smol in execArgv[1], got", process.execArgv[1]);
process.exit(1);
}
// Check that argv only contains the executable and script name, NOT the exec argv options
if (process.argv.length !== 2) {
console.error("FAIL: Expected exactly 2 items in argv (executable and script), got", process.argv.length, "items:", process.argv);
process.exit(1);
}
// argv[0] should be "bun" for standalone executables
if (process.argv[0] !== "bun") {
console.error("FAIL: Expected argv[0] to be 'bun', got", process.argv[0]);
process.exit(1);
}
// argv[1] should be the script path (contains the bundle path)
if (!process.argv[1].includes("bunfs")) {
console.error("FAIL: Expected argv[1] to contain 'bunfs' path, got", process.argv[1]);
process.exit(1);
}
// Make sure exec argv options are NOT in process.argv
for (const arg of process.argv) {
if (arg.includes("--user-agent") || arg === "--smol") {
console.error("FAIL: exec argv option leaked into process.argv:", arg);
process.exit(1);
}
}
console.log("SUCCESS: exec argv options are properly separated from process.argv");
`,
},
run: {
// No user arguments provided - this is the key test case
args: [],
stdout: /SUCCESS: exec argv options are properly separated from process.argv/,
},
});
// Test that user arguments are properly passed through when exec argv is present
itBundled("compile/CompileExecArgvWithUserArgs", {
compile: {
execArgv: ["--user-agent=test-agent", "--smol"],
},
backend: "cli",
files: {
"/entry.ts": /* js */ `
// Test that user arguments are properly included when exec argv is present
console.log("execArgv:", JSON.stringify(process.execArgv));
console.log("argv:", JSON.stringify(process.argv));
// Check execArgv
if (process.execArgv.length !== 2) {
console.error("FAIL: Expected exactly 2 items in execArgv, got", process.execArgv.length);
process.exit(1);
}
if (process.execArgv[0] !== "--user-agent=test-agent" || process.execArgv[1] !== "--smol") {
console.error("FAIL: Unexpected execArgv:", process.execArgv);
process.exit(1);
}
// Check argv contains executable, script, and user arguments
if (process.argv.length !== 4) {
console.error("FAIL: Expected exactly 4 items in argv, got", process.argv.length, "items:", process.argv);
process.exit(1);
}
if (process.argv[0] !== "bun") {
console.error("FAIL: Expected argv[0] to be 'bun', got", process.argv[0]);
process.exit(1);
}
if (!process.argv[1].includes("bunfs")) {
console.error("FAIL: Expected argv[1] to contain 'bunfs' path, got", process.argv[1]);
process.exit(1);
}
if (process.argv[2] !== "user-arg1") {
console.error("FAIL: Expected argv[2] to be 'user-arg1', got", process.argv[2]);
process.exit(1);
}
if (process.argv[3] !== "user-arg2") {
console.error("FAIL: Expected argv[3] to be 'user-arg2', got", process.argv[3]);
process.exit(1);
}
// Make sure exec argv options are NOT mixed with user arguments
if (process.argv.includes("--user-agent=test-agent") || process.argv.includes("--smol")) {
console.error("FAIL: exec argv options leaked into process.argv");
process.exit(1);
}
console.log("SUCCESS: user arguments properly passed with exec argv present");
`,
},
run: {
args: ["user-arg1", "user-arg2"],
stdout: /SUCCESS: user arguments properly passed with exec argv present/,
},
});
});