basic-multi-touch-events.js revision 692e5dbf12901edacf14812a6fae25462920af42
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()); 40692e5dbf12901edacf14812a6fae25462920af42Steve Block} 41692e5dbf12901edacf14812a6fae25462920af42Steve Block 42692e5dbf12901edacf14812a6fae25462920af42Steve Blockfunction verifyTouchPoint(list, point, x, y, id) 43692e5dbf12901edacf14812a6fae25462920af42Steve Block{ 44692e5dbf12901edacf14812a6fae25462920af42Steve Block shouldBe("lastEvent." + list + "[" + point + "].pageX", x.toString()); 45692e5dbf12901edacf14812a6fae25462920af42Steve Block shouldBe("lastEvent." + list + "[" + point + "].pageY", y.toString()); 46692e5dbf12901edacf14812a6fae25462920af42Steve Block shouldBe("lastEvent." + list + "[" + point + "].clientX", x.toString()); 47692e5dbf12901edacf14812a6fae25462920af42Steve Block shouldBe("lastEvent." + list + "[" + point + "].clientY", y.toString()); 48692e5dbf12901edacf14812a6fae25462920af42Steve Block shouldBe("lastEvent." + list + "[" + point + "].identifier", id.toString()); 49692e5dbf12901edacf14812a6fae25462920af42Steve Block} 50692e5dbf12901edacf14812a6fae25462920af42Steve Block 51692e5dbf12901edacf14812a6fae25462920af42Steve Blockfunction verifyTouch(which) { 52692e5dbf12901edacf14812a6fae25462920af42Steve Block switch (which) { 53692e5dbf12901edacf14812a6fae25462920af42Steve Block case 0: 54692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchEvent("touchstart", 2, 2, 2); 55692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("touches", 0, 10, 10, 0); 56692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("touches", 1, 20, 30, 1); 57692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("changedTouches", 0, 10, 10, 0); 58692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("changedTouches", 1, 20, 30, 1); 59692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("targetTouches", 0, 10, 10, 0); 60692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("targetTouches", 1, 20, 30, 1); 61692e5dbf12901edacf14812a6fae25462920af42Steve Block break; 62692e5dbf12901edacf14812a6fae25462920af42Steve Block case 1: 63692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchEvent("touchmove", 2, 1, 2); 64692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("touches", 0, 15, 15, 0); 65692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("changedTouches", 0, 15, 15, 0); 66692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("touches", 1, 20, 30, 1); 67692e5dbf12901edacf14812a6fae25462920af42Steve Block break; 68692e5dbf12901edacf14812a6fae25462920af42Steve Block case 2: 69692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchEvent("touchend", 1, 1, 1); 70692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("touches", 0, 20, 30, 1); 71692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("changedTouches", 0, 15, 15, 0); 72692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("targetTouches", 0, 20, 30, 1); 73692e5dbf12901edacf14812a6fae25462920af42Steve Block break; 74692e5dbf12901edacf14812a6fae25462920af42Steve Block case 3: 75692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchEvent("touchend", 0, 1, 0); 76692e5dbf12901edacf14812a6fae25462920af42Steve Block verifyTouchPoint("changedTouches", 0, 20, 30, 1); 77692e5dbf12901edacf14812a6fae25462920af42Steve Block break; 78692e5dbf12901edacf14812a6fae25462920af42Steve Block 79692e5dbf12901edacf14812a6fae25462920af42Steve Block default: testFailed("Wrong number of touch events! (" + which + ")"); 80692e5dbf12901edacf14812a6fae25462920af42Steve Block } 81692e5dbf12901edacf14812a6fae25462920af42Steve Block} 82692e5dbf12901edacf14812a6fae25462920af42Steve Block 83692e5dbf12901edacf14812a6fae25462920af42Steve Blockfunction multiTouchSequence() 84692e5dbf12901edacf14812a6fae25462920af42Steve Block{ 85692e5dbf12901edacf14812a6fae25462920af42Steve Block debug("multi touch sequence"); 86692e5dbf12901edacf14812a6fae25462920af42Steve Block 87692e5dbf12901edacf14812a6fae25462920af42Steve Block debug("Two touchpoints pressed"); 88692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.addTouchPoint(10, 10); 89692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.addTouchPoint(20, 30); 90692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.touchStart(); 91692e5dbf12901edacf14812a6fae25462920af42Steve Block 92692e5dbf12901edacf14812a6fae25462920af42Steve Block debug("First touchpoint moved"); 93692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.updateTouchPoint(0, 15, 15); 94692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.touchMove(); 95692e5dbf12901edacf14812a6fae25462920af42Steve Block 96692e5dbf12901edacf14812a6fae25462920af42Steve Block debug("First touchpoint is released"); 97692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.releaseTouchPoint(0); 98692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.touchEnd(); 99692e5dbf12901edacf14812a6fae25462920af42Steve Block 100692e5dbf12901edacf14812a6fae25462920af42Steve Block debug("Last remaining touchpoint is released"); 101692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.releaseTouchPoint(0); 102692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.touchEnd(); 103692e5dbf12901edacf14812a6fae25462920af42Steve Block} 104692e5dbf12901edacf14812a6fae25462920af42Steve Block 105692e5dbf12901edacf14812a6fae25462920af42Steve Blockif (window.eventSender) { 106692e5dbf12901edacf14812a6fae25462920af42Steve Block description("This tests basic multi touch event support."); 107692e5dbf12901edacf14812a6fae25462920af42Steve Block 108692e5dbf12901edacf14812a6fae25462920af42Steve Block lastEvent = null; 109692e5dbf12901edacf14812a6fae25462920af42Steve Block eventSender.clearTouchPoints(); 110692e5dbf12901edacf14812a6fae25462920af42Steve Block multiTouchSequence(); 111692e5dbf12901edacf14812a6fae25462920af42Steve Block} else { 112692e5dbf12901edacf14812a6fae25462920af42Steve Block debug("This test requires DumpRenderTree. Tap on the blue rect to log.") 113692e5dbf12901edacf14812a6fae25462920af42Steve Block} 114692e5dbf12901edacf14812a6fae25462920af42Steve Block 115692e5dbf12901edacf14812a6fae25462920af42Steve Blockvar successfullyParsed = true; 116