Files
sousa-gecko/testing/web-platform/tests/html/semantics/popovers/resources/toggle-event-source-test.js
T
Luke Warlow b1427b9e2d Bug 2022935 [wpt PR 58451] - Fix flakiness with toggle event tests, a=testonly
Automatic update from web-platform-tests
Fix flakiness with toggle event tests (#58451)

Swaps double requestAnimationFrame with a step_timeout.
--

wpt-commits: c0591d1ae5a1bb052af6026cea6b09d82ac2d531
wpt-pr: 58451
2026-03-16 10:13:14 +00:00

75 lines
2.5 KiB
JavaScript

function createToggleEventSourceTest({
description,
target,
openFunc,
closeFunc,
openSource,
closeSource,
skipBeforetoggle}) {
promise_test(async () => {
let beforetoggleEvent = null;
let beforetoggleDuplicate = false;
let toggleEvent = null;
let toggleDuplicate = false;
target.addEventListener('beforetoggle', event => {
if (beforetoggleEvent) {
beforetoggleDuplicate = true;
}
beforetoggleEvent = event;
});
target.addEventListener('toggle', event => {
if (toggleEvent) {
toggleDuplicate = true;
}
toggleEvent = event;
});
await openFunc();
await new Promise(resolve => step_timeout(resolve, 0));
if (!skipBeforetoggle) {
assert_true(!!beforetoggleEvent,
'An opening beforetoggle event should have been fired.');
assert_false(beforetoggleDuplicate,
'Only one opening beforetoggle event should have been fired.');
assert_equals(beforetoggleEvent.newState, 'open',
'beforetoggle newState should be open.');
assert_equals(beforetoggleEvent.source, openSource,
'Opening beforetoggle.source.');
}
assert_true(!!toggleEvent,
'An opening toggle event should have been fired.');
assert_false(toggleDuplicate,
'Only one opening toggle event should have been fired.');
assert_equals(toggleEvent.newState, 'open',
'toggle newstate should be open.');
assert_equals(toggleEvent.source, openSource,
'Opening toggle.source.');
beforetoggleEvent = null;
beforetoggleDuplicate = false;
toggleEvent = null;
toggleDuplicate = false;
await closeFunc();
await new Promise(resolve => step_timeout(resolve, 0));
if (!skipBeforetoggle) {
assert_true(!!beforetoggleEvent,
'A closing beforetoggle event should have been fired.');
assert_false(beforetoggleDuplicate,
'Only one closing beforetoggle event should have been fired.');
assert_equals(beforetoggleEvent.newState, 'closed',
'beforetoggle newState should be closed.');
assert_equals(beforetoggleEvent.source, closeSource,
'Closing beforetoggle.source.');
}
assert_true(!!toggleEvent,
'A closing toggle event should have been fired.');
assert_false(toggleDuplicate,
'Only one closing toggle event should have been fired.');
assert_equals(toggleEvent.newState, 'closed',
'toggle newstate should be closed.');
assert_equals(toggleEvent.source, closeSource,
'Closing toggle.source.');
}, description);
}