| var targetsDiv = document.createElement("div"); |
| targetsDiv.id = "targetsDiv"; |
| |
| var div1 = document.createElement("div"); |
| div1.id = "targetA"; |
| div1.style.width = "100px"; |
| div1.style.height = "100px"; |
| div1.style.backgroundColor = "blue"; |
| |
| var div2 = document.createElement("div"); |
| div2.id = "targetB"; |
| div2.style.width = "100px"; |
| div2.style.height = "100px"; |
| div2.style.backgroundColor = "green"; |
| |
| document.body.insertBefore(targetsDiv, document.getElementById('console')); |
| targetsDiv.appendChild(div1); |
| targetsDiv.appendChild(document.createElement('br')); |
| targetsDiv.appendChild(div2); |
| |
| function declareTouchHandler(div_id, expectedTargetTouches) |
| { |
| return function () |
| { |
| // Do not use the parameters (div_id, expectedTargetTouches) in shouldBe.. calls, as |
| // the order of event dispatch is not deterministic across executions and reordering |
| // ofthe PASS debug output details would cause the test to be unreliable. |
| shouldBe('event.touches.length', '3'); |
| if (event.targetTouches.length != expectedTargetTouches) |
| testFailed('Wrong targetTouch length: ' + event.targetTouches.length + ' vs ' + expectedTargetTouches); |
| for (var i = 0; i < event.targetTouches.length; i++) |
| { |
| if (event.targetTouches[i].target.id != div_id) |
| testFailed('Incorrect targetTouch ID: ' + event.targetTouches[i].target.id + ' vs ' + div_id); |
| } |
| shouldBe('event.changedTouches.length', '3'); |
| } |
| } |
| |
| var endCount = 0; |
| function touchEndHandler() |
| { |
| shouldBeEqualToString('event.type', 'touchend'); |
| |
| shouldBe('event.touches.length', '0'); |
| shouldBe('event.targetTouches.length', '0'); |
| shouldBe('event.changedTouches.length', '3'); |
| |
| if (++endCount == 2) |
| { |
| successfullyParsed = true; |
| layoutTestController.notifyDone(); |
| isSuccessfullyParsed(); |
| } |
| } |
| |
| div1.addEventListener("touchstart", declareTouchHandler('targetA', '2'), false); |
| div1.addEventListener("touchmove", declareTouchHandler('targetA', '2'), false); |
| div1.addEventListener("touchend", touchEndHandler, false); |
| |
| div2.addEventListener("touchstart", declareTouchHandler('targetB', '1'), false); |
| div2.addEventListener("touchmove", declareTouchHandler('targetB', '1'), false); |
| div2.addEventListener("touchend", touchEndHandler, false); |
| |
| description("Tests that the an event is sent for every touch listener, and target touches contains all the points for that target"); |
| |
| if (window.layoutTestController) { |
| layoutTestController.waitUntilDone(); |
| } |
| |
| if (window.eventSender) { |
| eventSender.clearTouchPoints(); |
| eventSender.addTouchPoint(50, 150); |
| eventSender.addTouchPoint(50, 250); |
| eventSender.addTouchPoint(50, 150); |
| eventSender.touchStart(); |
| |
| eventSender.updateTouchPoint(0, 200, 150); |
| eventSender.updateTouchPoint(1, 300, 250); |
| eventSender.updateTouchPoint(2, 400, 150); |
| eventSender.touchMove(); |
| |
| eventSender.releaseTouchPoint(0); |
| eventSender.releaseTouchPoint(1); |
| eventSender.releaseTouchPoint(2); |
| eventSender.touchEnd(); |
| } else |
| debug('This test requires DRT.'); |
| |