From b9aeb1703c80233b44392b1240e42500a83cff1b Mon Sep 17 00:00:00 2001 From: Matt Bell Date: Mon, 2 Jul 2018 14:32:20 -0700 Subject: [PATCH] Added spec for native app menu --- .../specs/__snapshots__/menu.spec.js.snap | 56 ++++++++++++++ test/unit/specs/menu.spec.js | 74 +++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 test/unit/specs/__snapshots__/menu.spec.js.snap create mode 100644 test/unit/specs/menu.spec.js diff --git a/test/unit/specs/__snapshots__/menu.spec.js.snap b/test/unit/specs/__snapshots__/menu.spec.js.snap new file mode 100644 index 0000000000..686631add4 --- /dev/null +++ b/test/unit/specs/__snapshots__/menu.spec.js.snap @@ -0,0 +1,56 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`App Menu should create the app menu 1`] = ` +Array [ + Array [ + Array [ + Object { + "label": "Cosmos Voyager", + "submenu": Array [ + Object { + "click": [Function], + "label": "About Cosmos Voyager", + "selector": "orderFrontStandardAboutPanel:", + }, + Object { + "type": "separator", + }, + Object { + "accelerator": "Command+Q", + "click": [Function], + "label": "Quit", + }, + ], + }, + Object { + "label": "Edit", + "submenu": Array [ + Object { + "accelerator": "CmdOrCtrl+X", + "label": "Cut", + "selector": "cut:", + }, + Object { + "accelerator": "CmdOrCtrl+C", + "label": "Copy", + "selector": "copy:", + }, + Object { + "accelerator": "CmdOrCtrl+V", + "label": "Paste", + "selector": "paste:", + }, + ], + }, + ], + ], +] +`; + +exports[`App Menu should create the app menu 2`] = ` +Array [ + Array [ + undefined, + ], +] +`; diff --git a/test/unit/specs/menu.spec.js b/test/unit/specs/menu.spec.js new file mode 100644 index 0000000000..57656c8ca6 --- /dev/null +++ b/test/unit/specs/menu.spec.js @@ -0,0 +1,74 @@ +const { join } = require("path") + +let mainWindow +describe("App Menu", () => { + beforeEach(() => { + jest.resetModules() + jest.unmock("electron") + + mainWindow = { + webContents: { send: jest.fn() } + } + + jest.mock("electron", () => ({ + Menu: { + buildFromTemplate: jest.fn(menu => { + menu + }), + setApplicationMenu: jest.fn() + }, + app: { + quit: jest.fn() + } + })) + + let createMenu = require("../../../app/src/main/menu.js") + + createMenu(mainWindow) + }) + + it("should create the app menu", function() { + expect( + require("electron").Menu.buildFromTemplate.mock.calls + ).toMatchSnapshot() + expect( + require("electron").Menu.setApplicationMenu.mock.calls + ).toMatchSnapshot() + }) + + it("should quit app when clicking Quit menu item", function() { + let menu = require("electron").Menu.buildFromTemplate.mock.calls[0][0] + let quitItem = menu + .find(({ label }) => label === "Cosmos Voyager") + .submenu.find(({ label }) => label === "Quit") + + expect(require("electron").app.quit.mock.calls.length).toBe(0) + quitItem.click() + expect(require("electron").app.quit.mock.calls.length).toBe(1) + }) + + it("should send 'open-about-menu' when clicking 'About'", function() { + process.platform = "linux" + let menu = require("electron").Menu.buildFromTemplate.mock.calls[0][0] + let aboutItem = menu + .find(({ label }) => label === "Cosmos Voyager") + .submenu.find(({ label }) => label === "About Cosmos Voyager") + + expect(mainWindow.webContents.send.mock.calls.length).toBe(0) + aboutItem.click() + expect(mainWindow.webContents.send.mock.calls.length).toBe(1) + expect(mainWindow.webContents.send.mock.calls[0][0]).toBe("open-about-menu") + }) + + it("should not send 'open-about-menu' when clicking 'About' on mac", function() { + process.platform = "darwin" + let menu = require("electron").Menu.buildFromTemplate.mock.calls[0][0] + let aboutItem = menu + .find(({ label }) => label === "Cosmos Voyager") + .submenu.find(({ label }) => label === "About Cosmos Voyager") + + expect(mainWindow.webContents.send.mock.calls.length).toBe(0) + aboutItem.click() + expect(mainWindow.webContents.send.mock.calls.length).toBe(0) + }) +})