xref: /expo/apps/test-suite/tests/NavigationBar.js (revision 4281e48e)
1import * as NavigationBar from 'expo-navigation-bar';
2import { Platform } from 'react-native';
3
4export const name = 'NavigationBar';
5
6export async function test(t) {
7  if (Platform.OS !== 'android') return;
8  async function flipValueAsync({ getAsync, setAsync, values }) {
9    // Set initial value to adjust for any state.
10    await setAsync(values[0]);
11
12    // Get the newly set value.
13    const value = await getAsync();
14    t.expect(value).toBeDefined();
15    t.expect(value).toBe(values[0]);
16
17    // Toggle value again and ensure it's different.
18    const nextValue = value === values[0] ? values[1] : values[0];
19    await setAsync(nextValue);
20    const mutated = await getAsync();
21    t.expect(mutated).toBe(nextValue);
22  }
23
24  t.describe(`NavigationBar.setButtonStyleAsync()`, () => {
25    t.it(`flips a value`, async () => {
26      await flipValueAsync({
27        getAsync: NavigationBar.getButtonStyleAsync,
28        setAsync: NavigationBar.setButtonStyleAsync,
29        values: ['light', 'dark'],
30      });
31    });
32  });
33
34  t.describe(`NavigationBar.setPositionAsync()`, () => {
35    t.it(`flips a value`, async () => {
36      await flipValueAsync({
37        getAsync: NavigationBar.unstable_getPositionAsync,
38        setAsync: NavigationBar.setPositionAsync,
39        values: ['absolute', 'relative'],
40      });
41    });
42  });
43
44  t.describe(`NavigationBar.setVisibilityAsync()`, () => {
45    t.it(`flips a value`, async () => {
46      await flipValueAsync({
47        getAsync: NavigationBar.getVisibilityAsync,
48        setAsync: NavigationBar.setVisibilityAsync,
49        values: ['visible', 'hidden'],
50      });
51    });
52  });
53  t.describe(`NavigationBar.setBehaviorAsync()`, () => {
54    t.it(`flips a value`, async () => {
55      await flipValueAsync({
56        getAsync: NavigationBar.getBehaviorAsync,
57        setAsync: NavigationBar.setBehaviorAsync,
58        values: ['overlay-swipe', 'inset-touch'],
59      });
60    });
61  });
62  t.describe(`NavigationBar.setBorderColorAsync()`, () => {
63    t.it(`flips a value`, async () => {
64      await flipValueAsync({
65        getAsync: NavigationBar.getBorderColorAsync,
66        setAsync: NavigationBar.setBorderColorAsync,
67        values: ['#ff0000', '#ff00ff'],
68      });
69    });
70  });
71  t.describe(`NavigationBar.setBackgroundColorAsync()`, () => {
72    t.it(`flips a value`, async () => {
73      await flipValueAsync({
74        getAsync: NavigationBar.getBackgroundColorAsync,
75        setAsync: NavigationBar.setBackgroundColorAsync,
76        values: ['#ff0000', '#ff00ff'],
77      });
78    });
79  });
80}
81