blob: d3f87d13588867bcc35d0b0df4bbda7de6e1d19f [file] [log] [blame]
// Copyright 2024 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import * as UI from '../ui/legacy/legacy.js';
export function getMenu(action: () => void): UI.ContextMenu.ContextMenu {
const sandbox = sinon.createSandbox();
const contextMenuShow = sandbox.stub(UI.ContextMenu.ContextMenu.prototype, 'show').resolves();
action();
sandbox.restore();
return contextMenuShow.thisValues[0];
}
export function getMenuForToolbarButton(button: UI.Toolbar.ToolbarMenuButton): UI.ContextMenu.ContextMenu {
return getMenu(() => {
button.clicked(new MouseEvent('click', {
bubbles: true,
cancelable: true,
}));
});
}
export function findMenuItemWithLabel(section: UI.ContextMenu.Section, label: string): UI.ContextMenu.Item|undefined {
return section.items.find((item: UI.ContextMenu.Item) => item.buildDescriptor().label === label);
}
export function getMenuItemLabels(section: UI.ContextMenu.Section): string[] {
return section.items.map((item: UI.ContextMenu.Item) => item.buildDescriptor().label as string);
}
export function getContextMenuForElement(element: Element, target?: Element): UI.ContextMenu.ContextMenu {
return getMenu(() => {
const event = new MouseEvent('contextmenu', {bubbles: true});
if (target) {
sinon.stub(event, 'target').value(target);
}
element.dispatchEvent(event);
});
}
export function getMenuForShiftClick(element: Element): UI.ContextMenu.ContextMenu {
return getMenu(() => {
element.dispatchEvent(new MouseEvent('click', {shiftKey: true}));
});
}