1import { getExtensions, getBareExtensions, getLanguageExtensionsInOrder } from '../extensions'; 2 3describe(getExtensions, () => { 4 it(`enforces \`string[]\``, async () => { 5 // @ts-expect-error: test invalid input 6 expect(() => getExtensions('web')).toThrow(`string[]`); 7 // @ts-expect-error: test invalid input 8 expect(() => getExtensions([], 'js')).toThrow(`string[]`); 9 // @ts-expect-error: test invalid input 10 expect(() => getExtensions([], [], 'expo')).toThrow(`string[]`); 11 // @ts-expect-error: test invalid input 12 expect(() => getExtensions([], null, [])).toThrow(`string[]`); 13 }); 14}); 15 16describe(getBareExtensions, () => { 17 it(`creates extensions for web`, async () => { 18 expect(getBareExtensions(['web'])).toMatchSnapshot(); 19 }); 20 21 it(`creates extensions for iOS`, async () => { 22 expect(getBareExtensions(['ios', 'native'])).toMatchSnapshot(); 23 }); 24}); 25 26// Enforce that all extensions are returned in the correct order, this is very important! 27describe(getLanguageExtensionsInOrder, () => { 28 // Return only support for the bare minimum 29 it(`JS only`, async () => { 30 expect( 31 getLanguageExtensionsInOrder({ isTS: false, isModern: false, isReact: false }) 32 ).toStrictEqual(['js']); 33 }); 34 35 // Modern should come before JS in a basic MJS project 36 it(`Modern JS`, async () => { 37 expect( 38 getLanguageExtensionsInOrder({ isTS: false, isModern: true, isReact: false }) 39 ).toStrictEqual(['mjs', 'js']); 40 }); 41 42 // TypeScript should precede JavaScript 43 it(`TypeScript`, async () => { 44 expect( 45 getLanguageExtensionsInOrder({ isTS: true, isModern: false, isReact: false }) 46 ).toStrictEqual(['ts', 'js']); 47 }); 48 49 // JS should precede JSX files 50 it(`React`, async () => { 51 expect( 52 getLanguageExtensionsInOrder({ isTS: false, isModern: false, isReact: true }) 53 ).toStrictEqual(['js', 'jsx']); 54 }); 55 56 // Modern should come before JS in a basic MJS project 57 it(`TypeScript React`, async () => { 58 expect( 59 getLanguageExtensionsInOrder({ isTS: true, isModern: false, isReact: true }) 60 ).toStrictEqual(['ts', 'tsx', 'js', 'jsx']); 61 }); 62 63 // Should include all extensions in the correct order 64 it(`Modern TypeScript React`, async () => { 65 expect( 66 getLanguageExtensionsInOrder({ isTS: true, isModern: true, isReact: true }) 67 ).toStrictEqual(['ts', 'tsx', 'mjs', 'js', 'jsx']); 68 }); 69}); 70