<!DOCTYPE html>
<meta charset=utf-8>
<title>cssom-view - elementScroll</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
#section {
width: 300px;
height: 500px;
/*position: absolute;*/
top: 16px;
left: 16px;
border: inset gray 3px;
overflow: hidden;
background: white;
}
#scrollable {
width: 400px;
height: 700px;
background: linear-gradient(135deg, red, blue);
}
</style>
<section id="section">
<div id="scrollable"></div>
<div id="unrelated"></div>
</section>
<script>
setup({explicit_done:true});
window.onload = function () {
var section = document.getElementById("section");
var unrelated = document.getElementById("unrelated");
test(function () {
assert_equals(section.scrollTop, 0, "initial scrollTop should be 0");
assert_equals(section.scrollLeft, 0, "initial scrollLeft should be 0");
section.scrollTop = 30;
section.scrollLeft = 40;
assert_equals(section.scrollTop, 30, "changed scrollTop should be 40");
assert_equals(section.scrollLeft, 40, "changed scrollLeft should be 40");
assert_equals(unrelated.scrollTop, 0, "unrelated element should not scroll");
assert_equals(unrelated.scrollLeft, 0, "unrelated element should not scroll");
}, "Element scrollTop/Left getter/setter test");
test(function () {
section.scroll(50, 60);
assert_equals(section.scrollLeft, 50, "changed scrollLeft should be 50");
assert_equals(section.scrollTop, 60, "changed scrollTop should be 60");
}, "Element scroll test (two arguments)");
test(function () {
section.scroll({left: 55, top: 65});
assert_equals(section.scrollLeft, 55, "changed scrollLeft should be 55");
assert_equals(section.scrollTop, 65, "changed scrollTop should be 65");
section.scroll({left: 85});
assert_equals(section.scrollLeft, 85, "changed scrollLeft should be 85");
assert_equals(section.scrollTop, 65, "scrollTop should stay at 65");
section.scroll({top: 75});
assert_equals(section.scrollLeft, 85, "scrollLeft should stay at 85");
assert_equals(section.scrollTop, 75, "changed scrollTop should be 75");
section.scroll({});
assert_equals(section.scrollLeft, 85, "scrollLeft should stay at 85");
assert_equals(section.scrollTop, 75, "scrollTop should stay at 75");
section.scroll();
assert_equals(section.scrollLeft, 85, "scrollLeft should stay at 85");
assert_equals(section.scrollTop, 75, "scrollTop should stay at 75");
}, "Element scroll test (one argument)");
test(function () {
section.scrollTo(80, 70);
assert_equals(section.scrollLeft, 80, "changed scrollLeft should be 70");
assert_equals(section.scrollTop, 70, "changed scrollTop should be 80");
}, "Element scrollTo test (two arguments)");
test(function () {
section.scrollTo({left: 75, top: 85});
assert_equals(section.scrollLeft, 75, "changed scrollLeft should be 75");
assert_equals(section.scrollTop, 85, "changed scrollTop should be 85");
section.scrollTo({left: 65});
assert_equals(section.scrollLeft, 65, "changed scrollLeft should be 65");
assert_equals(section.scrollTop, 85, "scrollTop should stay at 85");
section.scrollTo({top: 55});
assert_equals(section.scrollLeft, 65, "scrollLeft should stay at 65");
assert_equals(section.scrollTop, 55, "changed scrollTop should be 55");
section.scrollTo({});
assert_equals(section.scrollLeft, 65, "scrollLeft should stay at 65");
assert_equals(section.scrollTop, 55, "scrollTop should stay at 55");
section.scrollTo();
assert_equals(section.scrollLeft, 65, "scrollLeft should stay at 55");
assert_equals(section.scrollTop, 55, "scrollTop should stay at 55");
}, "Element scrollTo test (one argument)");
test(function () {
var left = section.scrollLeft;
var top = section.scrollTop;
section.scrollBy(10, 20);
assert_equals(section.scrollLeft, left + 10, "increment of scrollLeft should be 10")
assert_equals(section.scrollTop, top + 20, "increment of scrollTop should be 20")
}, "Element scrollBy test (two arguments)");
test(function () {
var left = section.scrollLeft;
var top = section.scrollTop;
section.scrollBy({left: 5, top: 15});
left += 5
top += 15
assert_equals(section.scrollLeft, left, "increment of scrollLeft should be 5")
assert_equals(section.scrollTop, top, "increment of scrollTop should be 15")
section.scrollBy({left: -15});
left -= 15
assert_equals(section.scrollLeft, left, "decrement of scrollLeft should be 15")
assert_equals(section.scrollTop, top, "scrollTop should not be modified")
section.scrollBy({top: -5});
top -= 5;
assert_equals(section.scrollLeft, left, "scrollLeft should not be modified")
assert_equals(section.scrollTop, top, "decrement of scrollTop should be 5")
section.scrollBy({});
assert_equals(section.scrollLeft, left, "scrollLeft should not be modified")
assert_equals(section.scrollTop, top, "scrollTop should not be modified")
section.scrollBy();
assert_equals(section.scrollLeft, left, "scrollLeft should not be modified")
assert_equals(section.scrollTop, top, "scrollTop should not be modified")
}, "Element scrollBy test (one argument)");
test(function () {
section.scrollTop = 1000;
section.scrollLeft = 1000;
assert_equals(section.scrollTop, 700 - 500, "changed scrollTop should be 200");
assert_equals(section.scrollLeft, 400 - 300, "changed scrollLeft should be 100");
}, "Element scroll maximum test");
done();
};
</script>