From 569e26451ee4269963803cda31ea9f2ad8b5fa66 Mon Sep 17 00:00:00 2001 From: Heilig Benedek Date: Tue, 30 Oct 2018 17:27:54 +0100 Subject: [PATCH] test: add menu item accelerator display tests --- atom/browser/api/atom_api_menu.cc | 8 +++++ atom/browser/api/atom_api_menu.h | 1 + spec/api-menu-item-spec.js | 54 ++++++++++++++++++++++++++++++- 3 files changed, 62 insertions(+), 1 deletion(-) diff --git a/atom/browser/api/atom_api_menu.cc b/atom/browser/api/atom_api_menu.cc index 1c4f4fcf41e55..393468bec78e3 100644 --- a/atom/browser/api/atom_api_menu.cc +++ b/atom/browser/api/atom_api_menu.cc @@ -155,6 +155,13 @@ base::string16 Menu::GetSublabelAt(int index) const { return model_->GetSublabelAt(index); } +base::string16 Menu::GetAcceleratorTextAt(int index) const { + auto* accelerator = new ui::Accelerator(); + model_->GetAcceleratorAtWithParams(index, true, accelerator); + + return accelerator ? accelerator->GetShortcutText() : base::string16(); +} + bool Menu::IsItemCheckedAt(int index) const { return model_->IsItemCheckedAt(index); } @@ -195,6 +202,7 @@ void Menu::BuildPrototype(v8::Isolate* isolate, .SetMethod("getCommandIdAt", &Menu::GetCommandIdAt) .SetMethod("getLabelAt", &Menu::GetLabelAt) .SetMethod("getSublabelAt", &Menu::GetSublabelAt) + .SetMethod("getAcceleratorTextAt", &Menu::GetAcceleratorTextAt) .SetMethod("isItemCheckedAt", &Menu::IsItemCheckedAt) .SetMethod("isEnabledAt", &Menu::IsEnabledAt) .SetMethod("isVisibleAt", &Menu::IsVisibleAt) diff --git a/atom/browser/api/atom_api_menu.h b/atom/browser/api/atom_api_menu.h index 26f2b679b6b7f..499263bf492b7 100644 --- a/atom/browser/api/atom_api_menu.h +++ b/atom/browser/api/atom_api_menu.h @@ -91,6 +91,7 @@ class Menu : public mate::TrackableObject, int GetCommandIdAt(int index) const; base::string16 GetLabelAt(int index) const; base::string16 GetSublabelAt(int index) const; + base::string16 GetAcceleratorTextAt(int index) const; bool IsItemCheckedAt(int index) const; bool IsEnabledAt(int index) const; bool IsVisibleAt(int index) const; diff --git a/spec/api-menu-item-spec.js b/spec/api-menu-item-spec.js index 5978f23d210f2..f2ea6e796d593 100644 --- a/spec/api-menu-item-spec.js +++ b/spec/api-menu-item-spec.js @@ -6,7 +6,7 @@ const { BrowserWindow, app, Menu, MenuItem } = remote const roles = require('../lib/browser/api/menu-item-roles') const { closeWindow } = require('./window-helpers') -const { expect } = chai +const { expect, assert } = chai chai.use(dirtyChai) describe('MenuItems', () => { @@ -389,4 +389,56 @@ describe('MenuItems', () => { expect(menu.items[0].submenu.items[0].overrideProperty).to.be.a('function') }) }) + + describe('MenuItem accelerators', () => { + it('should display modifiers correctly for simple keys', done => { + const menu = Menu.buildFromTemplate([ + { label: 'text', accelerator: 'CmdOrCtrl+A' }, + { label: 'text', accelerator: 'Shift+A' }, + { label: 'text', accelerator: 'Alt+A' } + ]) + + assert.strictEqual(menu.getAcceleratorTextAt(0), + `${(process.platform === 'darwin') ? 'Cmd' : 'Ctrl'}+A`) + assert.strictEqual(menu.getAcceleratorTextAt(1), 'Shift+A') + assert.strictEqual(menu.getAcceleratorTextAt(2), 'Alt+A') + done() + }) + + it('should display modifiers correctly for special keys', done => { + const menu = Menu.buildFromTemplate([ + { label: 'text', accelerator: 'CmdOrCtrl+Tab' }, + { label: 'text', accelerator: 'Shift+Tab' }, + { label: 'text', accelerator: 'Alt+Tab' } + ]) + + assert.strictEqual(menu.getAcceleratorTextAt(0), + `${(process.platform === 'darwin') ? 'Cmd' : 'Ctrl'}+Tab`) + assert.strictEqual(menu.getAcceleratorTextAt(1), 'Shift+Tab') + assert.strictEqual(menu.getAcceleratorTextAt(2), 'Alt+Tab') + done() + }) + + it('should not display modifiers twice', done => { + const menu = Menu.buildFromTemplate([ + { label: 'text', accelerator: 'Shift+Shift+A' }, + { label: 'text', accelerator: 'Shift+Shift+Tab' } + ]) + + assert.strictEqual(menu.getAcceleratorTextAt(0), 'Shift+A') + assert.strictEqual(menu.getAcceleratorTextAt(1), 'Shift+Tab') + done() + }) + + it('should display correctly for edge cases', done => { + const menu = Menu.buildFromTemplate([ + { label: 'text', accelerator: 'Control+Shift+=' }, + { label: 'text', accelerator: 'Control+Plus' } + ]) + + assert.strictEqual(menu.getAcceleratorTextAt(0), 'Ctrl+Shift+=') + assert.strictEqual(menu.getAcceleratorTextAt(1), 'Ctrl+Shift+=') + done() + }) + }) })