1import { parseVariadicArguments, assertUnexpectedVariadicFlags } from '../variadic';
2
3describe(parseVariadicArguments, () => {
4  it(`parses complex`, () => {
5    expect(
6      parseVariadicArguments([
7        'bacon',
8        '@evan/bacon',
9        '--yarn',
10        '-g',
11        '@evan/bacon/foobar.js',
12        './avocado.js',
13        '--',
14        '--npm',
15      ])
16    ).toEqual({
17      variadic: ['bacon', '@evan/bacon', '@evan/bacon/foobar.js', './avocado.js'],
18      extras: ['--npm'],
19      flags: { '--yarn': true, '-g': true },
20    });
21  });
22  it(`parses too many extras`, () => {
23    expect(() => parseVariadicArguments(['avo', '--', '--npm', '--'])).toThrow(
24      /Unexpected multiple --/
25    );
26  });
27});
28
29describe(assertUnexpectedVariadicFlags, () => {
30  it(`splits unknown flags into extras`, () => {
31    expect(() =>
32      assertUnexpectedVariadicFlags(['--yarn'], {
33        variadic: ['chalk'],
34        flags: { '-D': true },
35        extras: [],
36      })
37    ).toThrowError('Did you mean: chalk -- -D');
38  });
39
40  it(`splits unknown flags and combines existing extras`, () => {
41    expect(() =>
42      assertUnexpectedVariadicFlags(['--npm'], {
43        variadic: ['chalk'],
44        flags: { '-D': true },
45        extras: ['--ignore-scripts'],
46      })
47    ).toThrowError('Did you mean: chalk -- --ignore-scripts -D');
48  });
49
50  it(`accepts empty variadic`, () => {
51    expect(() =>
52      assertUnexpectedVariadicFlags(['--pnpm'], {
53        variadic: [],
54        flags: { '--ignore-scripts': true, '-D': true },
55        extras: [],
56      })
57    ).toThrowError('Did you mean: -- --ignore-scripts -D');
58  });
59
60  it('prepends command prefix', () => {
61    expect(() =>
62      assertUnexpectedVariadicFlags(
63        ['--yarn'],
64        {
65          variadic: ['chalk'],
66          flags: { '-D': true },
67          extras: [],
68        },
69        'npx expo install'
70      )
71    ).toThrowError('Did you mean: npx expo install chalk -- -D');
72  });
73});
74