/
githubmirror
/
nativefier
Обзор
Документация
Войти
/
githubmirror
/
nativefier
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
app/src/components/menu.test.ts
167 строк
5 KB
Adam Weeden
Make app strict TypeScript + linting (and add a shared project) (#1231)
26 июн 2021, 16:59
Не верифицирован
26 июн 2021, 16:59
b74c0bf
Код
Авторство
О чём код?
import { BrowserWindow, MenuItemConstructorOptions } from 'electron'; 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(); mockIsFullScreen = jest .spyOn(window, 'isFullScreen') .mockReturnValue(false); mockIsFullScreenable = jest .spyOn(window, 'isFullScreenable') .mockReturnValue(true); mockIsSimpleFullScreen = jest .spyOn(window, 'isSimpleFullScreen') .mockReturnValue(false); 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', zoom: 1.0, disableDevTools: false, }, window, ); const editMenu = menu.filter((item) => item.label === '&View'); const fullscreen = ( editMenu[0].submenu as MenuItemConstructorOptions[] ).filter((item) => item.label === 'Toggle Full Screen'); 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', zoom: 1.0, disableDevTools: false, }, window, ); const editMenu = menu.filter((item) => item.label === '&View'); const fullscreen = ( editMenu[0].submenu as MenuItemConstructorOptions[] ).filter((item) => item.label === 'Toggle Full Screen'); 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', zoom: 1.0, disableDevTools: false, }, window, ); const editMenu = menu.filter((item) => item.label === '&View'); const fullscreen = ( editMenu[0].submenu as MenuItemConstructorOptions[] ).filter((item) => item.label === 'Toggle Full Screen'); expect(fullscreen).toHaveLength(1); expect(fullscreen[0].enabled).toBe(true); expect(fullscreen[0].visible).toBe(true); expect(mockIsOSX).toHaveBeenCalled(); expect(mockIsFullScreenable).toHaveBeenCalled(); // @ts-expect-error click is here TypeScript... 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', zoom: 1.0, disableDevTools: false, }, window, ); const editMenu = menu.filter((item) => item.label === '&View'); const fullscreen = ( editMenu[0].submenu as MenuItemConstructorOptions[] ).filter((item) => item.label === 'Toggle Full Screen'); expect(fullscreen).toHaveLength(1); expect(fullscreen[0].enabled).toBe(true); expect(fullscreen[0].visible).toBe(true); expect(mockIsOSX).toHaveBeenCalled(); expect(mockIsFullScreenable).toHaveBeenCalled(); // @ts-expect-error click is here TypeScript... fullscreen[0].click(null, window); expect(mockSetSimpleFullScreen).toHaveBeenCalledWith(!isFullScreen); expect(mockSetFullScreen).not.toHaveBeenCalled(); }, ); });