Skip to content

Commit

Permalink
test: add menu item accelerator display tests
Browse files Browse the repository at this point in the history
  • Loading branch information
brenca committed Oct 30, 2018
1 parent 4fb2de6 commit 569e264
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 1 deletion.
8 changes: 8 additions & 0 deletions atom/browser/api/atom_api_menu.cc
Expand Up @@ -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);
}
Expand Down Expand Up @@ -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)
Expand Down
1 change: 1 addition & 0 deletions atom/browser/api/atom_api_menu.h
Expand Up @@ -91,6 +91,7 @@ class Menu : public mate::TrackableObject<Menu>,
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;
Expand Down
54 changes: 53 additions & 1 deletion spec/api-menu-item-spec.js
Expand Up @@ -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', () => {
Expand Down Expand Up @@ -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()
})
})
})

0 comments on commit 569e264

Please sign in to comment.