OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <script src="../resources/js-test.js"></script> | 2 <script src="../resources/testharness.js"></script> |
3 <script src="../resources/intersection-observer-helper-functions.js"></script> | 3 <script src="../resources/testharnessreport.js"></script> |
| 4 <script src="./resources/intersection-observer-test-utils.js"></script> |
| 5 |
4 <style> | 6 <style> |
| 7 pre, #log { |
| 8 position: absolute; |
| 9 top: 0; |
| 10 left: 200px; |
| 11 } |
| 12 .spacer { |
| 13 height: 700px; |
| 14 } |
5 .target { | 15 .target { |
6 width: 100px; | 16 width: 100px; |
7 height: 100px; | 17 height: 100px; |
8 margin: 10px; | 18 margin: 10px; |
9 background-color: green; | 19 background-color: green; |
10 } | 20 } |
11 </style> | 21 </style> |
12 <div style="width:100%; height:700px;"></div> | 22 |
| 23 <div class="spacer"></div> |
13 <div id="target1" class="target"></div> | 24 <div id="target1" class="target"></div> |
14 <div id="target2" class="target"></div> | 25 <div id="target2" class="target"></div> |
15 <div id="target3" class="target"></div> | 26 <div id="target3" class="target"></div> |
16 | 27 |
17 <script> | 28 <script> |
18 description("Verify that notifications for multiple targets are sorted by the or
der in which observe() was called on each target."); | |
19 var target1 = document.getElementById("target1"); | |
20 var target2 = document.getElementById("target2"); | |
21 var target3 = document.getElementById("target3"); | |
22 var entries = []; | 29 var entries = []; |
23 var observer = new IntersectionObserver( | 30 var target1, target2, target3; |
24 changes => { entries.push(...changes); } | |
25 ); | |
26 | 31 |
27 onload = function() { | 32 runTestCycle(function() { |
| 33 assert_equals(window.innerWidth, 800, "Window must be 800 pixels wide."); |
| 34 assert_equals(window.innerHeight, 600, "Window must be 600 pixels high."); |
| 35 |
| 36 target1 = document.getElementById("target1"); |
| 37 assert_true(!!target1, "target1 exists."); |
| 38 target2 = document.getElementById("target2"); |
| 39 assert_true(!!target2, "target2 exists."); |
| 40 target3 = document.getElementById("target3"); |
| 41 assert_true(!!target3, "target3 exists."); |
| 42 var observer = new IntersectionObserver(function(changes) { |
| 43 entries = entries.concat(changes) |
| 44 }); |
28 observer.observe(target1); | 45 observer.observe(target1); |
29 observer.observe(target2); | 46 observer.observe(target2); |
30 observer.observe(target3); | 47 observer.observe(target3); |
31 entries = entries.concat(observer.takeRecords()); | 48 entries = entries.concat(observer.takeRecords()); |
32 shouldBeEqualToNumber("entries.length", 0); | 49 assert_equals(entries.length, 0, "No initial notifications."); |
33 document.scrollingElement.scrollTop = 150; | 50 runTestCycle(step0, "No notifications after first rAF."); |
34 waitForNotification(step0); | 51 }, "One observer with multiple targets."); |
35 } | |
36 | 52 |
37 function step0() { | 53 function step0() { |
38 shouldBeEqualToNumber("entries.length", 1); | 54 document.scrollingElement.scrollTop = 150; |
39 if (entries.length > 0) | 55 runTestCycle(step1, "document.scrollingElement.scrollTop = 150"); |
40 shouldBeEqualToString("entries[0].target.id", "target1"); | 56 assert_equals(entries.length, 0, "No notifications."); |
41 document.scrollingElement.scrollTop = 10000; | |
42 waitForNotification(step1); | |
43 } | 57 } |
44 | 58 |
45 function step1() { | 59 function step1() { |
46 shouldBeEqualToNumber("entries.length", 3); | 60 document.scrollingElement.scrollTop = 10000; |
47 if (entries.length > 1) | 61 runTestCycle(step2, "document.scrollingElement.scrollTop = 10000"); |
48 shouldBeEqualToString("entries[1].target.id", "target2"); | 62 assert_equals(entries.length, 1, "One notification."); |
49 if (entries.length > 2) | 63 assert_equals(entries[0].target, target1, "entries[0].target === target1"); |
50 shouldBeEqualToString("entries[2].target.id", "target3"); | |
51 document.scrollingElement.scrollTop = 0; | |
52 waitForNotification(step2); | |
53 } | 64 } |
54 | 65 |
55 function step2() { | 66 function step2() { |
56 shouldBeEqualToNumber("entries.length", 6); | 67 document.scrollingElement.scrollTop = 0; |
57 if (entries.length > 3) | 68 runTestCycle(step3, "document.scrollingElement.scrollTop = 0"); |
58 shouldBeEqualToString("entries[3].target.id", "target1"); | 69 assert_equals(entries.length, 3, "Three notifications."); |
59 if (entries.length > 4) | 70 assert_equals(entries[1].target, target2, "entries[1].target === target2"); |
60 shouldBeEqualToString("entries[4].target.id", "target2"); | 71 assert_equals(entries[2].target, target3, "entries[2].target === target3"); |
61 if (entries.length > 5) | 72 } |
62 shouldBeEqualToString("entries[5].target.id", "target3"); | 73 |
63 finishJSTest(); | 74 function step3() { |
| 75 assert_equals(entries.length, 6, "Six notifications."); |
| 76 assert_equals(entries[3].target, target1, "entries[3].target === target1"); |
| 77 assert_equals(entries[4].target, target2, "entries[4].target === target2"); |
| 78 assert_equals(entries[5].target, target3, "entries[5].target === target3"); |
64 } | 79 } |
65 </script> | 80 </script> |
OLD | NEW |