1082815dcSEvan Baconimport { compileMockModWithResultsAsync } from '../../plugins/__tests__/mockMods'; 2082815dcSEvan Baconimport { withGradleProperties } from '../../plugins/android-plugins'; 3082815dcSEvan Baconimport { 4082815dcSEvan Bacon updateAndroidBuildPropertiesFromConfig, 5082815dcSEvan Bacon updateAndroidBuildProperty, 6082815dcSEvan Bacon withJsEngineGradleProps, 7082815dcSEvan Bacon} from '../BuildProperties'; 8082815dcSEvan Baconimport { parsePropertiesFile, PropertiesItem } from '../Properties'; 9082815dcSEvan Bacon 10082815dcSEvan Baconjest.mock('../../plugins/android-plugins'); 11082815dcSEvan Bacon 12*0e8f799bSKudo Chienconst HERMES_PROP_KEY = 'hermesEnabled'; 13082815dcSEvan Bacon 14*0e8f799bSKudo Chiendescribe(withJsEngineGradleProps, () => { 15082815dcSEvan Bacon it('set the property from shared `jsEngine` config', async () => { 16082815dcSEvan Bacon const { modResults } = await compileMockModWithResultsAsync( 17082815dcSEvan Bacon { jsEngine: 'hermes' }, 18082815dcSEvan Bacon { 19082815dcSEvan Bacon plugin: withJsEngineGradleProps, 20082815dcSEvan Bacon mod: withGradleProperties, 21082815dcSEvan Bacon modResults: [], 22082815dcSEvan Bacon } 23082815dcSEvan Bacon ); 24082815dcSEvan Bacon expect(modResults).toContainEqual({ 25082815dcSEvan Bacon type: 'property', 26*0e8f799bSKudo Chien key: HERMES_PROP_KEY, 27*0e8f799bSKudo Chien value: 'true', 28082815dcSEvan Bacon }); 29082815dcSEvan Bacon }); 30082815dcSEvan Bacon 31082815dcSEvan Bacon it('set the property from platform override `jsEngine`', async () => { 32082815dcSEvan Bacon const { modResults } = await compileMockModWithResultsAsync( 33082815dcSEvan Bacon { jsEngine: 'hermes', android: { jsEngine: 'jsc' } }, 34082815dcSEvan Bacon { 35082815dcSEvan Bacon plugin: withJsEngineGradleProps, 36082815dcSEvan Bacon mod: withGradleProperties, 37082815dcSEvan Bacon modResults: [], 38082815dcSEvan Bacon } 39082815dcSEvan Bacon ); 40082815dcSEvan Bacon expect(modResults).toContainEqual({ 41082815dcSEvan Bacon type: 'property', 42*0e8f799bSKudo Chien key: HERMES_PROP_KEY, 43*0e8f799bSKudo Chien value: 'false', 44082815dcSEvan Bacon }); 45082815dcSEvan Bacon }); 46082815dcSEvan Bacon 47082815dcSEvan Bacon it('overwrite the property if an old property is existed', async () => { 48082815dcSEvan Bacon const originalGradleProperties = parsePropertiesFile(` 49082815dcSEvan Baconandroid.useAndroidX=true 50082815dcSEvan Baconandroid.enableJetifier=true 51*0e8f799bSKudo ChienhermesEnabled=false 52082815dcSEvan Bacon`); 53082815dcSEvan Bacon 54082815dcSEvan Bacon const { modResults } = await compileMockModWithResultsAsync( 55082815dcSEvan Bacon { android: { jsEngine: 'hermes' } }, 56082815dcSEvan Bacon { 57082815dcSEvan Bacon plugin: withJsEngineGradleProps, 58082815dcSEvan Bacon mod: withGradleProperties, 59082815dcSEvan Bacon modResults: originalGradleProperties, 60082815dcSEvan Bacon } 61082815dcSEvan Bacon ); 62082815dcSEvan Bacon expect(modResults).toContainEqual({ 63082815dcSEvan Bacon type: 'property', 64*0e8f799bSKudo Chien key: HERMES_PROP_KEY, 65*0e8f799bSKudo Chien value: 'true', 66082815dcSEvan Bacon }); 67082815dcSEvan Bacon }); 68082815dcSEvan Bacon}); 69082815dcSEvan Bacon 70082815dcSEvan Bacondescribe(updateAndroidBuildPropertiesFromConfig, () => { 71082815dcSEvan Bacon it('should respect `propValueGetter` order', () => { 72082815dcSEvan Bacon const gradleProperties = []; 73082815dcSEvan Bacon const configToPropertyRules = [ 74082815dcSEvan Bacon { 75*0e8f799bSKudo Chien propName: HERMES_PROP_KEY, 76*0e8f799bSKudo Chien propValueGetter: (config) => 77*0e8f799bSKudo Chien ((config.android?.jsEngine ?? config.jsEngine ?? 'hermes') === 'hermes').toString(), 78082815dcSEvan Bacon }, 79082815dcSEvan Bacon ]; 80082815dcSEvan Bacon 81082815dcSEvan Bacon expect( 82082815dcSEvan Bacon updateAndroidBuildPropertiesFromConfig( 83082815dcSEvan Bacon { jsEngine: 'hermes', android: { jsEngine: 'jsc' } }, 84082815dcSEvan Bacon gradleProperties, 85082815dcSEvan Bacon configToPropertyRules 86082815dcSEvan Bacon ) 87082815dcSEvan Bacon ).toContainEqual({ 88082815dcSEvan Bacon type: 'property', 89*0e8f799bSKudo Chien key: HERMES_PROP_KEY, 90*0e8f799bSKudo Chien value: 'false', 91082815dcSEvan Bacon }); 92082815dcSEvan Bacon 93082815dcSEvan Bacon expect( 94082815dcSEvan Bacon updateAndroidBuildPropertiesFromConfig( 95082815dcSEvan Bacon { jsEngine: 'jsc' }, 96082815dcSEvan Bacon gradleProperties, 97082815dcSEvan Bacon configToPropertyRules 98082815dcSEvan Bacon ) 99082815dcSEvan Bacon ).toContainEqual({ 100082815dcSEvan Bacon type: 'property', 101*0e8f799bSKudo Chien key: HERMES_PROP_KEY, 102*0e8f799bSKudo Chien value: 'false', 103082815dcSEvan Bacon }); 104082815dcSEvan Bacon 105082815dcSEvan Bacon expect( 106082815dcSEvan Bacon updateAndroidBuildPropertiesFromConfig({}, gradleProperties, configToPropertyRules) 107082815dcSEvan Bacon ).toContainEqual({ 108082815dcSEvan Bacon type: 'property', 109*0e8f799bSKudo Chien key: HERMES_PROP_KEY, 110*0e8f799bSKudo Chien value: 'true', 111082815dcSEvan Bacon }); 112082815dcSEvan Bacon }); 113082815dcSEvan Bacon}); 114082815dcSEvan Bacon 115082815dcSEvan Bacondescribe(updateAndroidBuildProperty, () => { 116082815dcSEvan Bacon it('should merge properties', () => { 117082815dcSEvan Bacon const gradleProperties: PropertiesItem[] = [ 118082815dcSEvan Bacon { type: 'property', key: 'foo', value: 'foo' }, 119082815dcSEvan Bacon { type: 'property', key: 'bar', value: 'bar' }, 120082815dcSEvan Bacon { type: 'property', key: 'name', value: 'oldName' }, 121082815dcSEvan Bacon ]; 122082815dcSEvan Bacon expect(updateAndroidBuildProperty(gradleProperties, 'name', 'newName')).toEqual([ 123082815dcSEvan Bacon { type: 'property', key: 'foo', value: 'foo' }, 124082815dcSEvan Bacon { type: 'property', key: 'bar', value: 'bar' }, 125082815dcSEvan Bacon { type: 'property', key: 'name', value: 'newName' }, 126082815dcSEvan Bacon ]); 127082815dcSEvan Bacon }); 128082815dcSEvan Bacon 129082815dcSEvan Bacon it('should keep original property when `value` is null by default', () => { 130082815dcSEvan Bacon const gradleProperties: PropertiesItem[] = [ 131082815dcSEvan Bacon { type: 'property', key: 'foo', value: 'foo' }, 132082815dcSEvan Bacon { type: 'property', key: 'bar', value: 'bar' }, 133082815dcSEvan Bacon ]; 134082815dcSEvan Bacon expect(updateAndroidBuildProperty(gradleProperties, 'bar', null)).toEqual([ 135082815dcSEvan Bacon { type: 'property', key: 'foo', value: 'foo' }, 136082815dcSEvan Bacon { type: 'property', key: 'bar', value: 'bar' }, 137082815dcSEvan Bacon ]); 138082815dcSEvan Bacon }); 139082815dcSEvan Bacon 140082815dcSEvan Bacon it('should remove original property when `value` is null when `removePropWhenValueIsNull` is true', () => { 141082815dcSEvan Bacon const gradleProperties: PropertiesItem[] = [ 142082815dcSEvan Bacon { type: 'property', key: 'foo', value: 'foo' }, 143082815dcSEvan Bacon { type: 'property', key: 'bar', value: 'bar' }, 144082815dcSEvan Bacon ]; 145082815dcSEvan Bacon expect( 146082815dcSEvan Bacon updateAndroidBuildProperty(gradleProperties, 'bar', null, { 147082815dcSEvan Bacon removePropWhenValueIsNull: true, 148082815dcSEvan Bacon }) 149082815dcSEvan Bacon ).toEqual([{ type: 'property', key: 'foo', value: 'foo' }]); 150082815dcSEvan Bacon }); 151082815dcSEvan Bacon}); 152