2021-06-26 13:59:28 +00:00
|
|
|
import { BrowserWindow, MenuItemConstructorOptions } from 'electron';
|
2021-06-07 12:55:17 +00:00
|
|
|
|
|
|
|
jest.mock('../helpers/helpers');
|
|
|
|
import { isOSX } from '../helpers/helpers';
|
|
|
|
import { generateMenu } from './menu';
|
|
|
|
|
|
|
|
describe('generateMenu', () => {
|
|
|
|
let window: BrowserWindow;
|
|
|
|
const mockIsOSX: jest.SpyInstance = isOSX as jest.Mock;
|
|
|
|
let mockIsFullScreen: jest.SpyInstance;
|
|
|
|
let mockIsFullScreenable: jest.SpyInstance;
|
|
|
|
let mockIsSimpleFullScreen: jest.SpyInstance;
|
|
|
|
let mockSetFullScreen: jest.SpyInstance;
|
|
|
|
let mockSetSimpleFullScreen: jest.SpyInstance;
|
|
|
|
|
|
|
|
beforeEach(() => {
|
|
|
|
window = new BrowserWindow();
|
|
|
|
mockIsOSX.mockReset();
|
2021-06-26 13:59:28 +00:00
|
|
|
mockIsFullScreen = jest
|
|
|
|
.spyOn(window, 'isFullScreen')
|
|
|
|
.mockReturnValue(false);
|
|
|
|
mockIsFullScreenable = jest
|
|
|
|
.spyOn(window, 'isFullScreenable')
|
|
|
|
.mockReturnValue(true);
|
|
|
|
mockIsSimpleFullScreen = jest
|
|
|
|
.spyOn(window, 'isSimpleFullScreen')
|
|
|
|
.mockReturnValue(false);
|
2021-06-07 12:55:17 +00:00
|
|
|
mockSetFullScreen = jest.spyOn(window, 'setFullScreen');
|
|
|
|
mockSetSimpleFullScreen = jest.spyOn(window, 'setSimpleFullScreen');
|
|
|
|
});
|
|
|
|
|
|
|
|
afterAll(() => {
|
|
|
|
mockIsFullScreen.mockRestore();
|
|
|
|
mockIsFullScreenable.mockRestore();
|
|
|
|
mockIsSimpleFullScreen.mockRestore();
|
|
|
|
mockSetFullScreen.mockRestore();
|
|
|
|
mockSetSimpleFullScreen.mockRestore();
|
|
|
|
});
|
|
|
|
|
|
|
|
test('does not have fullscreen if not supported', () => {
|
|
|
|
mockIsOSX.mockReturnValue(false);
|
|
|
|
mockIsFullScreenable.mockReturnValue(false);
|
|
|
|
|
|
|
|
const menu = generateMenu(
|
|
|
|
{
|
|
|
|
nativefierVersion: '1.0.0',
|
2021-06-25 20:05:23 +00:00
|
|
|
zoom: 1.0,
|
2021-06-07 12:55:17 +00:00
|
|
|
disableDevTools: false,
|
|
|
|
},
|
|
|
|
window,
|
|
|
|
);
|
|
|
|
|
|
|
|
const editMenu = menu.filter((item) => item.label === '&View');
|
|
|
|
|
2021-06-26 13:59:28 +00:00
|
|
|
const fullscreen = (
|
|
|
|
editMenu[0].submenu as MenuItemConstructorOptions[]
|
|
|
|
).filter((item) => item.label === 'Toggle Full Screen');
|
2021-06-07 12:55:17 +00:00
|
|
|
|
|
|
|
expect(fullscreen).toHaveLength(1);
|
|
|
|
expect(fullscreen[0].enabled).toBe(false);
|
|
|
|
expect(fullscreen[0].visible).toBe(false);
|
|
|
|
|
|
|
|
expect(mockIsOSX).toHaveBeenCalled();
|
|
|
|
expect(mockIsFullScreenable).toHaveBeenCalled();
|
|
|
|
});
|
|
|
|
|
|
|
|
test('has fullscreen no matter what on mac', () => {
|
|
|
|
mockIsOSX.mockReturnValue(true);
|
|
|
|
mockIsFullScreenable.mockReturnValue(false);
|
|
|
|
|
|
|
|
const menu = generateMenu(
|
|
|
|
{
|
|
|
|
nativefierVersion: '1.0.0',
|
2021-06-25 20:05:23 +00:00
|
|
|
zoom: 1.0,
|
2021-06-07 12:55:17 +00:00
|
|
|
disableDevTools: false,
|
|
|
|
},
|
|
|
|
window,
|
|
|
|
);
|
|
|
|
|
|
|
|
const editMenu = menu.filter((item) => item.label === '&View');
|
|
|
|
|
2021-06-26 13:59:28 +00:00
|
|
|
const fullscreen = (
|
|
|
|
editMenu[0].submenu as MenuItemConstructorOptions[]
|
|
|
|
).filter((item) => item.label === 'Toggle Full Screen');
|
2021-06-07 12:55:17 +00:00
|
|
|
|
|
|
|
expect(fullscreen).toHaveLength(1);
|
|
|
|
expect(fullscreen[0].enabled).toBe(true);
|
|
|
|
expect(fullscreen[0].visible).toBe(true);
|
|
|
|
|
|
|
|
expect(mockIsOSX).toHaveBeenCalled();
|
|
|
|
expect(mockIsFullScreenable).toHaveBeenCalled();
|
|
|
|
});
|
|
|
|
|
|
|
|
test.each([true, false])(
|
|
|
|
'has a fullscreen menu item that toggles fullscreen',
|
|
|
|
(isFullScreen) => {
|
|
|
|
mockIsOSX.mockReturnValue(false);
|
|
|
|
mockIsFullScreenable.mockReturnValue(true);
|
|
|
|
mockIsFullScreen.mockReturnValue(isFullScreen);
|
|
|
|
|
|
|
|
const menu = generateMenu(
|
|
|
|
{
|
|
|
|
nativefierVersion: '1.0.0',
|
2021-06-25 20:05:23 +00:00
|
|
|
zoom: 1.0,
|
2021-06-07 12:55:17 +00:00
|
|
|
disableDevTools: false,
|
|
|
|
},
|
|
|
|
window,
|
|
|
|
);
|
|
|
|
|
|
|
|
const editMenu = menu.filter((item) => item.label === '&View');
|
|
|
|
|
2021-06-26 13:59:28 +00:00
|
|
|
const fullscreen = (
|
|
|
|
editMenu[0].submenu as MenuItemConstructorOptions[]
|
|
|
|
).filter((item) => item.label === 'Toggle Full Screen');
|
2021-06-07 12:55:17 +00:00
|
|
|
|
|
|
|
expect(fullscreen).toHaveLength(1);
|
|
|
|
expect(fullscreen[0].enabled).toBe(true);
|
|
|
|
expect(fullscreen[0].visible).toBe(true);
|
|
|
|
|
|
|
|
expect(mockIsOSX).toHaveBeenCalled();
|
|
|
|
expect(mockIsFullScreenable).toHaveBeenCalled();
|
|
|
|
|
2021-06-26 13:59:28 +00:00
|
|
|
// @ts-expect-error click is here TypeScript...
|
2021-06-07 12:55:17 +00:00
|
|
|
fullscreen[0].click(null, window);
|
|
|
|
|
|
|
|
expect(mockSetFullScreen).toHaveBeenCalledWith(!isFullScreen);
|
|
|
|
expect(mockSetSimpleFullScreen).not.toHaveBeenCalled();
|
|
|
|
},
|
|
|
|
);
|
|
|
|
|
|
|
|
test.each([true, false])(
|
|
|
|
'has a fullscreen menu item that toggles simplefullscreen as a fallback on mac',
|
|
|
|
(isFullScreen) => {
|
|
|
|
mockIsOSX.mockReturnValue(true);
|
|
|
|
mockIsFullScreenable.mockReturnValue(false);
|
|
|
|
mockIsSimpleFullScreen.mockReturnValue(isFullScreen);
|
|
|
|
|
|
|
|
const menu = generateMenu(
|
|
|
|
{
|
|
|
|
nativefierVersion: '1.0.0',
|
2021-06-25 20:05:23 +00:00
|
|
|
zoom: 1.0,
|
2021-06-07 12:55:17 +00:00
|
|
|
disableDevTools: false,
|
|
|
|
},
|
|
|
|
window,
|
|
|
|
);
|
|
|
|
|
|
|
|
const editMenu = menu.filter((item) => item.label === '&View');
|
|
|
|
|
2021-06-26 13:59:28 +00:00
|
|
|
const fullscreen = (
|
|
|
|
editMenu[0].submenu as MenuItemConstructorOptions[]
|
|
|
|
).filter((item) => item.label === 'Toggle Full Screen');
|
2021-06-07 12:55:17 +00:00
|
|
|
|
|
|
|
expect(fullscreen).toHaveLength(1);
|
|
|
|
expect(fullscreen[0].enabled).toBe(true);
|
|
|
|
expect(fullscreen[0].visible).toBe(true);
|
|
|
|
|
|
|
|
expect(mockIsOSX).toHaveBeenCalled();
|
|
|
|
expect(mockIsFullScreenable).toHaveBeenCalled();
|
|
|
|
|
2021-06-26 13:59:28 +00:00
|
|
|
// @ts-expect-error click is here TypeScript...
|
2021-06-07 12:55:17 +00:00
|
|
|
fullscreen[0].click(null, window);
|
|
|
|
|
|
|
|
expect(mockSetSimpleFullScreen).toHaveBeenCalledWith(!isFullScreen);
|
|
|
|
expect(mockSetFullScreen).not.toHaveBeenCalled();
|
|
|
|
},
|
|
|
|
);
|
|
|
|
});
|