summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/cssom-view/scrollintoview.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/css/cssom-view/scrollintoview.html')
-rw-r--r--testing/web-platform/tests/css/cssom-view/scrollintoview.html113
1 files changed, 113 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/cssom-view/scrollintoview.html b/testing/web-platform/tests/css/cssom-view/scrollintoview.html
new file mode 100644
index 0000000000..7a7ecfafcc
--- /dev/null
+++ b/testing/web-platform/tests/css/cssom-view/scrollintoview.html
@@ -0,0 +1,113 @@
+<!DOCTYPE html>
+<title>CSSOM View - scrollIntoView</title>
+<meta charset="utf-8">
+<meta name="viewport" content="initial-scale=1">
+<link rel="author" title="Chris Wu" href="mailto:pwx.frontend@gmail.com">
+<link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview">
+<link rel="help" href="https://webidl.spec.whatwg.org/#es-operations">
+<link rel="help" href="https://webidl.spec.whatwg.org/#es-overloads">
+<meta name="flags" content="dom">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+body.running { margin: 0; padding: 4000px; overflow: hidden }
+body.running #testDiv {
+ width: 200px;
+ height: 200px;
+ background-color: lightgreen;
+}
+</style>
+<body class=running>
+<div id=testDiv></div>
+<div id="log"></div>
+<script>
+var testDiv = document.getElementById('testDiv');
+
+var expectedXLeft = 4000;
+var expectedXRight = 4000 - window.innerWidth + testDiv.clientWidth;
+var expectedXCenter = 4000 - (window.innerWidth / 2) + (testDiv.clientWidth / 2);
+
+var expectedYTop = 4000;
+var expectedYBottom = 4000 - window.innerHeight + testDiv.clientHeight;
+var expectedYCenter = 4000 - (window.innerHeight / 2) + (testDiv.clientHeight / 2);
+
+[
+ ["omitted argument", "nearest", expectedYTop],
+ [true, "nearest", expectedYTop],
+ [false, "nearest", expectedYBottom],
+ [undefined, "nearest", expectedYTop],
+ [null, "nearest", expectedYTop],
+ [{}, "nearest", expectedYTop],
+ [{block: "center", inline: "center"}, expectedXCenter, expectedYCenter],
+ [{block: "start", inline: "start"}, expectedXLeft, expectedYTop],
+ [{block: "end", inline: "end"}, expectedXRight, expectedYBottom],
+ [{block: "nearest", inline: "nearest"}, "nearest", "nearest"],
+].forEach(([input, expectedX, expectedY]) => {
+ test(() => {
+ window.scrollTo(0, 0);
+ testScrollIntoView(input);
+ var x = (expectedX === "nearest") ? expectedXRight : expectedX;
+ var y = (expectedY === "nearest") ? expectedYBottom : expectedY;
+ assert_approx_equals(window.scrollX, x, 0.5, 'scrollX');
+ assert_approx_equals(window.scrollY, y, 0.5, 'scrollY');
+ }, `scrollIntoView(${format_input(input)}) starting at left,top`);
+
+ test(() => {
+ window.scrollTo(0, 12000);
+ testScrollIntoView(input);
+ var x = (expectedX === "nearest") ? expectedXRight : expectedX;
+ var y = (expectedY === "nearest") ? expectedYTop : expectedY;
+ assert_approx_equals(window.scrollX, x, 0.5, 'scrollX');
+ assert_approx_equals(window.scrollY, y, 0.5, 'scrollY');
+ }, `scrollIntoView(${format_input(input)}) starting at left,bottom`);
+
+ test(() => {
+ window.scrollTo(12000, 0);
+ testScrollIntoView(input);
+ var x = (expectedX === "nearest") ? expectedXLeft : expectedX;
+ var y = (expectedY === "nearest") ? expectedYBottom : expectedY;
+ assert_approx_equals(window.scrollX, x, 0.5, 'scrollX');
+ assert_approx_equals(window.scrollY, y, 0.5, 'scrollY');
+ }, `scrollIntoView(${format_input(input)}) starting at right,top`);
+
+ test(() => {
+ window.scrollTo(12000, 12000);
+ testScrollIntoView(input);
+ var x = (expectedX === "nearest") ? expectedXLeft : expectedX;
+ var y = (expectedY === "nearest") ? expectedYTop : expectedY;
+ assert_approx_equals(window.scrollX, x, 0.5, 'scrollX');
+ assert_approx_equals(window.scrollY, y, 0.5, 'scrollY');
+ }, `scrollIntoView(${format_input(input)}) starting at right,bottom`);
+});
+
+function testScrollIntoView(input) {
+ if (input === "omitted argument") {
+ testDiv.scrollIntoView();
+ } else {
+ testDiv.scrollIntoView(input);
+ }
+}
+
+// This formats dict as a string suitable as test name.
+// format_value() is provided by testharness.js,
+// which also preserves sign for -0.
+function format_dict(dict) {
+ const props = [];
+ for (let prop in dict) {
+ props.push(`${prop}: ${format_value(dict[prop])}`);
+ }
+ return `{${props.join(', ')}}`;
+}
+
+function format_input(input) {
+ if (input === "omitted argument") {
+ return "";
+ } else if (input === null || typeof input !== "object") {
+ return format_value(input);
+ }
+ return format_dict(input);
+}
+
+document.body.classList.remove('running');
+window.scrollTo(0, 0);
+</script>