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