Skip to content

Commit

Permalink
feat(programmatic): allow passing custom args
Browse files Browse the repository at this point in the history
  • Loading branch information
antfu committed Sep 1, 2023
1 parent b6714ef commit 7a16514
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 49 deletions.
6 changes: 4 additions & 2 deletions src/runner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,10 @@ export interface RunnerContext {

export type Runner = (agent: Agent, args: string[], ctx?: RunnerContext) => Promise<string | undefined> | string | undefined

export async function runCli(fn: Runner, options: DetectOptions = {}) {
const args = process.argv.slice(2).filter(Boolean)
export async function runCli(fn: Runner, options: DetectOptions & { args?: string[] } = {}) {
const {
args = process.argv.slice(2).filter(Boolean),
} = options
try {
await run(fn, args, options)
}
Expand Down
76 changes: 38 additions & 38 deletions test/programmatic/__snapshots__/runCli.spec.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ exports[`lockfile > bun > na run foo 1`] = `"bun run foo"`;

exports[`lockfile > bun > ni --frozen 1`] = `"bun install --no-save"`;

exports[`lockfile > bun > ni -g foo 1`] = `"bun add -g foo"`;
exports[`lockfile > bun > ni -g foo 1`] = `"npm i -g foo"`;

exports[`lockfile > bun > ni 1`] = `"bun install"`;

Expand All @@ -20,7 +20,7 @@ exports[`lockfile > bun > nu -i 1`] = `"bun update"`;

exports[`lockfile > bun > nu 1`] = `"bun update"`;

exports[`lockfile > bun > nun -g foo 1`] = `"bun remove -g foo"`;
exports[`lockfile > bun > nun -g foo 1`] = `"npm uninstall -g foo"`;

exports[`lockfile > bun > nun foo 1`] = `"bun remove foo"`;

Expand Down Expand Up @@ -54,7 +54,7 @@ exports[`lockfile > pnpm > na run foo 1`] = `"pnpm run foo"`;

exports[`lockfile > pnpm > ni --frozen 1`] = `"pnpm i --frozen-lockfile"`;

exports[`lockfile > pnpm > ni -g foo 1`] = `"pnpm add -g foo"`;
exports[`lockfile > pnpm > ni -g foo 1`] = `"npm i -g foo"`;

exports[`lockfile > pnpm > ni 1`] = `"pnpm i"`;

Expand All @@ -68,7 +68,7 @@ exports[`lockfile > pnpm > nu -i 1`] = `"pnpm update -i"`;

exports[`lockfile > pnpm > nu 1`] = `"pnpm update"`;

exports[`lockfile > pnpm > nun -g foo 1`] = `"pnpm remove --global foo"`;
exports[`lockfile > pnpm > nun -g foo 1`] = `"npm uninstall -g foo"`;

exports[`lockfile > pnpm > nun foo 1`] = `"pnpm remove foo"`;

Expand All @@ -78,7 +78,7 @@ exports[`lockfile > pnpm@6 > na run foo 1`] = `"pnpm run foo"`;

exports[`lockfile > pnpm@6 > ni --frozen 1`] = `"pnpm i --frozen-lockfile"`;

exports[`lockfile > pnpm@6 > ni -g foo 1`] = `"pnpm add -g foo"`;
exports[`lockfile > pnpm@6 > ni -g foo 1`] = `"npm i -g foo"`;

exports[`lockfile > pnpm@6 > ni 1`] = `"pnpm i"`;

Expand All @@ -92,41 +92,41 @@ exports[`lockfile > pnpm@6 > nu -i 1`] = `"pnpm update -i"`;

exports[`lockfile > pnpm@6 > nu 1`] = `"pnpm update"`;

exports[`lockfile > pnpm@6 > nun -g foo 1`] = `"pnpm remove --global foo"`;
exports[`lockfile > pnpm@6 > nun -g foo 1`] = `"npm uninstall -g foo"`;

exports[`lockfile > pnpm@6 > nun foo 1`] = `"pnpm remove foo"`;

exports[`lockfile > unknown > na 1`] = `"npm"`;
exports[`lockfile > unknown > na 1`] = `"pnpm"`;

exports[`lockfile > unknown > na run foo 1`] = `"npm run foo"`;
exports[`lockfile > unknown > na run foo 1`] = `"pnpm run foo"`;

exports[`lockfile > unknown > ni --frozen 1`] = `"npm ci"`;
exports[`lockfile > unknown > ni --frozen 1`] = `"pnpm i --frozen-lockfile"`;

exports[`lockfile > unknown > ni -g foo 1`] = `"npm i -g foo"`;

exports[`lockfile > unknown > ni 1`] = `"npm i"`;
exports[`lockfile > unknown > ni 1`] = `"pnpm i"`;

exports[`lockfile > unknown > ni foo -D 1`] = `"npm i foo -D"`;
exports[`lockfile > unknown > ni foo -D 1`] = `"pnpm add foo -D"`;

exports[`lockfile > unknown > ni foo 1`] = `"npm i foo"`;
exports[`lockfile > unknown > ni foo 1`] = `"pnpm add foo"`;

exports[`lockfile > unknown > nlx 1`] = `"npx foo"`;
exports[`lockfile > unknown > nlx 1`] = `"pnpm dlx foo"`;

exports[`lockfile > unknown > nu -i 1`] = `"Command \\"upgrade-interactive\\" is not support by agent \\"npm\\""`;
exports[`lockfile > unknown > nu -i 1`] = `"pnpm update -i"`;

exports[`lockfile > unknown > nu 1`] = `"npm update"`;
exports[`lockfile > unknown > nu 1`] = `"pnpm update"`;

exports[`lockfile > unknown > nun -g foo 1`] = `"npm uninstall -g foo"`;

exports[`lockfile > unknown > nun foo 1`] = `"npm uninstall foo"`;
exports[`lockfile > unknown > nun foo 1`] = `"pnpm remove foo"`;

exports[`lockfile > yarn > na 1`] = `"yarn"`;

exports[`lockfile > yarn > na run foo 1`] = `"yarn run foo"`;

exports[`lockfile > yarn > ni --frozen 1`] = `"yarn install --frozen-lockfile"`;

exports[`lockfile > yarn > ni -g foo 1`] = `"yarn global add foo"`;
exports[`lockfile > yarn > ni -g foo 1`] = `"npm i -g foo"`;

exports[`lockfile > yarn > ni 1`] = `"yarn install"`;

Expand All @@ -140,7 +140,7 @@ exports[`lockfile > yarn > nu -i 1`] = `"yarn upgrade-interactive"`;

exports[`lockfile > yarn > nu 1`] = `"yarn upgrade"`;

exports[`lockfile > yarn > nun -g foo 1`] = `"yarn global remove foo"`;
exports[`lockfile > yarn > nun -g foo 1`] = `"npm uninstall -g foo"`;

exports[`lockfile > yarn > nun foo 1`] = `"yarn remove foo"`;

Expand All @@ -150,7 +150,7 @@ exports[`lockfile > yarn@berry > na run foo 1`] = `"yarn run foo"`;

exports[`lockfile > yarn@berry > ni --frozen 1`] = `"yarn install --frozen-lockfile"`;

exports[`lockfile > yarn@berry > ni -g foo 1`] = `"yarn global add foo"`;
exports[`lockfile > yarn@berry > ni -g foo 1`] = `"npm i -g foo"`;

exports[`lockfile > yarn@berry > ni 1`] = `"yarn install"`;

Expand All @@ -164,7 +164,7 @@ exports[`lockfile > yarn@berry > nu -i 1`] = `"yarn upgrade-interactive"`;

exports[`lockfile > yarn@berry > nu 1`] = `"yarn upgrade"`;

exports[`lockfile > yarn@berry > nun -g foo 1`] = `"yarn global remove foo"`;
exports[`lockfile > yarn@berry > nun -g foo 1`] = `"npm uninstall -g foo"`;

exports[`lockfile > yarn@berry > nun foo 1`] = `"yarn remove foo"`;

Expand All @@ -174,7 +174,7 @@ exports[`packager > bun > na run foo 1`] = `"bun run foo"`;

exports[`packager > bun > ni --frozen 1`] = `"bun install --no-save"`;

exports[`packager > bun > ni -g foo 1`] = `"bun add -g foo"`;
exports[`packager > bun > ni -g foo 1`] = `"npm i -g foo"`;

exports[`packager > bun > ni 1`] = `"bun install"`;

Expand All @@ -188,7 +188,7 @@ exports[`packager > bun > nu -i 1`] = `"bun update"`;

exports[`packager > bun > nu 1`] = `"bun update"`;

exports[`packager > bun > nun -g foo 1`] = `"bun remove -g foo"`;
exports[`packager > bun > nun -g foo 1`] = `"npm uninstall -g foo"`;

exports[`packager > bun > nun foo 1`] = `"bun remove foo"`;

Expand Down Expand Up @@ -222,7 +222,7 @@ exports[`packager > pnpm > na run foo 1`] = `"pnpm run foo"`;

exports[`packager > pnpm > ni --frozen 1`] = `"pnpm i --frozen-lockfile"`;

exports[`packager > pnpm > ni -g foo 1`] = `"pnpm add -g foo"`;
exports[`packager > pnpm > ni -g foo 1`] = `"npm i -g foo"`;

exports[`packager > pnpm > ni 1`] = `"pnpm i"`;

Expand All @@ -236,7 +236,7 @@ exports[`packager > pnpm > nu -i 1`] = `"pnpm update -i"`;

exports[`packager > pnpm > nu 1`] = `"pnpm update"`;

exports[`packager > pnpm > nun -g foo 1`] = `"pnpm remove --global foo"`;
exports[`packager > pnpm > nun -g foo 1`] = `"npm uninstall -g foo"`;

exports[`packager > pnpm > nun foo 1`] = `"pnpm remove foo"`;

Expand All @@ -246,7 +246,7 @@ exports[`packager > pnpm@6 > na run foo 1`] = `"pnpm run foo"`;

exports[`packager > pnpm@6 > ni --frozen 1`] = `"pnpm i --frozen-lockfile"`;

exports[`packager > pnpm@6 > ni -g foo 1`] = `"pnpm add -g foo"`;
exports[`packager > pnpm@6 > ni -g foo 1`] = `"npm i -g foo"`;

exports[`packager > pnpm@6 > ni 1`] = `"pnpm i"`;

Expand All @@ -260,41 +260,41 @@ exports[`packager > pnpm@6 > nu -i 1`] = `"pnpm update -i"`;

exports[`packager > pnpm@6 > nu 1`] = `"pnpm update"`;

exports[`packager > pnpm@6 > nun -g foo 1`] = `"pnpm remove --global foo"`;
exports[`packager > pnpm@6 > nun -g foo 1`] = `"npm uninstall -g foo"`;

exports[`packager > pnpm@6 > nun foo 1`] = `"pnpm remove foo"`;

exports[`packager > unknown > na 1`] = `"npm"`;
exports[`packager > unknown > na 1`] = `"pnpm"`;

exports[`packager > unknown > na run foo 1`] = `"npm run foo"`;
exports[`packager > unknown > na run foo 1`] = `"pnpm run foo"`;

exports[`packager > unknown > ni --frozen 1`] = `"npm ci"`;
exports[`packager > unknown > ni --frozen 1`] = `"pnpm i --frozen-lockfile"`;

exports[`packager > unknown > ni -g foo 1`] = `"npm i -g foo"`;

exports[`packager > unknown > ni 1`] = `"npm i"`;
exports[`packager > unknown > ni 1`] = `"pnpm i"`;

exports[`packager > unknown > ni foo -D 1`] = `"npm i foo -D"`;
exports[`packager > unknown > ni foo -D 1`] = `"pnpm add foo -D"`;

exports[`packager > unknown > ni foo 1`] = `"npm i foo"`;
exports[`packager > unknown > ni foo 1`] = `"pnpm add foo"`;

exports[`packager > unknown > nlx 1`] = `"npx foo"`;
exports[`packager > unknown > nlx 1`] = `"pnpm dlx foo"`;

exports[`packager > unknown > nu -i 1`] = `"Command \\"upgrade-interactive\\" is not support by agent \\"npm\\""`;
exports[`packager > unknown > nu -i 1`] = `"pnpm update -i"`;

exports[`packager > unknown > nu 1`] = `"npm update"`;
exports[`packager > unknown > nu 1`] = `"pnpm update"`;

exports[`packager > unknown > nun -g foo 1`] = `"npm uninstall -g foo"`;

exports[`packager > unknown > nun foo 1`] = `"npm uninstall foo"`;
exports[`packager > unknown > nun foo 1`] = `"pnpm remove foo"`;

exports[`packager > yarn > na 1`] = `"yarn"`;

exports[`packager > yarn > na run foo 1`] = `"yarn run foo"`;

exports[`packager > yarn > ni --frozen 1`] = `"yarn install --frozen-lockfile"`;

exports[`packager > yarn > ni -g foo 1`] = `"yarn global add foo"`;
exports[`packager > yarn > ni -g foo 1`] = `"npm i -g foo"`;

exports[`packager > yarn > ni 1`] = `"yarn install"`;

Expand All @@ -308,7 +308,7 @@ exports[`packager > yarn > nu -i 1`] = `"yarn upgrade-interactive"`;

exports[`packager > yarn > nu 1`] = `"yarn upgrade"`;

exports[`packager > yarn > nun -g foo 1`] = `"yarn global remove foo"`;
exports[`packager > yarn > nun -g foo 1`] = `"npm uninstall -g foo"`;

exports[`packager > yarn > nun foo 1`] = `"yarn remove foo"`;

Expand Down
20 changes: 11 additions & 9 deletions test/programmatic/runCli.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,19 @@ function runCliTest(fixtureName: string, agent: string, runner: Runner, args: st
const fixture = path.join(__dirname, '..', 'fixtures', fixtureName, agent)
await fs.copy(fixture, cwd)

await runCli(async (agent, _, ctx) => {
// we override the args to be test specific
return runner(agent, args, ctx)
}, {
programmatic: true,
cwd,
}).catch((e) => {
// it will always throw if execa is mocked
await runCli(
async (agent, _, ctx) => {
// we override the args to be test specific
return runner(agent, args, ctx)
}, {
programmatic: true,
cwd,
args,
},
).catch((e) => {
// it will always throw if execa is mocked
if (e.command)
expect(e.command).toMatchSnapshot()

else
expect(e.message).toMatchSnapshot()
})
Expand Down

0 comments on commit 7a16514

Please sign in to comment.