diff --git a/src/tab-manager/__tests__/context-menu.test.js b/src/tab-manager/__tests__/context-menu.test.js index 1649fe38..05ce9f4e 100644 --- a/src/tab-manager/__tests__/context-menu.test.js +++ b/src/tab-manager/__tests__/context-menu.test.js @@ -18,18 +18,18 @@ describe('Tab Manager context-menu test suite', () => { let event; let listeners; let mockMenu; - let mockMenuItem; let params; let tabManager; beforeEach(() => { jest.resetModules(); mockMenu = { - append: jest.fn(), + entries: [], + append: jest.fn(e => mockMenu.entries.push(e)), popup: jest.fn() }; jest.mock('electron', () => require('../../__tests__').mockElectronInstance({ Menu: jest.fn(() => mockMenu), - MenuItem: jest.fn(() => mockMenuItem) + MenuItem: jest.fn(def => def) })); jest.mock('../../settings', () => ({ loadSettings: jest.fn(() => ({ @@ -106,6 +106,15 @@ describe('Tab Manager context-menu test suite', () => { 'adds MenuItem with label %s', async label => { expect(electron.MenuItem).toHaveBeenCalledWith(expect.objectContaining({label})); }); + describe('separator', () => { + test('groups are separated by a separator', async () => { + // separator after Back and Reload + expect(mockMenu.entries[2].type).toBe('separator'); + }); + test('last item is not a separator', () => { + expect(mockMenu.entries[mockMenu.entries.length - 1].type).not.toBe('separator'); + }); + }); describe('Back', () => { test('disabled when canGoBack returns false', async () => { expect(electron.MenuItem).toHaveBeenCalledWith(expect.objectContaining({ diff --git a/src/tab-manager/context-menu.js b/src/tab-manager/context-menu.js index b5a95de2..260bc643 100644 --- a/src/tab-manager/context-menu.js +++ b/src/tab-manager/context-menu.js @@ -65,10 +65,14 @@ const spellCheckContextMenu = async (event, params) => { const regularContextMenu = (event, params) => { const menu = new Menu(); - entries(event, params).forEach(group => { + const isVisible = me => !Object.keys(me).includes('visible') || me.visible === true; + entries(event, params).forEach((group, idx, arr) => { for (const entry of group) { menu.append(new MenuItem({...entry})); } + if (group.filter(isVisible).length > 0 && idx < arr.length - 1) { + menu.append(new MenuItem({type: 'separator'})); + } }); return menu; };