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