| |
| <script src="../../resources/js-test-pre.js"></script> |
| <style> |
| .test { |
| width: 100px; |
| height: 100px; |
| outline: 1px solid black; |
| } |
| .testItem { |
| z-index: 100; |
| display: inline-block; |
| width: 20px; |
| height: 20px; |
| outline: 1px solid red; |
| } |
| .pusher { |
| width: 1000px; |
| height: 1000px; |
| outline: 1px solid black; |
| } |
| #subpixel-test { |
| width: 4.5px; |
| } |
| </style> |
| <div id="testArea"> |
| <br> |
| <div id="test-initial" class="test"></div> |
| <div class="pusher">This box is here to create scrollbars.</div> |
| <div id="test-offscreen" class="test"></div> |
| <div class="pusher">This box is here to create even more scrollbars!</div> |
| </div> |
| <p id="description"></p> |
| <div id="console"></div> |
| <script> |
| window.onclick = function(e) |
| { |
| alert(e.clientX + " " + e.clientY + " " + document.elementFromPoint(e.clientX, e.clientY).textContent); |
| } |
| |
| if (window.testRunner) |
| testRunner.dumpAsText(); |
| |
| description('This test document.elementFromPoint is evaluated in with respect to the viewport, not the document.'); |
| |
| function testElement(element, label, offsetX, offsetY, hasZoom) { |
| debug(''); |
| debug('Test ' + label); |
| for (var i = 0; i < 25; ++i) { |
| var item = document.createElement("div"); |
| item.className = "testItem"; |
| item.textContent = String(i); |
| element.appendChild(item); |
| } |
| var testX = 10; |
| var testY = 10; |
| |
| var unscrolledBox = "unscrolledBox" + label, |
| scrolledDownBox = "scrolledDownBox" + label, |
| scrolledRightBox = "scrolledRightBox" + label, |
| scrolledDownAndRightBox = "scrolledDownAndRightBox" + label; |
| |
| function relativeScroll(x, y) { |
| window.scrollTo(offsetX + x, offsetY + y); |
| } |
| |
| function getFromPoint(x, y) { |
| relativeScroll(x, y); |
| var hitElement = document.elementFromPoint(testX, testY); |
| // shouldn't return null range on any of these tests |
| if (hitElement === null) |
| return null; |
| else |
| return hitElement.textContent; |
| } |
| // Get initial box. |
| window[unscrolledBox] = getFromPoint(0, 0); |
| |
| // Test scrolling down |
| window[scrolledDownBox] = getFromPoint(0, 20); |
| |
| // Test scrolling right |
| window[scrolledRightBox] = getFromPoint(50, 0); |
| |
| // Test scrolling down and right |
| window[scrolledDownAndRightBox] = getFromPoint(50, 20); |
| |
| shouldBe(unscrolledBox, "'0'"); |
| shouldBe(scrolledDownBox, "'5'"); |
| shouldBe(scrolledRightBox, "'3'"); |
| shouldBe(scrolledDownAndRightBox, "'8'"); |
| } |
| |
| var elementInitial = document.getElementById('test-initial'); |
| var elementOffscreen = document.getElementById('test-offscreen'); |
| var offset = elementInitial.getBoundingClientRect(); |
| testElement(elementInitial, "Initial", offset.left, offset.top); |
| testElement(elementOffscreen, "Offscreen", offset.left, offset.top + 1100); |
| |
| if (window.eventSender) |
| eventSender.zoomPageOut(); |
| debug('Zoomed out'); |
| testElement(elementInitial, "Initial", offset.left, offset.top, /* hasZoom */ true); |
| |
| if (window.testRunner) { |
| var area = document.getElementById('testArea'); |
| area.parentNode.removeChild(area); |
| } |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |