2022-08-01 17:44:10 +03:00
|
|
|
/**
|
|
|
|
* @license
|
|
|
|
* Copyright 2022 Google LLC
|
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
*/
|
|
|
|
|
2023-06-30 01:17:52 +03:00
|
|
|
import {LitElement} from 'lit';
|
|
|
|
|
2022-10-18 19:28:12 +03:00
|
|
|
import {Harness} from '../testing/harness.js';
|
2022-08-01 17:44:10 +03:00
|
|
|
|
2022-08-24 21:00:50 +03:00
|
|
|
import {Menu} from './lib/menu.js';
|
|
|
|
import {MenuItemHarness} from './lib/menuitem/harness.js';
|
2022-08-01 17:44:10 +03:00
|
|
|
|
2023-03-30 09:11:02 +03:00
|
|
|
export {MenuItemHarness} from './lib/menuitem/harness.js';
|
|
|
|
|
2022-08-01 17:44:10 +03:00
|
|
|
/**
|
|
|
|
* Test harness for menu.
|
|
|
|
*/
|
|
|
|
export class MenuHarness extends Harness<Menu> {
|
2023-01-26 04:14:09 +03:00
|
|
|
/**
|
|
|
|
* Shows the menu and returns the first list item element.
|
|
|
|
*/
|
|
|
|
protected override async getInteractiveElement() {
|
|
|
|
await this.element.updateComplete;
|
|
|
|
await this.show();
|
|
|
|
return (await this.getItems())[0].getInteractiveElement();
|
|
|
|
}
|
|
|
|
|
2022-08-01 17:44:10 +03:00
|
|
|
/** @return ListItem harnesses for the menu's items. */
|
|
|
|
getItems() {
|
2023-06-30 01:17:52 +03:00
|
|
|
return this.element.items.map(
|
|
|
|
(item) => new MenuItemHarness(item as typeof item&LitElement));
|
2022-08-01 17:44:10 +03:00
|
|
|
}
|
2023-01-26 04:14:09 +03:00
|
|
|
|
|
|
|
async show(quick = true) {
|
|
|
|
const menu = this.element;
|
|
|
|
menu.quick = quick;
|
|
|
|
if (menu.open) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
const opened = new Promise((resolve) => {
|
|
|
|
menu.addEventListener('opened', () => {
|
|
|
|
resolve(true);
|
|
|
|
}, {once: true});
|
|
|
|
});
|
|
|
|
|
|
|
|
menu.show();
|
|
|
|
await opened;
|
|
|
|
}
|
2022-08-01 17:44:10 +03:00
|
|
|
}
|