// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
async function reset(t, scrollers) {
for (const scroller of scrollers) {
await waitForScrollReset(t, scroller);
}
}
/**
* This tests executing scrollIntoView on multiple scroll containers at the same
* time. It assumes and verifies vertical scrolling.
*/
async function simultaneousScrollIntoViewsTest(test,
behaviors,
targets,
scrollers,
target_offsets) {
assert_equals(targets.length, behaviors.length,
"equal numbers of targets and behaviors provided");
assert_equals(scrollers.length, target_offsets.length,
"equal numbers of scrollers and target_offsets provided");
await reset(test, scrollers);
await waitForCompositorCommit();
// All scrollers should be at an offset of 0.
for (const scroller of scrollers) {
assert_equals(scroller.scrollTop, 0, `${scroller.id}'s scrollTop is reset`);
}
const scrollend_promises = Array.from(scrollers, (scroller) => {
return waitForScrollEnd(scroller);
});
// Scroll all targets into view.
for (let idx = 0; idx < targets.length; idx++) {
targets[idx].scrollIntoView({
block: "start",
behavior: behaviors[idx]
});
}
await Promise.all(scrollend_promises);
// Verify the expected positions os all scrollers.
for (let idx = 0; idx < scrollers.length; idx++) {
assert_approx_equals(scrollers[idx].scrollTop, target_offsets[idx], 1,
`scrollIntoView finished executing on ${scrollers[idx].id}`
);
}
}