| <!DOCTYPE HTML> |
| <script src="../../../../resources/js-test.js"></script> |
| <script src="../../resources/record-events.js"></script> |
| <style> |
| body { margin: 0px; } |
| #spacer { height: 40px; } |
| div.box { padding: 40px; } |
| #yellow { background-color: yellow; } |
| #console { padding: 0px; } |
| iframe { margin: 0px; border: 0px; width: 100%; height: 320px; } |
| </style> |
| <div id="spacer"></div> |
| <div class="box" id="yellow"><iframe src='resources/gesture-tap-mouse-events-between-frames-iframe1.html' id='frameA'></iframe></div> |
| <div id="console"></div> |
| <script> |
| description("Verifies that mouse events are fired on tapping of gesture across frames in the correct order."); |
| var frameA, frameB, frameC, frameD, frameE; |
| |
| var yellowEnterOrder = [ |
| ["yellow", "mouseover"], |
| ["yellow", "mouseenter"], |
| ["greenyellow", "mouseover"], |
| ["greenyellow", "mouseenter"]]; |
| |
| var greenEnterOrder = [ |
| ["limegreen", "mouseover"], |
| ["limegreen", "mouseenter"], |
| ["green", "mouseover"], |
| ["green", "mouseenter"]]; |
| |
| var greenLeaveOrder = [ |
| ["green", "mouseout"], |
| ["green", "mouseleave"], |
| ["limegreen", "mouseout"], |
| ["limegreen", "mouseleave"], |
| ["greenyellow", "mouseout"], |
| ["greenyellow", "mouseover"]]; |
| |
| var pinkEnterOrder = [ |
| ["pink", "mouseover"], |
| ["pink", "mouseenter"], |
| ["hotpink", "mouseover"], |
| ["hotpink", "mouseenter"]]; |
| |
| var pinkLeaveOrder = [ |
| ["hotpink", "mouseout"], |
| ["hotpink", "mouseleave"], |
| ["pink", "mouseout"], |
| ["pink", "mouseleave"], |
| ["greenyellow", "mouseout"], |
| ["greenyellow", "mouseover"]]; |
| |
| function getElementById(obj) |
| { |
| if (obj.frame) |
| return obj.frame.contentDocument.getElementById(obj.id); |
| return document.getElementById(obj.id); |
| } |
| |
| function init() { |
| frameA = document.getElementById("frameA"); |
| frameB = frameA.contentDocument.getElementById("frameB"); |
| frameC = frameB.contentDocument.getElementById("frameC"); |
| frameD = frameA.contentDocument.getElementById("frameD"); |
| frameE = frameD.contentDocument.getElementById("frameE"); |
| |
| var ids = [ |
| { id : "yellow" }, |
| { id : "greenyellow", frame : frameA }, |
| { id : "limegreen", frame: frameB }, |
| { id : "green", frame: frameC }, |
| { id : "pink", frame: frameD }, |
| { id : "hotpink", frame: frameE }]; |
| |
| var elements = []; |
| ids.forEach(function(id) { |
| var element = getElementById(id); |
| elements.push(element); |
| }); |
| registerElementsAndEventsToRecord(elements, ["mouseover", "mouseout", "mouseenter", "mouseleave"]); |
| } |
| |
| function doGesture(obj, base) |
| { |
| debug("-- sending gestureTap to " + obj.id + " --"); |
| var element = getElementById( { id : obj.id, frame : obj.frame }); |
| |
| var x = base.x + element.offsetLeft + element.offsetWidth / 2; |
| var y = base.y + element.offsetTop + element.offsetHeight / 2; |
| eventSender.gestureTap(x, y); |
| } |
| |
| function runTests() |
| { |
| init(); |
| if (window.eventSender) { |
| debug("--- Tap tests ---"); |
| |
| var expectedOrder = []; |
| beginRecordingEvents(); |
| |
| var greenX = frameA.offsetLeft + frameB.offsetLeft + frameC.offsetLeft;; |
| var greenY = frameA.offsetTop + frameB.offsetTop + frameC.offsetTop;; |
| |
| doGesture({id: "green", frame: frameC}, {x: greenX, y: greenY}); |
| expectedOrder = expectedOrder.concat(yellowEnterOrder, greenEnterOrder); |
| checkThatEventsFiredInOrder(expectedOrder); |
| |
| doGesture({id: "green", frame: frameC}, {x: greenX, y: greenY}); |
| debug("There should not be any mouse event."); |
| checkThatEventsFiredInOrder(expectedOrder); |
| |
| var pinkX = frameA.offsetLeft + frameD.offsetLeft + frameE.offsetLeft;; |
| var pinkY = frameA.offsetTop + frameD.offsetTop + frameE.offsetTop;; |
| doGesture({id: "hotpink", frame: frameE }, {x: pinkX, y: pinkY}); |
| expectedOrder = expectedOrder.concat(greenLeaveOrder, pinkEnterOrder); |
| checkThatEventsFiredInOrder(expectedOrder); |
| |
| doGesture({id: "hotpink", frame: frameE }, {x: pinkX, y: pinkY}); |
| debug("There should not be any mouse event."); |
| checkThatEventsFiredInOrder(expectedOrder); |
| |
| doGesture({id: "green", frame: frameC}, {x: greenX, y: greenY}); |
| expectedOrder = expectedOrder.concat(pinkLeaveOrder, greenEnterOrder); |
| checkThatEventsFiredInOrder(expectedOrder); |
| endRecordingEvents(); |
| } else { |
| debug("This test requires eventSender"); |
| } |
| finishJSTest(); |
| } |
| |
| if (window.testRunner) { |
| window.jsTestIsAsync = true; |
| testRunner.waitUntilDone(); |
| } |
| |
| window.onload = runTests; |
| </script> |