1dfe12d45SEvan Baconimport { resolveArgsAsync } from '../resolveOptions';
209bb6093SEvan Bacon
309bb6093SEvan Bacondescribe(resolveArgsAsync, () => {
409bb6093SEvan Bacon  it(`asserts invalid flags`, async () => {
509bb6093SEvan Bacon    await expect(resolveArgsAsync(['-g', '--bacon'])).rejects.toThrow(/Unexpected: -g, --bacon/);
609bb6093SEvan Bacon  });
709bb6093SEvan Bacon  it(`prevents bad combos`, async () => {
809bb6093SEvan Bacon    await expect(resolveArgsAsync(['--npm', '--yarn'])).rejects.toThrow(
96caf5755SEvan Bacon      /Specify at most one of: --npm, --pnpm, --yarn/
106caf5755SEvan Bacon    );
116caf5755SEvan Bacon    await expect(resolveArgsAsync(['--npm', '--pnpm', '--yarn'])).rejects.toThrow(
126caf5755SEvan Bacon      /Specify at most one of: --npm, --pnpm, --yarn/
1309bb6093SEvan Bacon    );
1409bb6093SEvan Bacon  });
1509bb6093SEvan Bacon  it(`allows known values`, async () => {
1609bb6093SEvan Bacon    const result = await resolveArgsAsync([
1709bb6093SEvan Bacon      'bacon',
1809bb6093SEvan Bacon      '@evan/bacon',
1909bb6093SEvan Bacon      '--yarn',
2009bb6093SEvan Bacon      'another@foobar',
2109bb6093SEvan Bacon      'file:../thing',
2209bb6093SEvan Bacon      '--',
2309bb6093SEvan Bacon      '--npm',
2409bb6093SEvan Bacon      '-g',
2509bb6093SEvan Bacon      'not-a-plugin',
2609bb6093SEvan Bacon    ]);
2709bb6093SEvan Bacon    expect(result).toEqual({
2809bb6093SEvan Bacon      variadic: ['bacon', '@evan/bacon', 'another@foobar', 'file:../thing'],
2909bb6093SEvan Bacon      options: {
3009bb6093SEvan Bacon        npm: false,
3109bb6093SEvan Bacon        yarn: true,
32c94ad8a2SEvan Bacon        check: false,
336caf5755SEvan Bacon        pnpm: false,
34*9b1b5ec6SEvan Bacon        bun: false,
35c94ad8a2SEvan Bacon        fix: false,
3609bb6093SEvan Bacon      },
3709bb6093SEvan Bacon      extras: ['--npm', '-g', 'not-a-plugin'],
3809bb6093SEvan Bacon    });
3909bb6093SEvan Bacon  });
4009bb6093SEvan Bacon  it(`allows known values without correct chaining`, async () => {
41c94ad8a2SEvan Bacon    const result = await resolveArgsAsync(['expo', '--npm', '--check', '--']);
4209bb6093SEvan Bacon    expect(result).toEqual({
4309bb6093SEvan Bacon      variadic: ['expo'],
4409bb6093SEvan Bacon      options: {
4509bb6093SEvan Bacon        npm: true,
4609bb6093SEvan Bacon        yarn: false,
47c94ad8a2SEvan Bacon        check: true,
486caf5755SEvan Bacon        pnpm: false,
49*9b1b5ec6SEvan Bacon        bun: false,
50c94ad8a2SEvan Bacon        fix: false,
5109bb6093SEvan Bacon      },
5209bb6093SEvan Bacon      extras: [],
5309bb6093SEvan Bacon    });
5409bb6093SEvan Bacon  });
5509bb6093SEvan Bacon});
56