1082815dcSEvan Baconimport { vol } from 'memfs'; 2082815dcSEvan Bacon 3082815dcSEvan Baconimport rnFixture from '../../plugins/__tests__/fixtures/react-native-project'; 4082815dcSEvan Baconimport { 5082815dcSEvan Bacon getApplicationIdAsync, 6082815dcSEvan Bacon getPackage, 7082815dcSEvan Bacon renameJniOnDiskForType, 8082815dcSEvan Bacon renamePackageOnDiskForType, 9082815dcSEvan Bacon setPackageInBuildGradle, 10082815dcSEvan Bacon} from '../Package'; 11082815dcSEvan Bacon 12082815dcSEvan Baconjest.mock('fs'); 13082815dcSEvan Bacon 14082815dcSEvan Baconconst EXAMPLE_BUILD_GRADLE = ` 15082815dcSEvan Bacon android { 16082815dcSEvan Bacon compileSdkVersion rootProject.ext.compileSdkVersion 17082815dcSEvan Bacon buildToolsVersion rootProject.ext.buildToolsVersion 18082815dcSEvan Bacon 19399179d8SKudo Chien namespace "com.helloworld" 20082815dcSEvan Bacon defaultConfig { 21082815dcSEvan Bacon applicationId "com.helloworld" 22082815dcSEvan Bacon minSdkVersion rootProject.ext.minSdkVersion 23082815dcSEvan Bacon targetSdkVersion rootProject.ext.targetSdkVersion 24082815dcSEvan Bacon versionCode 1 25082815dcSEvan Bacon versionName "1.0" 26082815dcSEvan Bacon } 27082815dcSEvan Bacon } 28082815dcSEvan Bacon `; 29082815dcSEvan Bacon 30082815dcSEvan Bacondescribe('package', () => { 31082815dcSEvan Bacon afterAll(async () => { 32082815dcSEvan Bacon vol.reset(); 33082815dcSEvan Bacon }); 34082815dcSEvan Bacon it(`returns null if no package is provided`, () => { 35082815dcSEvan Bacon expect(getPackage({})).toBe(null); 36082815dcSEvan Bacon }); 37082815dcSEvan Bacon 38082815dcSEvan Bacon it(`returns the package if provided`, () => { 39082815dcSEvan Bacon expect(getPackage({ android: { package: 'com.example.xyz' } })).toBe('com.example.xyz'); 40082815dcSEvan Bacon }); 41082815dcSEvan Bacon 42082815dcSEvan Bacon it(`returns the applicationId defined in build.gradle`, () => { 43082815dcSEvan Bacon const projectRoot = '/'; 44082815dcSEvan Bacon vol.fromJSON(rnFixture, projectRoot); 45082815dcSEvan Bacon 46*ed3bd27bSEvan Bacon expect(getApplicationIdAsync(projectRoot)).resolves.toBe('com.helloworld'); 47082815dcSEvan Bacon }); 48082815dcSEvan Bacon 49082815dcSEvan Bacon it(`sets the applicationId in build.gradle if package is given`, () => { 50082815dcSEvan Bacon expect( 51082815dcSEvan Bacon setPackageInBuildGradle({ android: { package: 'my.new.app' } }, EXAMPLE_BUILD_GRADLE) 52082815dcSEvan Bacon ).toMatch("applicationId 'my.new.app'"); 53082815dcSEvan Bacon }); 54082815dcSEvan Bacon 55399179d8SKudo Chien it(`sets the namespace in build.gradle if package is given`, () => { 56399179d8SKudo Chien expect( 57399179d8SKudo Chien setPackageInBuildGradle({ android: { package: 'my.new.app' } }, EXAMPLE_BUILD_GRADLE) 58399179d8SKudo Chien ).toMatch("namespace 'my.new.app'"); 59399179d8SKudo Chien }); 60082815dcSEvan Bacon}); 61082815dcSEvan Bacon 62082815dcSEvan Bacondescribe(renamePackageOnDiskForType, () => { 63082815dcSEvan Bacon afterAll(async () => { 64082815dcSEvan Bacon vol.reset(); 65082815dcSEvan Bacon }); 66082815dcSEvan Bacon it(`refactors a main project`, async () => { 67082815dcSEvan Bacon const projectRoot = '/'; 68082815dcSEvan Bacon vol.fromJSON(rnFixture, projectRoot); 69082815dcSEvan Bacon 70082815dcSEvan Bacon // Ensure the path that will be deleted exists before we 71082815dcSEvan Bacon // delete it, this helps prevent the test from accidentally breaking. 72*ed3bd27bSEvan Bacon const originalPath = '/android/app/src/main/java/com/helloworld/MainActivity.java'; 73082815dcSEvan Bacon 74082815dcSEvan Bacon expect(vol.toJSON()[originalPath]).toBeDefined(); 75082815dcSEvan Bacon await renamePackageOnDiskForType({ 76082815dcSEvan Bacon projectRoot, 77082815dcSEvan Bacon type: 'main', 78082815dcSEvan Bacon packageName: 'com.bacon.foobar', 79082815dcSEvan Bacon }); 80082815dcSEvan Bacon 81082815dcSEvan Bacon const results = vol.toJSON(); 82082815dcSEvan Bacon // Ensure the file exists in the new location with the new package name 83082815dcSEvan Bacon expect(results['/android/app/src/main/java/com/bacon/foobar/MainActivity.java']).toMatch( 84082815dcSEvan Bacon /^package com.bacon.foobar;/ 85082815dcSEvan Bacon ); 86082815dcSEvan Bacon expect(results[originalPath]).toBeUndefined(); 87082815dcSEvan Bacon // Ensure the BUCK file is rewritten 88*ed3bd27bSEvan Bacon // expect(results['/android/app/BUCK']).toMatch(/package = "com.bacon.foobar"/); 89082815dcSEvan Bacon }); 90082815dcSEvan Bacon it(`refactors a debug project`, async () => { 91082815dcSEvan Bacon const projectRoot = '/'; 92082815dcSEvan Bacon vol.fromJSON(rnFixture, projectRoot); 93082815dcSEvan Bacon await renamePackageOnDiskForType({ 94082815dcSEvan Bacon projectRoot, 95082815dcSEvan Bacon type: 'debug', 96082815dcSEvan Bacon packageName: 'com.bacon.foobar', 97082815dcSEvan Bacon }); 98082815dcSEvan Bacon 99082815dcSEvan Bacon const results = vol.toJSON(); 100082815dcSEvan Bacon expect(results['/android/app/src/debug/java/com/bacon/foobar/ReactNativeFlipper.java']).toMatch( 101082815dcSEvan Bacon /package com.bacon.foobar;/ 102082815dcSEvan Bacon ); 103082815dcSEvan Bacon }); 104082815dcSEvan Bacon}); 105082815dcSEvan Bacon 106082815dcSEvan Bacondescribe(renameJniOnDiskForType, () => { 107082815dcSEvan Bacon afterAll(async () => { 108082815dcSEvan Bacon vol.reset(); 109082815dcSEvan Bacon }); 110082815dcSEvan Bacon it(`refactors a main project`, async () => { 111082815dcSEvan Bacon const projectRoot = '/'; 112082815dcSEvan Bacon vol.fromJSON(rnFixture, projectRoot); 113082815dcSEvan Bacon await renameJniOnDiskForType({ 114082815dcSEvan Bacon projectRoot, 115082815dcSEvan Bacon type: 'main', 116082815dcSEvan Bacon packageName: 'com.bacon.foobar', 117082815dcSEvan Bacon }); 118082815dcSEvan Bacon 119082815dcSEvan Bacon const results = vol.toJSON(); 120082815dcSEvan Bacon expect( 121082815dcSEvan Bacon results['/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h'] 122082815dcSEvan Bacon ).toMatch( 123082815dcSEvan Bacon /"Lcom\/bacon\/foobar\/newarchitecture\/modules\/MainApplicationTurboModuleManagerDelegate;";/ 124082815dcSEvan Bacon ); 125082815dcSEvan Bacon }); 126082815dcSEvan Bacon}); 127