| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <script src="../../../resources/js-test-pre.js"></script> |
| <!-- |
| Touch tests that involve the ontouchstart, ontouchmove, ontouchend or ontouchcancel callbacks |
| should be written in an asynchronous fashion so they can be run on mobile platforms like Android. |
| You will need to invoke isSuccessfullyParsed() in your test script when the test completes. |
| --> |
| </head> |
| <body> |
| <p id="description"></p> |
| <div id="console"></div> |
| <script> |
| var div = document.createElement("div"); |
| div.style.width = "200%"; |
| var slider1 = document.createElement("input"); |
| slider1.id = "slider1"; |
| slider1.setAttribute("type", "range"); |
| slider1.style.width = "200px"; |
| slider1.style.height = "30px"; |
| var slider2 = document.createElement("input"); |
| slider2.id = "slider2"; |
| slider2.setAttribute("type", "range"); |
| slider2.style.width = "30px"; |
| slider2.style.height = "200px"; |
| slider2.style.setProperty("-webkit-appearance", "slider-vertical"); |
| var slider3 = document.createElement("input"); |
| slider3.id = "slider3"; |
| slider3.setAttribute("type", "range"); |
| slider3.style.width = "200px"; |
| slider3.style.height = "30px"; |
| slider3.style.setProperty("-webkit-transform", "rotate(-90deg)"); |
| slider3.style.setProperty("margin", "120px 0"); |
| |
| document.body.insertBefore(div, document.getElementById('console')); |
| div.appendChild(slider1); |
| div.appendChild(slider2); |
| div.appendChild(slider3); |
| |
| var onTouchStart = (function() { |
| |
| var slider = [slider1, slider2, slider3]; |
| var nCheck = 0; |
| |
| return function() { |
| shouldBeEqualToString("event.touches[0].target.id", slider[nCheck++].id); |
| checkPosition(); |
| } |
| |
| })(); |
| |
| function onTouchMove() { |
| checkPosition(); |
| } |
| |
| function onTouchEnd() { |
| checkPosition(); |
| } |
| |
| function onKeyDown() { |
| isSuccessfullyParsed(); |
| testRunner.notifyDone(); |
| } |
| |
| var sliderValue = 0; |
| |
| var checkPosition = (function() { |
| |
| var nCheck = 0; |
| var slider = [slider1, slider2, slider3]; |
| var expectedPositions = [50, 50, 0, 100, 50]; |
| var sliderIndex = 0; |
| |
| return function() { |
| sliderValue = slider[sliderIndex].value; |
| shouldBeEqualToString("sliderValue", String(expectedPositions[nCheck++])); |
| if (nCheck % expectedPositions.length == 0) { |
| sliderIndex++; |
| nCheck = 0; |
| } |
| }; |
| |
| })(); |
| |
| function runTest(slider, rotated) { |
| |
| var w = slider.clientWidth; |
| var h = slider.clientHeight; |
| var x = slider.offsetLeft + w/2; |
| var y = slider.offsetTop + h/2; |
| |
| if (rotated) { |
| w = slider.clientHeight; |
| h = slider.clientWidth; |
| } |
| |
| eventSender.clearTouchPoints(); |
| eventSender.addTouchPoint(x, y); |
| eventSender.touchStart(); |
| |
| eventSender.updateTouchPoint(0, x - w/2, y + h/2); |
| eventSender.touchMove(); |
| |
| eventSender.updateTouchPoint(0, x + w/2, y - h/2); |
| eventSender.touchMove(); |
| |
| eventSender.updateTouchPoint(0, x, y); |
| eventSender.touchMove(); |
| |
| eventSender.releaseTouchPoint(0); |
| eventSender.touchEnd(); |
| } |
| |
| document.addEventListener("touchstart", onTouchStart, false); |
| document.addEventListener("touchmove", onTouchMove, false); |
| document.addEventListener("touchend", onTouchEnd, false); |
| document.addEventListener("keydown", onKeyDown, false); |
| |
| description("Tests that the touch events originating on an input element with type=range update the slider position. This test is only expected to pass if ENABLE_TOUCH_SLIDER is defined."); |
| |
| if (window.testRunner) { |
| testRunner.waitUntilDone(); |
| } |
| |
| if (window.eventSender) { |
| runTest(slider1, false); |
| runTest(slider2, false); |
| runTest(slider3, true); |
| |
| eventSender.keyDown(' '); |
| } else { |
| debug('This test requires DRT.'); |
| } |
| </script> |
| </body> |
| </html> |