| function offsetFromViewportTop(element) |
| { |
| return element.getClientRects()[0].top; |
| } |
| |
| function offsetOfMiddleFromViewportTop(element) |
| { |
| return element.getClientRects()[0].top + Math.round(element.getClientRects()[0].height / 2); |
| } |
| |
| function copyText() |
| { |
| var copy = document.getElementById("copy"); |
| copy.focus(); |
| document.execCommand("selectall"); |
| document.execCommand("copy"); |
| } |
| |
| function generateNumbers(from, to, zeroPaddedWidth, delimiter) |
| { |
| var result = ""; |
| for (var i = from; i <= to; ++i) { |
| var number = i.toString(); |
| while (number.length < zeroPaddedWidth) |
| number = "0" + number; |
| result += number + delimiter; |
| } |
| return result; |
| } |
| |
| function assertInputIsInTheMiddleOfViewport() |
| { |
| var viewportMiddle = Math.round(window.innerHeight / 2); |
| var offsetOfInput = offsetOfMiddleFromViewportTop(document.getElementById("input")); |
| document.getElementById("results").innerHTML += "ScrollVertically: " + |
| (Math.abs(offsetOfInput - viewportMiddle) <= 3 ? |
| "PASS" : |
| "FAIL<br>viewportMiddle: " + viewportMiddle + ", offsetOfInput: " + offsetOfInput); |
| } |
| |
| function performVerticalScrollingTest() |
| { |
| var initialOffset = offsetFromViewportTop(document.body.children[0]); |
| document.getElementById("input").focus(); |
| if (window.eventSender) { |
| while (offsetFromViewportTop(document.body.children[0]) < initialOffset) |
| eventSender.keyDown("pageUp"); |
| return true; |
| } |
| return false; |
| } |
| |
| function performVerticalScrollingInputTest() |
| { |
| if (performVerticalScrollingTest()) |
| eventSender.keyDown("a"); |
| } |
| |
| function performVerticalScrollingPasteTest() |
| { |
| copyText(); |
| if (performVerticalScrollingTest()) { |
| document.execCommand("selectall"); |
| document.execCommand("paste"); |
| } |
| } |
| |
| function performJumpAtTheEdgeTest(useCtrlKeyModifier) |
| { |
| var textArea = document.getElementById("input"); |
| textArea.focus(); |
| if (window.eventSender) { |
| var previousScrollTop = 0, currentScrollTop = 0; |
| var jumpDetected = false; |
| for (var i = 0; i < 120; ++i) { |
| previousScrollTop = document.scrollingElement.scrollTop; |
| eventSender.keyDown("\r", useCtrlKeyModifier ? ["ctrlKey"] : []); |
| currentScrollTop = document.scrollingElement.scrollTop; |
| // Smooth scrolls are allowed. |
| if (Math.abs(previousScrollTop - currentScrollTop) > 24) { |
| jumpDetected = true; |
| break; |
| } |
| } |
| if (!jumpDetected) |
| document.write("PASS"); |
| else |
| document.write("FAIL<br>Jump scroll from " + previousScrollTop + " to " + currentScrollTop); |
| } |
| } |