test_viewport_scroll.html (3968B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test for mapping of scrollTop/scrollLeft to viewport</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 7 </head> 8 <body> 9 <p id="display"></p> 10 11 <iframe id="quirks"></iframe> 12 <iframe id="standards"></iframe> 13 <iframe id="xml"></iframe> 14 15 <pre id="test"> 16 <script type="application/javascript"> 17 SimpleTest.waitForExplicitFinish(); 18 window.onload = async () => { 19 await SpecialPowers.pushPrefEnv({ 20 set: [ ["layout.disable-pixel-alignment", true] ] 21 }); 22 doTest(); 23 } 24 25 var quirks = document.getElementById("quirks"); 26 var standards = document.getElementById("standards"); 27 var xml = document.getElementById("xml"); 28 29 quirks.src = "file_viewport_scroll_quirks.html"; 30 standards.srcdoc = "<!DOCTYPE HTML><html><body style='height:2000px; width:2000px;'>"; 31 xml.src = "file_viewport_scroll_xml.xml"; 32 33 function subtest(winProp, elemProp, win, correctElement, elemToSet, otherElem1, otherElem2) { 34 win.scrollTo(50, 50); 35 elemToSet[elemProp] = 100; 36 if (elemToSet == correctElement) { 37 is(Math.round(win[winProp]), 100, "Setting " + elemToSet.name + "." + elemProp + " should scroll"); 38 is(elemToSet[elemProp], 100, "Reading back " + elemToSet.name + "." + elemProp + " after scrolling"); 39 } else { 40 is(Math.round(win[winProp]), 50, "Setting " + elemToSet.name + "." + elemProp + " should not scroll"); 41 is(elemToSet[elemProp], 0, "Reading back " + elemToSet.name + "." + elemProp + " after not scrolling"); 42 } 43 if (otherElem1 == correctElement) { 44 is(otherElem1[elemProp], 50, "Reading back " + otherElem1.name + "." + elemProp + " (correct element) after not scrolling"); 45 } else { 46 is(otherElem1[elemProp], 0, "Reading back " + otherElem1.name + "." + elemProp + " (irrelevant element)"); 47 } 48 if (otherElem2 == correctElement) { 49 is(otherElem2[elemProp], 50, "Reading back " + otherElem2.name + "." + elemProp + " (correct element) after not scrolling"); 50 } else { 51 is(otherElem2[elemProp], 0, "Reading back " + otherElem2.name + "." + elemProp + " (irrelevant element)"); 52 } 53 } 54 55 function testScroll(winProp, elemProp, win, elemToSet, otherElem1, otherElem2) { 56 subtest(winProp, elemProp, win, elemToSet, elemToSet, otherElem1, otherElem2); 57 subtest(winProp, elemProp, win, elemToSet, otherElem1, elemToSet, otherElem2); 58 subtest(winProp, elemProp, win, elemToSet, otherElem2, elemToSet, otherElem1); 59 } 60 61 function doTest() { 62 var quirksRoot = quirks.contentDocument.documentElement; 63 quirksRoot.name = "quirks HTML"; 64 var quirksBody = quirks.contentDocument.body; 65 quirksBody.name = "quirks BODY"; 66 var quirksBody2 = quirks.contentDocument.createElement("body"); 67 quirksBody2.name = "quirks other BODY"; 68 quirksRoot.appendChild(quirksBody2); 69 testScroll("scrollX", "scrollLeft", quirks.contentWindow, quirksBody, quirksRoot, quirksBody2); 70 testScroll("scrollY", "scrollTop", quirks.contentWindow, quirksBody, quirksRoot, quirksBody2); 71 72 var standardsRoot = standards.contentDocument.documentElement; 73 standardsRoot.name = "standards HTML"; 74 var standardsBody = standards.contentDocument.body; 75 standardsBody.name = "standards BODY"; 76 var standardsBody2 = standards.contentDocument.createElement("body"); 77 standardsBody2.name = "standards other BODY"; 78 standardsRoot.appendChild(standardsBody2); 79 testScroll("scrollX", "scrollLeft", standards.contentWindow, standardsRoot, standardsBody, standardsBody2); 80 testScroll("scrollY", "scrollTop", standards.contentWindow, standardsRoot, standardsBody, standardsBody2); 81 82 var xmlRoot = xml.contentDocument.documentElement; 83 xmlRoot.name = "XML root"; 84 var xmlOther = xmlRoot.firstChild; 85 xmlOther.name = "XML other"; 86 testScroll("scrollX", "scrollLeft", xml.contentWindow, xmlRoot, xmlOther, xmlOther); 87 testScroll("scrollY", "scrollTop", xml.contentWindow, xmlRoot, xmlOther, xmlOther); 88 89 SimpleTest.finish(); 90 } 91 </script> 92 93 </pre> 94 </body> 95 </html>