1692e5dbf12901edacf14812a6fae25462920af42Steve Blockvar div = document.createElement("div"); 2692e5dbf12901edacf14812a6fae25462920af42Steve Blockdiv.id = "touchtarget"; 3692e5dbf12901edacf14812a6fae25462920af42Steve Blockdiv.style.width = "100px"; 4692e5dbf12901edacf14812a6fae25462920af42Steve Blockdiv.style.height = "100px"; 5692e5dbf12901edacf14812a6fae25462920af42Steve Blockdiv.style.backgroundColor = "blue"; 6692e5dbf12901edacf14812a6fae25462920af42Steve Block 7692e5dbf12901edacf14812a6fae25462920af42Steve Blockvar lastEvent = null; 8692e5dbf12901edacf14812a6fae25462920af42Steve Blockvar touchEventsReceived = 0; 9692e5dbf12901edacf14812a6fae25462920af42Steve Blockvar EXPECTED_TOUCH_EVENTS_TOTAL = 4; 10692e5dbf12901edacf14812a6fae25462920af42Steve Block 11692e5dbf12901edacf14812a6fae25462920af42Steve Blockfunction touchEventCallback() { 12692e5dbf12901edacf14812a6fae25462920af42Steve Block if (window.eventSender) { 13692e5dbf12901edacf14812a6fae25462920af42Steve Block lastEvent = event; 14692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouch(touchEventsReceived++); 15692e5dbf12901edacf14812a6fae25462920af42Steve Block } else { 16692e5dbf12901edacf14812a6fae25462920af42Steve Block debug(event.type); 17692e5dbf12901edacf14812a6fae25462920af42Steve Block } 18692e5dbf12901edacf14812a6fae25462920af42Steve Block 19692e5dbf12901edacf14812a6fae25462920af42Steve Block if (window.layoutTestController && touchEventsReceived == EXPECTED_TOUCH_EVENTS_TOTAL) { 20692e5dbf12901edacf14812a6fae25462920af42Steve Block // If we've got here, we can safely say we were successfully parsed :) We need to 21692e5dbf12901edacf14812a6fae25462920af42Steve Block // call the isSucccessfullyParsed function to output the correct TEST COMPLETE 22692e5dbf12901edacf14812a6fae25462920af42Steve Block // footer message. 23692e5dbf12901edacf14812a6fae25462920af42Steve Block successfullyParsed = true; 24692e5dbf12901edacf14812a6fae25462920af42Steve Block isSuccessfullyParsed(); 25692e5dbf12901edacf14812a6fae25462920af42Steve Block layoutTestController.notifyDone(); 26692e5dbf12901edacf14812a6fae25462920af42Steve Block } 27692e5dbf12901edacf14812a6fae25462920af42Steve Block} 28692e5dbf12901edacf14812a6fae25462920af42Steve Block 29692e5dbf12901edacf14812a6fae25462920af42Steve Blockdiv.addEventListener("touchstart", touchEventCallback, false); 30692e5dbf12901edacf14812a6fae25462920af42Steve Blockdiv.addEventListener("touchmove", touchEventCallback, false); 31692e5dbf12901edacf14812a6fae25462920af42Steve Blockdiv.addEventListener("touchend", touchEventCallback, false); 32692e5dbf12901edacf14812a6fae25462920af42Steve Blockdocument.body.insertBefore(div, document.body.firstChild); 33692e5dbf12901edacf14812a6fae25462920af42Steve Block 34692e5dbf12901edacf14812a6fae25462920af42Steve Blockfunction verifyTouchEvent(type, totalTouchCount, changedTouchCount, targetTouchCount) 35692e5dbf12901edacf14812a6fae25462920af42Steve Block{ 36692e5dbf12901edacf14812a6fae25462920af42Steve Block shouldBeEqualToString("lastEvent.type", type); 37692e5dbf12901edacf14812a6fae25462920af42Steve Block shouldBe("lastEvent.touches.length", totalTouchCount.toString()); 38692e5dbf12901edacf14812a6fae25462920af42Steve Block shouldBe("lastEvent.changedTouches.length", changedTouchCount.toString()); 39692e5dbf12901edacf14812a6fae25462920af42Steve Block shouldBe("lastEvent.targetTouches.length", targetTouchCount.toString()); 40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block shouldBe("lastEvent.pageX", "0"); 41dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block shouldBe("lastEvent.pageY", "0"); 42692e5dbf12901edacf14812a6fae25462920af42Steve Block} 43692e5dbf12901edacf14812a6fae25462920af42Steve Block 44692e5dbf12901edacf14812a6fae25462920af42Steve Blockfunction verifyTouchPoint(list, point, x, y, id) 45692e5dbf12901edacf14812a6fae25462920af42Steve Block{ 46692e5dbf12901edacf14812a6fae25462920af42Steve Block shouldBe("lastEvent." + list + "[" + point + "].pageX", x.toString()); 47692e5dbf12901edacf14812a6fae25462920af42Steve Block shouldBe("lastEvent." + list + "[" + point + "].pageY", y.toString()); 48692e5dbf12901edacf14812a6fae25462920af42Steve Block shouldBe("lastEvent." + list + "[" + point + "].clientX", x.toString()); 49692e5dbf12901edacf14812a6fae25462920af42Steve Block shouldBe("lastEvent." + list + "[" + point + "].clientY", y.toString()); 50692e5dbf12901edacf14812a6fae25462920af42Steve Block shouldBe("lastEvent." + list + "[" + point + "].identifier", id.toString()); 51692e5dbf12901edacf14812a6fae25462920af42Steve Block} 52692e5dbf12901edacf14812a6fae25462920af42Steve Block 53692e5dbf12901edacf14812a6fae25462920af42Steve Blockfunction verifyTouch(which) { 54692e5dbf12901edacf14812a6fae25462920af42Steve Block switch (which) { 55692e5dbf12901edacf14812a6fae25462920af42Steve Block case 0: 56692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchEvent("touchstart", 2, 2, 2); 57692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("touches", 0, 10, 10, 0); 58692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("touches", 1, 20, 30, 1); 59692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("changedTouches", 0, 10, 10, 0); 60692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("changedTouches", 1, 20, 30, 1); 61692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("targetTouches", 0, 10, 10, 0); 62692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("targetTouches", 1, 20, 30, 1); 63692e5dbf12901edacf14812a6fae25462920af42Steve Block break; 64692e5dbf12901edacf14812a6fae25462920af42Steve Block case 1: 65692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchEvent("touchmove", 2, 1, 2); 66692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("touches", 0, 15, 15, 0); 67692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("changedTouches", 0, 15, 15, 0); 68692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("touches", 1, 20, 30, 1); 69692e5dbf12901edacf14812a6fae25462920af42Steve Block break; 70692e5dbf12901edacf14812a6fae25462920af42Steve Block case 2: 71692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchEvent("touchend", 1, 1, 1); 72692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("touches", 0, 20, 30, 1); 73692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("changedTouches", 0, 15, 15, 0); 74692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("targetTouches", 0, 20, 30, 1); 75692e5dbf12901edacf14812a6fae25462920af42Steve Block break; 76692e5dbf12901edacf14812a6fae25462920af42Steve Block case 3: 77692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchEvent("touchend", 0, 1, 0); 78692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("changedTouches", 0, 20, 30, 1); 79692e5dbf12901edacf14812a6fae25462920af42Steve Block break; 80692e5dbf12901edacf14812a6fae25462920af42Steve Block 81692e5dbf12901edacf14812a6fae25462920af42Steve Block default: testFailed("Wrong number of touch events! (" + which + ")"); 82692e5dbf12901edacf14812a6fae25462920af42Steve Block } 83692e5dbf12901edacf14812a6fae25462920af42Steve Block} 84692e5dbf12901edacf14812a6fae25462920af42Steve Block 85692e5dbf12901edacf14812a6fae25462920af42Steve Blockfunction multiTouchSequence() 86692e5dbf12901edacf14812a6fae25462920af42Steve Block{ 87692e5dbf12901edacf14812a6fae25462920af42Steve Block debug("multi touch sequence"); 88692e5dbf12901edacf14812a6fae25462920af42Steve Block 89692e5dbf12901edacf14812a6fae25462920af42Steve Block debug("Two touchpoints pressed"); 90692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.addTouchPoint(10, 10); 91692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.addTouchPoint(20, 30); 92692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.touchStart(); 93692e5dbf12901edacf14812a6fae25462920af42Steve Block 94692e5dbf12901edacf14812a6fae25462920af42Steve Block debug("First touchpoint moved"); 95692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.updateTouchPoint(0, 15, 15); 96692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.touchMove(); 97692e5dbf12901edacf14812a6fae25462920af42Steve Block 98692e5dbf12901edacf14812a6fae25462920af42Steve Block debug("First touchpoint is released"); 99692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.releaseTouchPoint(0); 100692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.touchEnd(); 101692e5dbf12901edacf14812a6fae25462920af42Steve Block 102692e5dbf12901edacf14812a6fae25462920af42Steve Block debug("Last remaining touchpoint is released"); 103692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.releaseTouchPoint(0); 104692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.touchEnd(); 105692e5dbf12901edacf14812a6fae25462920af42Steve Block} 106692e5dbf12901edacf14812a6fae25462920af42Steve Block 107692e5dbf12901edacf14812a6fae25462920af42Steve Blockif (window.eventSender) { 108692e5dbf12901edacf14812a6fae25462920af42Steve Block description("This tests basic multi touch event support."); 109692e5dbf12901edacf14812a6fae25462920af42Steve Block 110692e5dbf12901edacf14812a6fae25462920af42Steve Block lastEvent = null; 111692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.clearTouchPoints(); 112692e5dbf12901edacf14812a6fae25462920af42Steve Block multiTouchSequence(); 113692e5dbf12901edacf14812a6fae25462920af42Steve Block} else { 114692e5dbf12901edacf14812a6fae25462920af42Steve Block debug("This test requires DumpRenderTree. Tap on the blue rect to log.") 115692e5dbf12901edacf14812a6fae25462920af42Steve Block} 116692e5dbf12901edacf14812a6fae25462920af42Steve Block 117692e5dbf12901edacf14812a6fae25462920af42Steve Blockvar successfullyParsed = true; 118