1*082815dcSEvan Baconimport { compileMockModWithResultsAsync } from '../../plugins/__tests__/mockMods'; 2*082815dcSEvan Baconimport { withPodfileProperties } from '../../plugins/ios-plugins'; 3*082815dcSEvan Baconimport { 4*082815dcSEvan Bacon updateIosBuildPropertiesFromConfig, 5*082815dcSEvan Bacon updateIosBuildProperty, 6*082815dcSEvan Bacon withJsEnginePodfileProps, 7*082815dcSEvan Bacon} from '../BuildProperties'; 8*082815dcSEvan Bacon 9*082815dcSEvan Baconjest.mock('../../plugins/ios-plugins'); 10*082815dcSEvan Bacon 11*082815dcSEvan Bacondescribe(withJsEnginePodfileProps, () => { 12*082815dcSEvan Bacon const JS_ENGINE_PROP_KEY = 'expo.jsEngine'; 13*082815dcSEvan Bacon 14*082815dcSEvan Bacon it('set the property from shared `jsEngine` config', async () => { 15*082815dcSEvan Bacon const { modResults } = await compileMockModWithResultsAsync( 16*082815dcSEvan Bacon { jsEngine: 'hermes' }, 17*082815dcSEvan Bacon { 18*082815dcSEvan Bacon plugin: withJsEnginePodfileProps, 19*082815dcSEvan Bacon mod: withPodfileProperties, 20*082815dcSEvan Bacon modResults: {}, 21*082815dcSEvan Bacon } 22*082815dcSEvan Bacon ); 23*082815dcSEvan Bacon expect(modResults).toMatchObject({ 24*082815dcSEvan Bacon [JS_ENGINE_PROP_KEY]: 'hermes', 25*082815dcSEvan Bacon }); 26*082815dcSEvan Bacon }); 27*082815dcSEvan Bacon 28*082815dcSEvan Bacon it('set the property from platform override `jsEngine`', async () => { 29*082815dcSEvan Bacon const { modResults } = await compileMockModWithResultsAsync( 30*082815dcSEvan Bacon { jsEngine: 'hermes', ios: { jsEngine: 'jsc' } }, 31*082815dcSEvan Bacon { 32*082815dcSEvan Bacon plugin: withJsEnginePodfileProps, 33*082815dcSEvan Bacon mod: withPodfileProperties, 34*082815dcSEvan Bacon modResults: {}, 35*082815dcSEvan Bacon } 36*082815dcSEvan Bacon ); 37*082815dcSEvan Bacon expect(modResults).toMatchObject({ 38*082815dcSEvan Bacon [JS_ENGINE_PROP_KEY]: 'jsc', 39*082815dcSEvan Bacon }); 40*082815dcSEvan Bacon }); 41*082815dcSEvan Bacon 42*082815dcSEvan Bacon it('overwrite the property if an old property is existed', async () => { 43*082815dcSEvan Bacon const { modResults } = await compileMockModWithResultsAsync( 44*082815dcSEvan Bacon { jsEngine: 'hermes' }, 45*082815dcSEvan Bacon { 46*082815dcSEvan Bacon plugin: withJsEnginePodfileProps, 47*082815dcSEvan Bacon mod: withPodfileProperties, 48*082815dcSEvan Bacon modResults: { [JS_ENGINE_PROP_KEY]: 'jsc' } as Record<string, string>, 49*082815dcSEvan Bacon } 50*082815dcSEvan Bacon ); 51*082815dcSEvan Bacon expect(modResults).toMatchObject({ 52*082815dcSEvan Bacon [JS_ENGINE_PROP_KEY]: 'hermes', 53*082815dcSEvan Bacon }); 54*082815dcSEvan Bacon }); 55*082815dcSEvan Bacon}); 56*082815dcSEvan Bacon 57*082815dcSEvan Bacondescribe(updateIosBuildPropertiesFromConfig, () => { 58*082815dcSEvan Bacon it('should respect `propValueGetter` order', () => { 59*082815dcSEvan Bacon const podfileProperties = {}; 60*082815dcSEvan Bacon const configToPropertyRules = [ 61*082815dcSEvan Bacon { 62*082815dcSEvan Bacon propName: 'expo.jsEngine', 63*082815dcSEvan Bacon propValueGetter: (config) => config.ios?.jsEngine ?? config.jsEngine ?? 'NOTFOUND', 64*082815dcSEvan Bacon }, 65*082815dcSEvan Bacon ]; 66*082815dcSEvan Bacon 67*082815dcSEvan Bacon expect( 68*082815dcSEvan Bacon updateIosBuildPropertiesFromConfig( 69*082815dcSEvan Bacon { jsEngine: 'hermes', ios: { jsEngine: 'jsc' } }, 70*082815dcSEvan Bacon podfileProperties, 71*082815dcSEvan Bacon configToPropertyRules 72*082815dcSEvan Bacon ) 73*082815dcSEvan Bacon ).toMatchObject({ 74*082815dcSEvan Bacon 'expo.jsEngine': 'jsc', 75*082815dcSEvan Bacon }); 76*082815dcSEvan Bacon 77*082815dcSEvan Bacon expect( 78*082815dcSEvan Bacon updateIosBuildPropertiesFromConfig( 79*082815dcSEvan Bacon { jsEngine: 'jsc' }, 80*082815dcSEvan Bacon podfileProperties, 81*082815dcSEvan Bacon configToPropertyRules 82*082815dcSEvan Bacon ) 83*082815dcSEvan Bacon ).toMatchObject({ 84*082815dcSEvan Bacon 'expo.jsEngine': 'jsc', 85*082815dcSEvan Bacon }); 86*082815dcSEvan Bacon 87*082815dcSEvan Bacon expect( 88*082815dcSEvan Bacon updateIosBuildPropertiesFromConfig({}, podfileProperties, configToPropertyRules) 89*082815dcSEvan Bacon ).toMatchObject({ 90*082815dcSEvan Bacon 'expo.jsEngine': 'NOTFOUND', 91*082815dcSEvan Bacon }); 92*082815dcSEvan Bacon }); 93*082815dcSEvan Bacon}); 94*082815dcSEvan Bacon 95*082815dcSEvan Bacondescribe(updateIosBuildProperty, () => { 96*082815dcSEvan Bacon it('should merge properties', () => { 97*082815dcSEvan Bacon const podfileProperties = { 98*082815dcSEvan Bacon foo: 'foo', 99*082815dcSEvan Bacon bar: 'bar', 100*082815dcSEvan Bacon name: 'oldName', 101*082815dcSEvan Bacon }; 102*082815dcSEvan Bacon expect(updateIosBuildProperty(podfileProperties, 'name', 'newName')).toEqual({ 103*082815dcSEvan Bacon foo: 'foo', 104*082815dcSEvan Bacon bar: 'bar', 105*082815dcSEvan Bacon name: 'newName', 106*082815dcSEvan Bacon }); 107*082815dcSEvan Bacon }); 108*082815dcSEvan Bacon 109*082815dcSEvan Bacon it('should keep original property when `value` is null by default', () => { 110*082815dcSEvan Bacon const podfileProperties = { 111*082815dcSEvan Bacon foo: 'foo', 112*082815dcSEvan Bacon bar: 'bar', 113*082815dcSEvan Bacon }; 114*082815dcSEvan Bacon expect(updateIosBuildProperty(podfileProperties, 'bar', null)).toEqual({ 115*082815dcSEvan Bacon foo: 'foo', 116*082815dcSEvan Bacon bar: 'bar', 117*082815dcSEvan Bacon }); 118*082815dcSEvan Bacon }); 119*082815dcSEvan Bacon 120*082815dcSEvan Bacon it('should remove original property when `value` is null when `removePropWhenValueIsNull` is true', () => { 121*082815dcSEvan Bacon const podfileProperties = { 122*082815dcSEvan Bacon foo: 'foo', 123*082815dcSEvan Bacon bar: 'bar', 124*082815dcSEvan Bacon }; 125*082815dcSEvan Bacon expect( 126*082815dcSEvan Bacon updateIosBuildProperty(podfileProperties, 'bar', null, { removePropWhenValueIsNull: true }) 127*082815dcSEvan Bacon ).toEqual({ 128*082815dcSEvan Bacon foo: 'foo', 129*082815dcSEvan Bacon }); 130*082815dcSEvan Bacon }); 131*082815dcSEvan Bacon}); 132