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