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