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