1*13c5c8bdSEvan Baconimport { resolveProps, setStrings } from '../withAndroidUserInterfaceStyle';
2*13c5c8bdSEvan Bacon
3*13c5c8bdSEvan Bacondescribe(resolveProps, () => {
4*13c5c8bdSEvan Bacon  it(`resolves no props`, () => {
5*13c5c8bdSEvan Bacon    expect(resolveProps({})).toStrictEqual({
6*13c5c8bdSEvan Bacon      userInterfaceStyle: undefined,
7*13c5c8bdSEvan Bacon    });
8*13c5c8bdSEvan Bacon  });
9*13c5c8bdSEvan Bacon
10*13c5c8bdSEvan Bacon  it(`uses more specific key`, () => {
11*13c5c8bdSEvan Bacon    expect(
12*13c5c8bdSEvan Bacon      resolveProps({
13*13c5c8bdSEvan Bacon        userInterfaceStyle: 'dark',
14*13c5c8bdSEvan Bacon        android: {
15*13c5c8bdSEvan Bacon          userInterfaceStyle: 'light',
16*13c5c8bdSEvan Bacon        },
17*13c5c8bdSEvan Bacon      })
18*13c5c8bdSEvan Bacon    ).toStrictEqual({
19*13c5c8bdSEvan Bacon      userInterfaceStyle: 'light',
20*13c5c8bdSEvan Bacon    });
21*13c5c8bdSEvan Bacon  });
22*13c5c8bdSEvan Bacon});
23*13c5c8bdSEvan Bacon
24*13c5c8bdSEvan Bacondescribe(setStrings, () => {
25*13c5c8bdSEvan Bacon  function getAllProps() {
26*13c5c8bdSEvan Bacon    return resolveProps({ userInterfaceStyle: 'dark' });
27*13c5c8bdSEvan Bacon  }
28*13c5c8bdSEvan Bacon  // TODO: Should we do validation on backgroundColor just for convenience?
29*13c5c8bdSEvan Bacon  it(`asserts an invalid color`, () => {
30*13c5c8bdSEvan Bacon    expect(() =>
31*13c5c8bdSEvan Bacon      setStrings(
32*13c5c8bdSEvan Bacon        { resources: {} },
33*13c5c8bdSEvan Bacon        resolveProps({
34*13c5c8bdSEvan Bacon          // @ts-expect-error
35*13c5c8bdSEvan Bacon          userInterfaceStyle: '-bacon-',
36*13c5c8bdSEvan Bacon        })
37*13c5c8bdSEvan Bacon      )
38*13c5c8bdSEvan Bacon    ).toThrow(/expo-system-ui: Invalid userInterfaceStyle: "-bacon-"/);
39*13c5c8bdSEvan Bacon  });
40*13c5c8bdSEvan Bacon
41*13c5c8bdSEvan Bacon  it(`sets all strings`, () => {
42*13c5c8bdSEvan Bacon    expect(setStrings({ resources: {} }, getAllProps())).toStrictEqual({
43*13c5c8bdSEvan Bacon      resources: {
44*13c5c8bdSEvan Bacon        string: [
45*13c5c8bdSEvan Bacon          {
46*13c5c8bdSEvan Bacon            $: {
47*13c5c8bdSEvan Bacon              name: 'expo_system_ui_user_interface_style',
48*13c5c8bdSEvan Bacon              translatable: 'false',
49*13c5c8bdSEvan Bacon            },
50*13c5c8bdSEvan Bacon            _: 'dark',
51*13c5c8bdSEvan Bacon          },
52*13c5c8bdSEvan Bacon        ],
53*13c5c8bdSEvan Bacon      },
54*13c5c8bdSEvan Bacon    });
55*13c5c8bdSEvan Bacon  });
56*13c5c8bdSEvan Bacon
57*13c5c8bdSEvan Bacon  it(`sets no strings`, () => {
58*13c5c8bdSEvan Bacon    expect(
59*13c5c8bdSEvan Bacon      setStrings(
60*13c5c8bdSEvan Bacon        {
61*13c5c8bdSEvan Bacon          resources: {
62*13c5c8bdSEvan Bacon            string: [],
63*13c5c8bdSEvan Bacon          },
64*13c5c8bdSEvan Bacon        },
65*13c5c8bdSEvan Bacon        {}
66*13c5c8bdSEvan Bacon      )
67*13c5c8bdSEvan Bacon    ).toStrictEqual({
68*13c5c8bdSEvan Bacon      resources: {
69*13c5c8bdSEvan Bacon        string: [],
70*13c5c8bdSEvan Bacon      },
71*13c5c8bdSEvan Bacon    });
72*13c5c8bdSEvan Bacon  });
73*13c5c8bdSEvan Bacon  it(`unsets string`, () => {
74*13c5c8bdSEvan Bacon    // Set all strings
75*13c5c8bdSEvan Bacon    const strings = setStrings({ resources: {} }, getAllProps());
76*13c5c8bdSEvan Bacon    // Unset all strings
77*13c5c8bdSEvan Bacon    expect(setStrings(strings, resolveProps({}))).toStrictEqual({
78*13c5c8bdSEvan Bacon      resources: {
79*13c5c8bdSEvan Bacon        string: [],
80*13c5c8bdSEvan Bacon      },
81*13c5c8bdSEvan Bacon    });
82*13c5c8bdSEvan Bacon  });
83*13c5c8bdSEvan Bacon  it(`redefines duplicates`, () => {
84*13c5c8bdSEvan Bacon    // Set all strings
85*13c5c8bdSEvan Bacon    const strings = setStrings({ resources: {} }, { userInterfaceStyle: 'dark' });
86*13c5c8bdSEvan Bacon
87*13c5c8bdSEvan Bacon    expect(strings.resources.string).toStrictEqual([
88*13c5c8bdSEvan Bacon      {
89*13c5c8bdSEvan Bacon        $: {
90*13c5c8bdSEvan Bacon          name: 'expo_system_ui_user_interface_style',
91*13c5c8bdSEvan Bacon          translatable: 'false',
92*13c5c8bdSEvan Bacon        },
93*13c5c8bdSEvan Bacon        // Test an initial value
94*13c5c8bdSEvan Bacon        _: 'dark',
95*13c5c8bdSEvan Bacon      },
96*13c5c8bdSEvan Bacon    ]);
97*13c5c8bdSEvan Bacon
98*13c5c8bdSEvan Bacon    expect(
99*13c5c8bdSEvan Bacon      setStrings(strings, resolveProps({ userInterfaceStyle: 'light' })).resources.string
100*13c5c8bdSEvan Bacon    ).toStrictEqual([
101*13c5c8bdSEvan Bacon      {
102*13c5c8bdSEvan Bacon        $: { name: 'expo_system_ui_user_interface_style', translatable: 'false' },
103*13c5c8bdSEvan Bacon        // Test a redefined value
104*13c5c8bdSEvan Bacon        _: 'light',
105*13c5c8bdSEvan Bacon      },
106*13c5c8bdSEvan Bacon    ]);
107*13c5c8bdSEvan Bacon  });
108*13c5c8bdSEvan Bacon});
109