1*97e1898cSEvan Baconimport { getExtensions, getBareExtensions, getLanguageExtensionsInOrder } from '../extensions'; 2082815dcSEvan Bacon 3*97e1898cSEvan Bacondescribe(getExtensions, () => { 4082815dcSEvan Bacon it(`enforces \`string[]\``, async () => { 5*97e1898cSEvan Bacon // @ts-expect-error: test invalid input 6082815dcSEvan Bacon expect(() => getExtensions('web')).toThrow(`string[]`); 7*97e1898cSEvan Bacon // @ts-expect-error: test invalid input 8082815dcSEvan Bacon expect(() => getExtensions([], 'js')).toThrow(`string[]`); 9*97e1898cSEvan Bacon // @ts-expect-error: test invalid input 10082815dcSEvan Bacon expect(() => getExtensions([], [], 'expo')).toThrow(`string[]`); 11*97e1898cSEvan Bacon // @ts-expect-error: test invalid input 12082815dcSEvan Bacon expect(() => getExtensions([], null, [])).toThrow(`string[]`); 13082815dcSEvan Bacon }); 14082815dcSEvan Bacon}); 15082815dcSEvan Bacon 16*97e1898cSEvan Bacondescribe(getBareExtensions, () => { 17082815dcSEvan Bacon it(`creates extensions for web`, async () => { 18*97e1898cSEvan Bacon expect(getBareExtensions(['web'])).toMatchSnapshot(); 19082815dcSEvan Bacon }); 20082815dcSEvan Bacon 21082815dcSEvan Bacon it(`creates extensions for iOS`, async () => { 22*97e1898cSEvan Bacon expect(getBareExtensions(['ios', 'native'])).toMatchSnapshot(); 23082815dcSEvan Bacon }); 24082815dcSEvan Bacon}); 25082815dcSEvan Bacon 26082815dcSEvan Bacon// Enforce that all extensions are returned in the correct order, this is very important! 27*97e1898cSEvan Bacondescribe(getLanguageExtensionsInOrder, () => { 28082815dcSEvan Bacon // Return only support for the bare minimum 29082815dcSEvan Bacon it(`JS only`, async () => { 30082815dcSEvan Bacon expect( 31082815dcSEvan Bacon getLanguageExtensionsInOrder({ isTS: false, isModern: false, isReact: false }) 32082815dcSEvan Bacon ).toStrictEqual(['js']); 33082815dcSEvan Bacon }); 34082815dcSEvan Bacon 35082815dcSEvan Bacon // Modern should come before JS in a basic MJS project 36082815dcSEvan Bacon it(`Modern JS`, async () => { 37082815dcSEvan Bacon expect( 38082815dcSEvan Bacon getLanguageExtensionsInOrder({ isTS: false, isModern: true, isReact: false }) 39082815dcSEvan Bacon ).toStrictEqual(['mjs', 'js']); 40082815dcSEvan Bacon }); 41082815dcSEvan Bacon 42082815dcSEvan Bacon // TypeScript should precede JavaScript 43082815dcSEvan Bacon it(`TypeScript`, async () => { 44082815dcSEvan Bacon expect( 45082815dcSEvan Bacon getLanguageExtensionsInOrder({ isTS: true, isModern: false, isReact: false }) 46082815dcSEvan Bacon ).toStrictEqual(['ts', 'js']); 47082815dcSEvan Bacon }); 48082815dcSEvan Bacon 49082815dcSEvan Bacon // JS should precede JSX files 50082815dcSEvan Bacon it(`React`, async () => { 51082815dcSEvan Bacon expect( 52082815dcSEvan Bacon getLanguageExtensionsInOrder({ isTS: false, isModern: false, isReact: true }) 53082815dcSEvan Bacon ).toStrictEqual(['js', 'jsx']); 54082815dcSEvan Bacon }); 55082815dcSEvan Bacon 56082815dcSEvan Bacon // Modern should come before JS in a basic MJS project 57082815dcSEvan Bacon it(`TypeScript React`, async () => { 58082815dcSEvan Bacon expect( 59082815dcSEvan Bacon getLanguageExtensionsInOrder({ isTS: true, isModern: false, isReact: true }) 60082815dcSEvan Bacon ).toStrictEqual(['ts', 'tsx', 'js', 'jsx']); 61082815dcSEvan Bacon }); 62082815dcSEvan Bacon 63082815dcSEvan Bacon // Should include all extensions in the correct order 64082815dcSEvan Bacon it(`Modern TypeScript React`, async () => { 65082815dcSEvan Bacon expect( 66082815dcSEvan Bacon getLanguageExtensionsInOrder({ isTS: true, isModern: true, isReact: true }) 67082815dcSEvan Bacon ).toStrictEqual(['ts', 'tsx', 'mjs', 'js', 'jsx']); 68082815dcSEvan Bacon }); 69082815dcSEvan Bacon}); 70