16d6b81f9SEvan Baconimport { getConfig } from '@expo/config'; 26d6b81f9SEvan Bacon 36d6b81f9SEvan Baconimport { asMock } from '../../__tests__/asMock'; 4dc51e206SEvan Baconimport { resolveOptionsAsync } from '../resolveOptions'; 5dc51e206SEvan Bacon 66d6b81f9SEvan Baconjest.mock('@expo/config', () => ({ 76d6b81f9SEvan Bacon getConfig: jest.fn(() => ({ 86d6b81f9SEvan Bacon pkg: {}, 96d6b81f9SEvan Bacon exp: { 106d6b81f9SEvan Bacon sdkVersion: '45.0.0', 116d6b81f9SEvan Bacon name: 'my-app', 126d6b81f9SEvan Bacon slug: 'my-app', 136d6b81f9SEvan Bacon }, 146d6b81f9SEvan Bacon })), 156d6b81f9SEvan Bacon})); 166d6b81f9SEvan Bacon 17dc51e206SEvan Bacondescribe(resolveOptionsAsync, () => { 18*8eba27a6SCedric van Putten it(`asserts unknown platform`, async () => { 19*8eba27a6SCedric van Putten await expect(resolveOptionsAsync('/', { '--platform': ['foobar'] })).rejects.toThrow( 20dc51e206SEvan Bacon /^Unsupported platform "foobar"\./ 21dc51e206SEvan Bacon ); 22dc51e206SEvan Bacon }); 23dc51e206SEvan Bacon 24*8eba27a6SCedric van Putten it(`asserts not-configured platform`, async () => { 25*8eba27a6SCedric van Putten await expect(resolveOptionsAsync('/', { '--platform': ['web'] })).rejects.toThrow( 26*8eba27a6SCedric van Putten /^Platform "web" is not configured to use the Metro bundler in the project Expo config\./ 27*8eba27a6SCedric van Putten ); 28*8eba27a6SCedric van Putten }); 29*8eba27a6SCedric van Putten 30*8eba27a6SCedric van Putten it(`allows multiple platform flags`, async () => { 31*8eba27a6SCedric van Putten await expect( 32*8eba27a6SCedric van Putten resolveOptionsAsync('/', { '--platform': ['android', 'ios'] }) 33*8eba27a6SCedric van Putten ).resolves.toMatchObject({ 34*8eba27a6SCedric van Putten platforms: ['android', 'ios'], 35*8eba27a6SCedric van Putten }); 36*8eba27a6SCedric van Putten }); 37*8eba27a6SCedric van Putten 38*8eba27a6SCedric van Putten it(`filters duplicated platform flags`, async () => { 39*8eba27a6SCedric van Putten await expect( 40*8eba27a6SCedric van Putten resolveOptionsAsync('/', { '--platform': ['android', 'android', 'ios', 'ios'] }) 41*8eba27a6SCedric van Putten ).resolves.toMatchObject({ 42*8eba27a6SCedric van Putten platforms: ['android', 'ios'], 43*8eba27a6SCedric van Putten }); 44*8eba27a6SCedric van Putten }); 45*8eba27a6SCedric van Putten 46*8eba27a6SCedric van Putten it(`filters duplicated platform flags including all`, async () => { 47*8eba27a6SCedric van Putten await expect( 48*8eba27a6SCedric van Putten resolveOptionsAsync('/', { '--platform': ['android', 'all'] }) 49*8eba27a6SCedric van Putten ).resolves.toMatchObject({ 50*8eba27a6SCedric van Putten platforms: ['android', 'ios'], 51*8eba27a6SCedric van Putten }); 52*8eba27a6SCedric van Putten }); 53*8eba27a6SCedric van Putten 54dc51e206SEvan Bacon it(`parses qualified options`, async () => { 55dc51e206SEvan Bacon await expect( 566d6b81f9SEvan Bacon resolveOptionsAsync('/', { 57dc51e206SEvan Bacon '--output-dir': 'foobar', 58*8eba27a6SCedric van Putten '--platform': ['android'], 59dc51e206SEvan Bacon '--clear': true, 60dc51e206SEvan Bacon '--dev': true, 61dc51e206SEvan Bacon '--dump-assetmap': true, 62dc51e206SEvan Bacon '--dump-sourcemap': true, 63dc51e206SEvan Bacon '--max-workers': 2, 64dc51e206SEvan Bacon }) 65dc51e206SEvan Bacon ).resolves.toEqual({ 66dc51e206SEvan Bacon clear: true, 67dc51e206SEvan Bacon dev: true, 681a3d836eSEvan Bacon minify: true, 69dc51e206SEvan Bacon dumpAssetmap: true, 70dc51e206SEvan Bacon dumpSourcemap: true, 71dc51e206SEvan Bacon maxWorkers: 2, 72dc51e206SEvan Bacon outputDir: 'foobar', 73dc51e206SEvan Bacon platforms: ['android'], 74dc51e206SEvan Bacon }); 75dc51e206SEvan Bacon }); 76dc51e206SEvan Bacon 77dc51e206SEvan Bacon it(`parses default options`, async () => { 786d6b81f9SEvan Bacon await expect(resolveOptionsAsync('/', {})).resolves.toEqual({ 79dc51e206SEvan Bacon clear: false, 80dc51e206SEvan Bacon dev: false, 811a3d836eSEvan Bacon minify: true, 82dc51e206SEvan Bacon dumpAssetmap: false, 83dc51e206SEvan Bacon dumpSourcemap: false, 84dc51e206SEvan Bacon maxWorkers: undefined, 85dc51e206SEvan Bacon outputDir: 'dist', 866d6b81f9SEvan Bacon platforms: ['ios', 'android'], 87dc51e206SEvan Bacon }); 88dc51e206SEvan Bacon }); 896d6b81f9SEvan Bacon it(`parses default options with web enabled`, async () => { 906d6b81f9SEvan Bacon asMock(getConfig).mockReturnValueOnce({ 916d6b81f9SEvan Bacon // @ts-expect-error 926d6b81f9SEvan Bacon exp: { web: { bundler: 'metro' } }, 936d6b81f9SEvan Bacon }); 946d6b81f9SEvan Bacon await expect(resolveOptionsAsync('/', {})).resolves.toEqual( 956d6b81f9SEvan Bacon expect.objectContaining({ 966d6b81f9SEvan Bacon platforms: ['ios', 'android', 'web'], 976d6b81f9SEvan Bacon }) 986d6b81f9SEvan Bacon ); 996d6b81f9SEvan Bacon }); 100dc51e206SEvan Bacon}); 101