1import { fs, vol } from 'memfs'; 2 3import { renamePackageOnDisk } from '../Package'; 4 5jest.mock('fs'); 6 7describe('package', () => { 8 describe('renamePackageOnDisk', () => { 9 const EXAMPLE_MAIN_APPLICATION = ` 10package com.lololol; 11 12public class MainApplication extends Application implements ReactApplication { 13} 14`; 15 16 const EXAMPLE_MAIN_ACTIVITY = ` 17package com.lololol; 18 19public class MainActivity extends ReactActivity { 20} 21`; 22 23 const EXAMPLE_NESTED_CLASS = ` 24package com.lololol.example; 25import com.lololol.example.hi.other; 26 27public class SomeClass { 28} 29`; 30 31 beforeEach(async () => { 32 const directoryJSON = { 33 './android/app/BUCK': 'package = "com.lololol"', 34 './android/app/src/main/java/com/lololol/MainApplication.java': EXAMPLE_MAIN_APPLICATION, 35 './android/app/src/main/java/com/lololol/MainActivity.java': EXAMPLE_MAIN_ACTIVITY, 36 './android/app/src/main/java/com/lololol/example/SomeClass.java': EXAMPLE_NESTED_CLASS, 37 }; 38 vol.fromJSON(directoryJSON, '/myapp'); 39 }); 40 41 afterEach(() => vol.reset()); 42 43 it('re-creates the directory structure and replaces occurrences of old package in files', async () => { 44 await renamePackageOnDisk({ android: { package: 'xyz.bront.app' } }, '/myapp'); 45 const mainActivityPath = '/myapp/android/app/src/main/java/xyz/bront/app/MainActivity.java'; 46 expect(fs.existsSync(mainActivityPath)).toBeTruthy(); 47 expect(fs.readFileSync(mainActivityPath).toString()).toMatch('package xyz.bront.app'); 48 49 const nestedClassPath = 50 '/myapp/android/app/src/main/java/xyz/bront/app/example/SomeClass.java'; 51 expect(fs.existsSync(nestedClassPath)).toBeTruthy(); 52 expect(fs.readFileSync(nestedClassPath).toString()).toMatch('package xyz.bront.app'); 53 expect(fs.readFileSync(nestedClassPath).toString()).not.toMatch('com.lololol'); 54 55 const buckPath = '/myapp/android/app/BUCK'; 56 expect(fs.readFileSync(buckPath).toString()).toMatch('package = "xyz.bront.app"'); 57 expect(fs.readFileSync(buckPath).toString()).not.toMatch('com.lololol'); 58 }); 59 60 it('does not clobber itself if package has similar parts', async () => { 61 await renamePackageOnDisk({ android: { package: 'com.bront' } }, '/myapp'); 62 const mainActivityPath = '/myapp/android/app/src/main/java/com/bront/MainActivity.java'; 63 expect(fs.existsSync(mainActivityPath)).toBeTruthy(); 64 expect(fs.readFileSync(mainActivityPath).toString()).toMatch('package com.bront'); 65 }); 66 }); 67}); 68