1082815dcSEvan Baconimport { ExpoConfig } from '@expo/config-types';
2082815dcSEvan Bacon
3082815dcSEvan Baconimport { getColorsAsObject } from '../Colors';
4082815dcSEvan Baconimport {
5082815dcSEvan Bacon  getStatusBarColor,
6082815dcSEvan Bacon  getStatusBarStyle,
7082815dcSEvan Bacon  setStatusBarColors,
8082815dcSEvan Bacon  setStatusBarStyles,
9082815dcSEvan Bacon} from '../StatusBar';
10082815dcSEvan Baconimport { getAppThemeLightNoActionBarGroup, getStylesGroupAsObject } from '../Styles';
11082815dcSEvan Bacon
12082815dcSEvan Baconit(`returns statusbar color if provided`, () => {
13082815dcSEvan Bacon  expect(getStatusBarColor({ androidStatusBar: { backgroundColor: '#111111' } })).toMatch(
14082815dcSEvan Bacon    '#111111'
15082815dcSEvan Bacon  );
16082815dcSEvan Bacon});
17082815dcSEvan Bacon
18082815dcSEvan Baconit(`returns statusbar style if provided`, () => {
19082815dcSEvan Bacon  expect(getStatusBarStyle({ androidStatusBar: { barStyle: 'dark-content' } })).toMatch(
20082815dcSEvan Bacon    'dark-content'
21082815dcSEvan Bacon  );
22082815dcSEvan Bacon});
23082815dcSEvan Bacon
24082815dcSEvan Baconit(`default statusbar style to light-content if none provided`, () => {
25082815dcSEvan Bacon  expect(getStatusBarStyle({})).toMatch('light-content');
26082815dcSEvan Bacon});
27082815dcSEvan Bacon
28082815dcSEvan Bacondescribe('e2e: write statusbar color and style to files correctly', () => {
29082815dcSEvan Bacon  it(`sets the colorPrimaryDark item in styles.xml and adds color to colors.xml if 'androidStatusBar.backgroundColor' is given`, async () => {
30082815dcSEvan Bacon    const config: ExpoConfig = {
31082815dcSEvan Bacon      name: 'foo',
32082815dcSEvan Bacon      slug: 'bar',
33082815dcSEvan Bacon      androidStatusBar: { backgroundColor: '#654321', barStyle: 'dark-content' },
34082815dcSEvan Bacon    };
35082815dcSEvan Bacon    const styles = setStatusBarStyles(config, { resources: {} });
36082815dcSEvan Bacon    const colors = setStatusBarColors(config, { resources: {} });
37082815dcSEvan Bacon
38*ed3bd27bSEvan Bacon    const group = getStylesGroupAsObject(styles, getAppThemeLightNoActionBarGroup())!;
39082815dcSEvan Bacon    expect(group.colorPrimaryDark).toBe('@color/colorPrimaryDark');
40082815dcSEvan Bacon    expect(group['android:windowLightStatusBar']).toBe('true');
41082815dcSEvan Bacon    // Ensure the version guard is added
42*ed3bd27bSEvan Bacon    expect(styles.resources.style![0].item[0].$['tools:targetApi']).toBe('23');
43*ed3bd27bSEvan Bacon    expect(getColorsAsObject(colors)!.colorPrimaryDark).toBe('#654321');
44082815dcSEvan Bacon  });
45082815dcSEvan Bacon
46082815dcSEvan Bacon  it(`skips setting the status bar to translucent if no 'androidStatusBar.backgroundColor' is given`, async () => {
47082815dcSEvan Bacon    const config: ExpoConfig = {
48082815dcSEvan Bacon      name: 'foo',
49082815dcSEvan Bacon      slug: 'bar',
50082815dcSEvan Bacon      androidStatusBar: {},
51082815dcSEvan Bacon    };
52082815dcSEvan Bacon
53082815dcSEvan Bacon    const styles = setStatusBarStyles(config, { resources: {} });
54082815dcSEvan Bacon    const colors = setStatusBarColors(config, { resources: {} });
55082815dcSEvan Bacon
56082815dcSEvan Bacon    const group = getStylesGroupAsObject(styles, getAppThemeLightNoActionBarGroup());
57082815dcSEvan Bacon
58082815dcSEvan Bacon    expect(group).toStrictEqual(null);
59082815dcSEvan Bacon    expect(colors.resources).toStrictEqual({});
60082815dcSEvan Bacon  });
61082815dcSEvan Bacon});
62