blob: 91b03e1c6f73a54d27028573c2604695b8f41389 [file] [log] [blame]
<!DOCTYPE html>
<script src="../resources/js-test.js"></script>
<script src="../resources/intersection-observer-helper-functions.js"></script>
<style>
.target {
width: 100px;
height: 100px;
margin: 10px;
background-color: green;
}
</style>
<div style="width:100%; height:700px;"></div>
<div id="target1" class="target"></div>
<div id="target2" class="target"></div>
<div id="target3" class="target"></div>
<script>
description("Verify that notifications for multiple targets are sorted by the order in which observe() was called on each target.");
var target1 = document.getElementById("target1");
var target2 = document.getElementById("target2");
var target3 = document.getElementById("target3");
var entries = [];
var observer = new IntersectionObserver(
changes => { entries.push(...changes); }
);
onload = function() {
observer.observe(target1);
observer.observe(target2);
observer.observe(target3);
entries = entries.concat(observer.takeRecords());
shouldBeEqualToNumber("entries.length", 0);
document.scrollingElement.scrollTop = 150;
waitForNotification(step0);
}
function step0() {
shouldBeEqualToNumber("entries.length", 1);
if (entries.length > 0)
shouldBeEqualToString("entries[0].target.id", "target1");
document.scrollingElement.scrollTop = 10000;
waitForNotification(step1);
}
function step1() {
shouldBeEqualToNumber("entries.length", 3);
if (entries.length > 1)
shouldBeEqualToString("entries[1].target.id", "target2");
if (entries.length > 2)
shouldBeEqualToString("entries[2].target.id", "target3");
document.scrollingElement.scrollTop = 0;
waitForNotification(step2);
}
function step2() {
shouldBeEqualToNumber("entries.length", 6);
if (entries.length > 3)
shouldBeEqualToString("entries[3].target.id", "target1");
if (entries.length > 4)
shouldBeEqualToString("entries[4].target.id", "target2");
if (entries.length > 5)
shouldBeEqualToString("entries[5].target.id", "target3");
finishJSTest();
}
</script>