Files
sousa-gecko/testing/web-platform/tests/css/cssom-view/element-scroll-arguments.html
T
Mustaq Ahmed c9321f8a85 Bug 2021518 [wpt PR 58301] - Make window.scroll* promises resolve at the end of a scroll, a=testonly
Automatic update from web-platform-tests
Make window.scroll* promises resolve at the end of a scroll

- This completes the Window hookup and passed an existing WPT.

- This CL also fixes no-op scrolls, without which another existing WPT
`window-scroll-arguments.html` would be failing with the promise hookup
here.

- A similar hookup CL for Element landed recently without us
noticing the above problem there because of missing test coverage. This
CL fills the coverage through `element-scroll-arguments.html`.

Bug: 41406914, 399877341
Fixed: 487938769
Change-Id: Idd1ed551c17898d4a0807b4a1f4cdd18fc25fcf3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7614669
Reviewed-by: Vladimir Levin <vmpstr@chromium.org>
Commit-Queue: Mustaq Ahmed <mustaq@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1594996}

--

wpt-commits: 07d971892930120f20a687e688bf031e5597928f
wpt-pr: 58301
2026-03-12 15:57:18 +00:00

70 lines
2.5 KiB
HTML

<!DOCTYPE HTML>
<title>Element.scroll* methods exception handling with various arguments</title>
<link rel="help"
href="https://drafts.csswg.org/cssom-view/#extension-to-the-element-interface">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<!--
This test makes sure that calling the element scrolling methods with a single
non-dictionary argument or with a dictionary whose 'behavior' field is invalid
throws an exception.
-->
<div id="container" style="height: 100px; width: 100px; overflow:scroll;">
<div style="height: 1000px; width: 1000px;"></div>
</div>
<script type="text/javascript">
"use strict";
const container = document.getElementById("container");
const x = 25;
const y = 50;
function reset() {
container.scrollTo(0, 0);
}
let scroll_methods = ["scrollTo", "scroll", "scrollBy"];
for (const scroll_method of scroll_methods) {
promise_test(async (test) => {
reset();
try {
await container[scroll_method]();
} catch(e) {
assert_unreached(e);
}
}, scroll_method + " with 0 arguments");
promise_test(async (test) => {
reset();
await promise_rejects_js(test, TypeError, container[scroll_method](x));
}, scroll_method + " with 1 non-dictionary argument");
promise_test(async (test) => {
reset();
try {
await container[scroll_method]({ });
await container[scroll_method]({ left: x });
await container[scroll_method]({ top: y });
await container[scroll_method]({ behavior: "auto" });
await container[scroll_method]({ behavior: "instant" });
await container[scroll_method]({ behavior: "smooth" });
await container[scroll_method]({ left: x, top: y });
await container[scroll_method]({ left: x, top: y, behavior: "auto" });
await container[scroll_method]({ left: x, top: y, behavior: "instant" });
await container[scroll_method]({ left: x, top: y, behavior: "smooth" });
} catch(e) {
assert_unreached(e);
}
}, scroll_method + " with a valid ScrollToOptions argument");
promise_test(async (test) => {
reset();
await promise_rejects_js(test, TypeError, container[scroll_method]({ behavior: "" }));
await promise_rejects_js(test, TypeError, container[scroll_method]({ left: x, top: y, behavior: "abcd" }));
await promise_rejects_js(test, TypeError, container[scroll_method]({ left: x, top: y, behavior: 200 }));
}, scroll_method + " with an invalid ScrollToOptions argument");
}
</script>