1bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvar div = document.createElement("div"); 2bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsendiv.id = "touchtarget"; 3bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsendiv.style.width = "100px"; 4bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsendiv.style.height = "100px"; 5bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsendiv.style.backgroundColor = "blue"; 6bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 7bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvar lastEvent = null; 8bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvar touchEventsReceived = 0; 9bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvar EXPECTED_TOUCH_EVENTS_TOTAL = 3; 10bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 11bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenfunction touchEventCallback() { 12bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (window.eventSender) { 13bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen lastEvent = event; 14bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen verifyTouch(touchEventsReceived++); 15bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else { 16bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen debug(event.type); 17bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 18bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 19bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (window.layoutTestController && touchEventsReceived == EXPECTED_TOUCH_EVENTS_TOTAL) { 20bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // If we've got here, we can safely say we were successfully parsed :) We need to 21bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // call the isSucccessfullyParsed function to output the correct TEST COMPLETE 22bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // footer message. 23bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen successfullyParsed = true; 24bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen isSuccessfullyParsed(); 25bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen layoutTestController.notifyDone(); 26bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 27bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 28bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 29bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsendiv.addEventListener("touchstart", touchEventCallback, false); 30bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsendiv.addEventListener("touchmove", touchEventCallback, false); 31bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsendiv.addEventListener("touchend", touchEventCallback, false); 32bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsendocument.body.insertBefore(div, document.body.firstChild); 33bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 34bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenfunction verifyTouchEvent(type, totalTouchCount, changedTouchCount, targetTouchCount) 35bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 36bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen shouldBeEqualToString("lastEvent.type", type); 37bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen shouldBe("lastEvent.touches.length", totalTouchCount.toString()); 38bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen shouldBe("lastEvent.changedTouches.length", changedTouchCount.toString()); 39bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen shouldBe("lastEvent.targetTouches.length", targetTouchCount.toString()); 40bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen shouldBe("lastEvent.pageX", "0"); 41bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen shouldBe("lastEvent.pageY", "0"); 42bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 43bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 44bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenfunction verifyTouchPoint(list, point, x, y, id) 45bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 46bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen shouldBe("lastEvent." + list + "[" + point + "].pageX", x.toString()); 47bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen shouldBe("lastEvent." + list + "[" + point + "].pageY", y.toString()); 48bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen shouldBe("lastEvent." + list + "[" + point + "].clientX", x.toString()); 49bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen shouldBe("lastEvent." + list + "[" + point + "].clientY", y.toString()); 50bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen shouldBe("lastEvent." + list + "[" + point + "].identifier", id.toString()); 51bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 52bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 53bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenfunction verifyTouch(which) { 54bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen switch (which) { 55bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen case 0: 56bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen verifyTouchEvent("touchstart", 2, 2, 2); 57bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen verifyTouchPoint("touches", 0, 10, 10, 0); 58bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen verifyTouchPoint("touches", 1, 20, 30, 1); 59bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen verifyTouchPoint("changedTouches", 0, 10, 10, 0); 60bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen verifyTouchPoint("changedTouches", 1, 20, 30, 1); 61bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen verifyTouchPoint("targetTouches", 0, 10, 10, 0); 62bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen verifyTouchPoint("targetTouches", 1, 20, 30, 1); 63bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen break; 64bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen case 1: 65bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen verifyTouchEvent("touchmove", 2, 2, 2); 66bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen verifyTouchPoint("touches", 0, 15, 15, 0); 67bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen verifyTouchPoint("touches", 1, 25, 35, 1); 68bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen verifyTouchPoint("changedTouches", 0, 15, 15, 0); 69bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen verifyTouchPoint("changedTouches", 1, 25, 35, 1); 70bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen verifyTouchPoint("targetTouches", 0, 15, 15, 0); 71bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen verifyTouchPoint("targetTouches", 1, 25, 35, 1); 72bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen break; 73bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen case 2: 74bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen verifyTouchEvent("touchend", 0, 2, 0); 75bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen verifyTouchPoint("changedTouches", 0, 15, 15, 0); 76bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen verifyTouchPoint("changedTouches", 1, 25, 35, 1); 77bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen break; 78bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 79bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen default: testFailed("Wrong number of touch events! (" + which + ")"); 80bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } 81bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 82bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 83bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenfunction multiTouchSequence() 84bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 85bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen eventSender.addTouchPoint(10, 10); 86bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen eventSender.addTouchPoint(20, 30); 87bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen eventSender.touchStart(); 88bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 89bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen eventSender.updateTouchPoint(0, 15, 15); 90bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen eventSender.updateTouchPoint(1, 25, 35); 91bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen eventSender.touchMove(); 92bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 93bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen eventSender.releaseTouchPoint(0); 94bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen eventSender.releaseTouchPoint(1); 95bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen eventSender.touchEnd(); 96bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 97bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 98bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenif (window.eventSender) { 99bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen description("This tests basic multi touch event support. This is a limited version of test basic-multi-touch-events.html that avoids the situation where one touch point is released while another is maintained."); 100bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 101bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen lastEvent = null; 102bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen eventSender.clearTouchPoints(); 103bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen multiTouchSequence(); 104bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} else { 105bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen debug("This test requires DumpRenderTree. Tap on the blue rect to log.") 106bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 107bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 108bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvar successfullyParsed = true; 109