blob: b720f5e34489abdafad52d0cecbfaeeef60d226a [file] [log] [blame]
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import '../test/common-test-setup';
import {assert} from '@open-wc/testing';
import {
fire,
fireAlert,
fireError,
fireNoBubble,
fireNoBubbleNoCompose,
waitForEventOnce,
} from './event-util';
declare global {
interface HTMLElementEventMap {
'custom-event': CustomEvent<{message: string}>;
}
}
suite('event-util tests', () => {
let target: HTMLElement;
setup(() => {
target = document.createElement('div');
document.body.appendChild(target);
});
teardown(() => {
document.body.removeChild(target);
});
test('fire dispatches custom event with correct properties', () => {
const detail = {message: 'test'};
let receivedEvent: CustomEvent | undefined;
target.addEventListener('custom-event', (e: Event) => {
receivedEvent = e as CustomEvent;
});
fire(target, 'custom-event', detail);
assert.isTrue(receivedEvent?.bubbles);
assert.isTrue(receivedEvent?.composed);
assert.deepEqual(receivedEvent?.detail, detail);
});
test('fireNoBubble dispatches non-bubbling event', () => {
const detail = {message: 'test'};
let receivedEvent: CustomEvent | undefined;
target.addEventListener('custom-event', (e: Event) => {
receivedEvent = e as CustomEvent;
});
fireNoBubble(target, 'custom-event', detail);
assert.isFalse(receivedEvent?.bubbles);
assert.isTrue(receivedEvent?.composed);
assert.deepEqual(receivedEvent?.detail, detail);
});
test('fireNoBubbleNoCompose dispatches non-bubbling and non-composed event', () => {
const detail = {message: 'test'};
let receivedEvent: CustomEvent | undefined;
target.addEventListener('custom-event', (e: Event) => {
receivedEvent = e as CustomEvent;
});
fireNoBubbleNoCompose(target, 'custom-event', detail);
assert.isFalse(receivedEvent?.bubbles);
assert.isFalse(receivedEvent?.composed);
assert.deepEqual(receivedEvent?.detail, detail);
});
test('fireAlert dispatches show-alert event with correct detail', () => {
const message = 'test alert';
let receivedEvent: CustomEvent | undefined;
target.addEventListener('show-alert', (e: Event) => {
receivedEvent = e as CustomEvent;
});
fireAlert(target, message);
assert.deepEqual(receivedEvent?.detail, {
message,
showDismiss: true,
});
});
test('fireError dispatches show-error event with correct detail', () => {
const message = 'test error';
let receivedEvent: CustomEvent | undefined;
target.addEventListener('show-error', (e: Event) => {
receivedEvent = e as CustomEvent;
});
fireError(target, message);
assert.deepEqual(receivedEvent?.detail, {message});
});
test('waitForEventOnce resolves with event when fired', async () => {
const detail = {message: 'test'};
const eventPromise = waitForEventOnce(target, 'custom-event');
fire(target, 'custom-event', detail);
const receivedEvent = await eventPromise;
assert.deepEqual(receivedEvent.detail, detail);
});
});