1import { vol } from 'memfs'; 2 3import { 4 getMainActivityAsync, 5 getProjectBuildGradleAsync, 6 getResourceXMLPathAsync, 7} from '../Paths'; 8 9jest.mock('fs'); 10 11describe(getMainActivityAsync, () => { 12 beforeAll(async () => { 13 vol.fromJSON( 14 { 15 './android/app/src/main/java/com/bacon/app/MainActivity.java': '...', 16 }, 17 '/app' 18 ); 19 vol.fromJSON( 20 { 21 './android/app/src/main/java/com/bacon/app/MainActivity.kt': '...', 22 }, 23 '/kt' 24 ); 25 }); 26 afterAll(async () => { 27 vol.reset(); 28 }); 29 30 it(`gets a java project`, async () => { 31 const mainActivity = await getMainActivityAsync('/app'); 32 expect(mainActivity.path).toBe( 33 '/app/android/app/src/main/java/com/bacon/app/MainActivity.java' 34 ); 35 expect(mainActivity.language).toBe('java'); 36 expect(mainActivity.contents).toBe('...'); 37 }); 38 it(`gets a kotlin project`, async () => { 39 const mainActivity = await getMainActivityAsync('/kt'); 40 expect(mainActivity.path).toBe('/kt/android/app/src/main/java/com/bacon/app/MainActivity.kt'); 41 expect(mainActivity.language).toBe('kt'); 42 expect(mainActivity.contents).toBe('...'); 43 }); 44}); 45 46describe(getProjectBuildGradleAsync, () => { 47 beforeAll(async () => { 48 vol.fromJSON( 49 { 50 './android/build.gradle': '...', 51 }, 52 '/app' 53 ); 54 vol.fromJSON( 55 { 56 './android/build.gradle.kts': '...', 57 }, 58 '/kt' 59 ); 60 }); 61 afterAll(async () => { 62 vol.reset(); 63 }); 64 65 it(`gets a groovy gradle`, async () => { 66 const file = await getProjectBuildGradleAsync('/app'); 67 expect(file.path).toBe('/app/android/build.gradle'); 68 expect(file.language).toBe('groovy'); 69 expect(file.contents).toBe('...'); 70 }); 71 it(`gets a kotlin gradle`, async () => { 72 const file = await getProjectBuildGradleAsync('/kt'); 73 expect(file.path).toBe('/kt/android/build.gradle.kts'); 74 expect(file.language).toBe('kt'); 75 expect(file.contents).toBe('...'); 76 }); 77}); 78 79describe(getResourceXMLPathAsync, () => { 80 beforeAll(async () => { 81 vol.fromJSON( 82 { 83 './android/app/src/main/res/values/colors.xml': '<resources></resources>', 84 // './android/app/src/main/res/values-night/colors.xml': '<resources></resources>', 85 }, 86 '/app' 87 ); 88 vol.fromJSON( 89 { 90 // no files -- specifically no android folder 91 }, 92 '/managed' 93 ); 94 }); 95 afterAll(async () => { 96 vol.reset(); 97 }); 98 99 it(`gets a resource that defaults to values`, async () => { 100 const path = await getResourceXMLPathAsync('/app', { name: 'colors' }); 101 expect(path).toBe('/app/android/app/src/main/res/values/colors.xml'); 102 }); 103 it(`gets a themed resource`, async () => { 104 const path = await getResourceXMLPathAsync('/app', { name: 'colors', kind: 'values-night' }); 105 expect(path).toBe('/app/android/app/src/main/res/values-night/colors.xml'); 106 }); 107 108 it(`throws when the android folder is missing`, async () => { 109 await expect(getResourceXMLPathAsync('/managed', { name: 'somn' })).rejects.toThrow( 110 /Android project folder is missing in project/ 111 ); 112 }); 113}); 114