blob: 311ae06e9934daf70c9f7822ad0e073633c6f1a6 [file] [log] [blame]
(async function() {
var menu = new UI.SoftContextMenu([{
type: 'item',
label: 'First',
enabled: true
},
{
type: 'subMenu',
label: 'Second',
enabled: true,
subItems: [
{type: 'subMenu', label: 'Child 1', enabled: true, subItems: [{type: 'item', label: 'Grandchild', id: 'Grandchild', enabled: true}]},
{type: 'item', label: 'Child 2', enabled: true},
{type: 'item', label: 'Child 3', enabled: true},
{type: 'item', label: 'Child 4', enabled: true}
]
},
{
type: 'separator',
},{
type: 'item',
label: 'Third',
enabled: true
}], item => TestRunner.addResult('Item Selected: ' + item));
var initialFocusedElement = UI.inspectorView.element.createChild('div');
initialFocusedElement.textContent = 'Initial Focused Element';
initialFocusedElement.tabIndex = -1;
initialFocusedElement.focus();
dumpContextMenu();
menu.show(document, new AnchorBox(50, 50, 0, 0));
dumpContextMenu();
pressKey('ArrowDown');
pressKey('ArrowDown');
pressKey('ArrowDown');
pressKey('ArrowUp');
pressKey('ArrowUp');
pressKey('ArrowUp');
pressKey('ArrowDown');
TestRunner.addResult('Enter Submenu');
pressKey('ArrowRight');
pressKey('ArrowDown');
pressKey('ArrowDown');
pressKey('ArrowDown');
TestRunner.addResult('Leave Submenu ArrowLeft');
pressKey('ArrowLeft');
pressKey('ArrowRight');
TestRunner.addResult('Leave Submenu Escape');
pressKey('Escape');
TestRunner.addResult('Enter Sub-Submenu');
pressKey(' ');
pressKey('Enter');
pressKey('Enter');
TestRunner.completeTest();
function pressKey(key) {
var element = document.deepActiveElement();
if (!element)
return;
element.dispatchEvent(TestRunner.createKeyEvent(key));
if (key === ' ')
key = 'Space';
TestRunner.addResult(key);
dumpContextMenu();
}
function dumpContextMenu() {
if (initialFocusedElement.hasFocus()) {
TestRunner.addResult('Initial focused element has focus');
return;
}
var selection = '';
var subMenu = menu;
var activeElement = document.deepActiveElement();
do {
if (selection)
selection += ' -> ';
if (subMenu._contextMenuElement === activeElement)
selection += '[';
if (subMenu._highlightedMenuItemElement)
selection += subMenu._highlightedMenuItemElement.textContent.replace(/[^A-z0-9 ]/g, '');
else
selection += 'null'
if (subMenu._contextMenuElement === activeElement)
selection += ']';
}
while (subMenu = subMenu._subMenu)
TestRunner.addResult(selection);
}
})();