1*082815dcSEvan Baconimport * as WarningAggregator from '../../utils/warnings';
2*082815dcSEvan Baconimport { getRequiresFullScreen, setRequiresFullScreen } from '../RequiresFullScreen';
3*082815dcSEvan Bacon
4*082815dcSEvan Baconit(`returns true if nothing provided`, () => {
5*082815dcSEvan Bacon  expect(getRequiresFullScreen({ ios: {} })).toBe(true);
6*082815dcSEvan Bacon});
7*082815dcSEvan Baconit(`returns false if nothing provided after 43`, () => {
8*082815dcSEvan Bacon  expect(getRequiresFullScreen({ ios: {}, sdkVersion: '43.0.0' })).toBe(false);
9*082815dcSEvan Bacon  expect(getRequiresFullScreen({ ios: {}, sdkVersion: 'UNVERSIONED' })).toBe(false);
10*082815dcSEvan Bacon});
11*082815dcSEvan Baconit(`asserts invalid SDK version`, () => {
12*082815dcSEvan Bacon  expect(() => getRequiresFullScreen({ ios: {}, sdkVersion: '43.0' })).toThrow(/version/);
13*082815dcSEvan Bacon});
14*082815dcSEvan Bacon
15*082815dcSEvan Baconit(`returns the given value if provided`, () => {
16*082815dcSEvan Bacon  expect(getRequiresFullScreen({ ios: { requireFullScreen: false } })).toBe(false);
17*082815dcSEvan Bacon  expect(getRequiresFullScreen({ ios: { requireFullScreen: true } })).toBe(true);
18*082815dcSEvan Bacon});
19*082815dcSEvan Bacon
20*082815dcSEvan Baconit(`sets UIRequiresFullScreen value`, () => {
21*082815dcSEvan Bacon  expect(setRequiresFullScreen({ ios: { requireFullScreen: false } }, {})).toMatchObject({
22*082815dcSEvan Bacon    UIRequiresFullScreen: false,
23*082815dcSEvan Bacon  });
24*082815dcSEvan Bacon
25*082815dcSEvan Bacon  expect(setRequiresFullScreen({}, {})).toMatchObject({
26*082815dcSEvan Bacon    UIRequiresFullScreen: true,
27*082815dcSEvan Bacon  });
28*082815dcSEvan Bacon});
29*082815dcSEvan Bacon
30*082815dcSEvan BaconbeforeEach(() => {
31*082815dcSEvan Bacon  // @ts-ignore: jest
32*082815dcSEvan Bacon  // eslint-disable-next-line import/namespace
33*082815dcSEvan Bacon  WarningAggregator.addWarningIOS = jest.fn();
34*082815dcSEvan Bacon});
35*082815dcSEvan Bacon
36*082815dcSEvan Baconit(`updates the UISupportedInterfaceOrientations~ipad values to support iPad multi-tasking`, () => {
37*082815dcSEvan Bacon  expect(setRequiresFullScreen({ ios: { requireFullScreen: false } }, {})).toMatchObject({
38*082815dcSEvan Bacon    UIRequiresFullScreen: false,
39*082815dcSEvan Bacon    'UISupportedInterfaceOrientations~ipad': [
40*082815dcSEvan Bacon      'UIInterfaceOrientationPortrait',
41*082815dcSEvan Bacon      'UIInterfaceOrientationPortraitUpsideDown',
42*082815dcSEvan Bacon      'UIInterfaceOrientationLandscapeLeft',
43*082815dcSEvan Bacon      'UIInterfaceOrientationLandscapeRight',
44*082815dcSEvan Bacon    ],
45*082815dcSEvan Bacon  });
46*082815dcSEvan Bacon
47*082815dcSEvan Bacon  expect(WarningAggregator.addWarningIOS).not.toBeCalled();
48*082815dcSEvan Bacon});
49*082815dcSEvan Bacon
50*082815dcSEvan Baconit(`warns when the predefined UISupportedInterfaceOrientations~ipad values are invalid`, () => {
51*082815dcSEvan Bacon  setRequiresFullScreen(
52*082815dcSEvan Bacon    { ios: { requireFullScreen: false } },
53*082815dcSEvan Bacon    {
54*082815dcSEvan Bacon      'UISupportedInterfaceOrientations~ipad': [
55*082815dcSEvan Bacon        'UIInterfaceOrientationPortrait',
56*082815dcSEvan Bacon        'UIInterfaceOrientationPortraitUpsideDown',
57*082815dcSEvan Bacon        'UIInterfaceOrientationLandscapeRight',
58*082815dcSEvan Bacon      ],
59*082815dcSEvan Bacon    }
60*082815dcSEvan Bacon  );
61*082815dcSEvan Bacon
62*082815dcSEvan Bacon  expect(WarningAggregator.addWarningIOS).toBeCalledTimes(1);
63*082815dcSEvan Bacon});
64*082815dcSEvan Bacon
65*082815dcSEvan Baconit(`does not warn when predefined orientation mask matches required values`, () => {
66*082815dcSEvan Bacon  setRequiresFullScreen(
67*082815dcSEvan Bacon    { ios: { requireFullScreen: false } },
68*082815dcSEvan Bacon    {
69*082815dcSEvan Bacon      'UISupportedInterfaceOrientations~ipad': [
70*082815dcSEvan Bacon        'UIInterfaceOrientationPortrait',
71*082815dcSEvan Bacon        'UIInterfaceOrientationPortraitUpsideDown',
72*082815dcSEvan Bacon        'UIInterfaceOrientationLandscapeLeft',
73*082815dcSEvan Bacon        'UIInterfaceOrientationLandscapeRight',
74*082815dcSEvan Bacon      ],
75*082815dcSEvan Bacon    }
76*082815dcSEvan Bacon  );
77*082815dcSEvan Bacon
78*082815dcSEvan Bacon  expect(WarningAggregator.addWarningIOS).not.toBeCalled();
79*082815dcSEvan Bacon});
80*082815dcSEvan Bacon
81*082815dcSEvan Baconit(`does not warn when predefined orientation mask is empty`, () => {
82*082815dcSEvan Bacon  setRequiresFullScreen(
83*082815dcSEvan Bacon    { ios: { requireFullScreen: false } },
84*082815dcSEvan Bacon    {
85*082815dcSEvan Bacon      'UISupportedInterfaceOrientations~ipad': [],
86*082815dcSEvan Bacon    }
87*082815dcSEvan Bacon  );
88*082815dcSEvan Bacon
89*082815dcSEvan Bacon  expect(WarningAggregator.addWarningIOS).not.toBeCalled();
90*082815dcSEvan Bacon});
91*082815dcSEvan Bacon
92*082815dcSEvan Baconit(`cannot remove predefined orientation mask`, () => {
93*082815dcSEvan Bacon  let plist = {};
94*082815dcSEvan Bacon  plist = setRequiresFullScreen({ ios: { requireFullScreen: false } }, plist);
95*082815dcSEvan Bacon  expect(plist['UISupportedInterfaceOrientations~ipad']?.length).toBe(4);
96*082815dcSEvan Bacon  plist = setRequiresFullScreen({ ios: { requireFullScreen: true } }, plist);
97*082815dcSEvan Bacon  expect(plist['UISupportedInterfaceOrientations~ipad']?.length).toBe(4);
98*082815dcSEvan Bacon  expect(WarningAggregator.addWarningIOS).not.toBeCalled();
99*082815dcSEvan Bacon});
100