| <!doctype html><!-- webkit-test-runner [ experimental:ResizeObserverEnabled=true ] --> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <script src="./resources/resizeTestHelper.js"></script> |
| <p>ResizeObserver tests</p> |
| <div id="target1" style="width:100px;height:100px;">t1 |
| <div id="target2" style="width:100px;height:100px;">t2 |
| <iframe id="iframe1" src="./resources/iframe1.html"></iframe> |
| </div> |
| </div> |
| <div id="target3" style="width:100px;height:100px;">t3</div> |
| |
| <div id="log"></div> |
| <script type="text/javascript"> |
| 'use strict'; |
| |
| function test0() { |
| let t1 = document.querySelector('#target1'); |
| let t2 = document.querySelector('#target2'); |
| let it1 = document.querySelector("#iframe1").contentDocument.querySelector("#iframe1-target1"); |
| |
| let helper = new ResizeTestHelper( |
| "test0: depth of target from child frame", |
| [ |
| { |
| setup: observer => { |
| observer.observe(t1); |
| observer.observe(t2); |
| observer.observe(it1); |
| }, |
| notify: (entries, observer) => { |
| assert_equals(entries.length, 3, "3 entries"); |
| assert_equals(entries[0].target, t1, "observe target from child frame"); |
| assert_equals(entries[1].target, t2, "observe target from child frame"); |
| assert_equals(entries[2].target, it1, "observe target from child frame"); |
| } |
| }, |
| { |
| setup: observer => { |
| t2.style.width = "50px"; |
| it1.style.width = "50px"; |
| }, |
| notify: (entries, observer) => { |
| assert_equals(entries.length, 2, "2 entries"); |
| assert_equals(entries[0].target, t2, "t2 deeper than t1"); |
| assert_equals(entries[1].target, it1, "it1 deeper than t1"); |
| } |
| }, |
| { |
| setup: observer => { |
| it1.style.width = "25px"; |
| }, |
| notify: (entries, observer) => { |
| assert_equals(entries.length, 1, "1 entry"); |
| assert_equals(entries[0].target, it1, "it1 deeper than t2"); |
| } |
| } |
| ]); |
| return helper.start(); |
| } |
| |
| function test1() { |
| let t1 = document.querySelector('#target1'); |
| let t3 = document.querySelector('#target3'); |
| let it1 = document.querySelector("#iframe1").contentDocument.querySelector("#iframe1-target1"); |
| |
| let helper = new ResizeTestHelper( |
| "test1: observed element move to new document", |
| [ |
| { |
| setup: observer => { |
| observer.observe(t1); |
| observer.observe(t3); |
| observer.observe(it1); |
| }, |
| notify: (entries, observer) => { |
| assert_equals(entries.length, 3, "3 entries"); |
| assert_equals(entries[0].target, t1, "move to new document"); |
| assert_equals(entries[1].target, t3, "move to new document"); |
| assert_equals(entries[2].target, it1, "move to new document"); |
| } |
| }, |
| { |
| setup: observer => { |
| t3.parentElement.removeChild(t3); |
| it1.parentElement.appendChild(t3); |
| t3.style.width = "25px"; |
| }, |
| notify: (entries, observer) => { |
| assert_equals(entries.length, 1, "1 entry"); |
| assert_equals(entries[0].target, t3, "still observed after moving to new document"); |
| } |
| } |
| ]); |
| return helper.start(); |
| } |
| |
| function startTest() { |
| let guard; |
| test(_ => { |
| assert_own_property(window, "ResizeObserver"); |
| guard = async_test('guard'); |
| }, "ResizeObserver implemented"); |
| |
| test0() |
| .then(() => { return test1(); }) |
| .then(() => { guard.done(); }); |
| } |
| |
| window.addEventListener('message', function(event) { |
| switch(event.data) { |
| case 'readyToTest': |
| startTest(); |
| break; |
| } |
| }); |
| </script> |