File: snap-at-user-scroll-end.html

package info (click to toggle)
firefox 145.0.1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,653,528 kB
  • sloc: cpp: 7,594,999; javascript: 6,459,658; ansic: 3,752,909; python: 1,403,455; xml: 629,809; asm: 438,679; java: 186,421; sh: 67,287; makefile: 19,169; objc: 13,086; perl: 12,982; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (63 lines) | stat: -rw-r--r-- 1,985 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#scroll-snap-type" />
<title>Tests that window should snap at user scroll end.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/dom/events/scrolling/scroll_support.js"></script>
<script src="support/common.js"></script>
<style>
html {
  margin: 0px;
  scroll-snap-type: both mandatory;
}
#content {
  width: 2000px;
  height: 2000px;
  padding: 0px;
  margin: 0px;
}
#target {
  position: relative;
  left: 400px;
  top: 400px;
  width: 400px;
  height: 400px;
  background-color: lightblue;
  overflow: hidden;
  scroll-snap-align: start;
}
</style>
<div id="content">
  <div id="target">
    <!-- CSSScrollSnap
    Tests that the window snaps at user scroll end.
    Manual steps:
      1. Scroll the page once vertically and once horizontally.
      2. Verify in console (or otherwise) window scroll position is same as
      target's offset position -->
  </div>
</div>
<script>
promise_test(async t => {
  await waitForCompositorReady();
  const target = document.getElementById("target");
  // Inject scroll actions.
  const pos_x = 20;
  const pos_y = 20;
  const scroll_delta_x = 100;
  const scroll_delta_y = 100;
  const wheelPromise = waitForWheelEvent(window);
  await new test_driver.Actions()
      .scroll(pos_x, pos_y, scroll_delta_x, scroll_delta_y)
      .send()
  await wheelPromise;
  await waitForAnimationEnd(() => window.scrollY);
  assert_approx_equals(window.scrollX, target.offsetLeft, 0.5,
        "window.scrollX should be at snapped position.");
  assert_approx_equals(window.scrollY, target.offsetTop, 0.5,
        "window.scrollY should be at snapped position.");
}, "Tests that window should snap at user scroll end.");
</script>