chrome-devtools-frontend
Version:
Chrome DevTools UI
77 lines (63 loc) • 2.75 kB
text/typescript
// 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 Helpers from '../../../testing/DOMHelpers.js'; // eslint-disable-line rulesdir/es-modules-import
import * as Buttons from '../buttons/buttons.js';
import * as RenderCoordinator from '../render_coordinator/render_coordinator.js';
import * as Dialogs from './dialogs.js';
describe('ButtonDialog', () => {
async function getButtonDialog(fieldToTest?: Partial<Dialogs.ButtonDialog.ButtonDialogData>) {
const defaultMinimumButtonDialogData: Dialogs.ButtonDialog.ButtonDialogData = {
openOnRender: false,
iconName: 'help',
variant: Buttons.Button.Variant.TOOLBAR,
dialogTitle: '',
};
const buttonDialog = new Dialogs.ButtonDialog.ButtonDialog();
buttonDialog.data = Object.assign(defaultMinimumButtonDialogData, fieldToTest);
Helpers.renderElementIntoDOM(buttonDialog);
await RenderCoordinator.done();
return buttonDialog;
}
function getButtonFromButtonDialog(buttonDialog: Dialogs.ButtonDialog.ButtonDialog): Buttons.Button.Button {
assert.isNotNull(buttonDialog.shadowRoot);
const button = buttonDialog.shadowRoot.querySelector('devtools-button');
if (!button) {
assert.fail('devtools-button not found');
}
assert.instanceOf(button, HTMLElement);
return button;
}
function getDialogFromButtonDialog(buttonDialog: Dialogs.ButtonDialog.ButtonDialog): Dialogs.Dialog.Dialog {
assert.isNotNull(buttonDialog.shadowRoot);
const dialog = buttonDialog.shadowRoot.querySelector('devtools-dialog');
if (!dialog) {
assert.fail('devtools-dialog not found');
}
assert.instanceOf(dialog, HTMLElement);
return dialog;
}
it('should display dialog on initial render when provided prop', async () => {
const buttonDialog = await getButtonDialog({
openOnRender: true,
});
const dialog = getDialogFromButtonDialog(buttonDialog);
assert.isTrue(dialog.hasAttribute('open'));
});
it('should not display dialog on initial render by default', async () => {
const buttonDialog = await getButtonDialog({
openOnRender: false,
});
const dialog = getDialogFromButtonDialog(buttonDialog);
assert.isFalse(dialog.hasAttribute('open'));
});
it('Opens if button is clicked', async () => {
const buttonDialog = await getButtonDialog({});
const dialog = getDialogFromButtonDialog(buttonDialog);
assert.isFalse(dialog.hasAttribute('open'));
const button = getButtonFromButtonDialog(buttonDialog);
button.click();
await RenderCoordinator.done();
assert.isTrue(dialog.hasAttribute('open'));
});
});