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 = 5;
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", 1, 1, 1);
57692e5dbf12901edacf14812a6fae25462920af42Steve Block           shouldBe("lastEvent.shiftKey", "false");
58692e5dbf12901edacf14812a6fae25462920af42Steve Block           shouldBeEqualToString("lastEvent.touches[0].target.id", "touchtarget");
59692e5dbf12901edacf14812a6fae25462920af42Steve Block           verifyTouchPoint("touches", 0, 10, 10, 0);
60692e5dbf12901edacf14812a6fae25462920af42Steve Block           verifyTouchPoint("changedTouches", 0, 10, 10, 0);
61692e5dbf12901edacf14812a6fae25462920af42Steve Block           verifyTouchPoint("targetTouches", 0, 10, 10, 0);
62692e5dbf12901edacf14812a6fae25462920af42Steve Block        break;
63692e5dbf12901edacf14812a6fae25462920af42Steve Block        case 1:
64692e5dbf12901edacf14812a6fae25462920af42Steve Block           verifyTouchEvent("touchmove", 1, 1, 1);
6521939df44de1705786c545cd1bf519d47250322dBen Murdoch           verifyTouchPoint("touches", 0, 50, 50, 0);
66692e5dbf12901edacf14812a6fae25462920af42Steve Block           shouldBe("lastEvent.shiftKey", "true");
67692e5dbf12901edacf14812a6fae25462920af42Steve Block           shouldBe("lastEvent.altKey", "true");
68692e5dbf12901edacf14812a6fae25462920af42Steve Block           shouldBe("lastEvent.ctrlKey", "false");
69692e5dbf12901edacf14812a6fae25462920af42Steve Block           shouldBe("lastEvent.metaKey", "false");
70692e5dbf12901edacf14812a6fae25462920af42Steve Block        break;
71692e5dbf12901edacf14812a6fae25462920af42Steve Block        case 2:
72692e5dbf12901edacf14812a6fae25462920af42Steve Block            verifyTouchEvent("touchend", 0, 1, 0);
7321939df44de1705786c545cd1bf519d47250322dBen Murdoch            verifyTouchPoint("changedTouches", 0, 50, 50, 0);
74692e5dbf12901edacf14812a6fae25462920af42Steve Block            shouldBe("lastEvent.shiftKey", "false");
75692e5dbf12901edacf14812a6fae25462920af42Steve Block            shouldBe("lastEvent.altKey", "false");
76692e5dbf12901edacf14812a6fae25462920af42Steve Block        break;
77692e5dbf12901edacf14812a6fae25462920af42Steve Block        case 3:
78692e5dbf12901edacf14812a6fae25462920af42Steve Block            verifyTouchEvent("touchstart", 1, 1, 1);
79692e5dbf12901edacf14812a6fae25462920af42Steve Block            shouldBeEqualToString("lastEvent.targetTouches[0].target.tagName", "DIV");
80692e5dbf12901edacf14812a6fae25462920af42Steve Block        break;
81692e5dbf12901edacf14812a6fae25462920af42Steve Block        case 4:
82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            verifyTouchEvent("touchmove", 1, 1, 1);
83dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            shouldBeEqualToString("lastEvent.touches[0].target.tagName", "DIV");
84692e5dbf12901edacf14812a6fae25462920af42Steve Block        break;
85692e5dbf12901edacf14812a6fae25462920af42Steve Block
86692e5dbf12901edacf14812a6fae25462920af42Steve Block        default: testFailed("Wrong number of touch events! (" + which + ")");
87692e5dbf12901edacf14812a6fae25462920af42Steve Block    }
88692e5dbf12901edacf14812a6fae25462920af42Steve Block}
89692e5dbf12901edacf14812a6fae25462920af42Steve Block
90692e5dbf12901edacf14812a6fae25462920af42Steve Blockfunction singleTouchSequence()
91692e5dbf12901edacf14812a6fae25462920af42Steve Block{
92692e5dbf12901edacf14812a6fae25462920af42Steve Block    eventSender.addTouchPoint(10, 10);
93692e5dbf12901edacf14812a6fae25462920af42Steve Block    eventSender.touchStart();
94692e5dbf12901edacf14812a6fae25462920af42Steve Block
9521939df44de1705786c545cd1bf519d47250322dBen Murdoch    eventSender.updateTouchPoint(0, 50, 50);
96692e5dbf12901edacf14812a6fae25462920af42Steve Block    eventSender.setTouchModifier("shift", true);
97692e5dbf12901edacf14812a6fae25462920af42Steve Block    eventSender.setTouchModifier("alt", true);
98692e5dbf12901edacf14812a6fae25462920af42Steve Block    eventSender.touchMove();
99692e5dbf12901edacf14812a6fae25462920af42Steve Block
100692e5dbf12901edacf14812a6fae25462920af42Steve Block    eventSender.setTouchModifier("shift", false);
101692e5dbf12901edacf14812a6fae25462920af42Steve Block    eventSender.setTouchModifier("alt", false);
102692e5dbf12901edacf14812a6fae25462920af42Steve Block
103692e5dbf12901edacf14812a6fae25462920af42Steve Block    eventSender.releaseTouchPoint(0);
104692e5dbf12901edacf14812a6fae25462920af42Steve Block    eventSender.touchEnd();
105692e5dbf12901edacf14812a6fae25462920af42Steve Block}
106692e5dbf12901edacf14812a6fae25462920af42Steve Block
107692e5dbf12901edacf14812a6fae25462920af42Steve Blockfunction touchTargets()
108692e5dbf12901edacf14812a6fae25462920af42Steve Block{
10921939df44de1705786c545cd1bf519d47250322dBen Murdoch    eventSender.addTouchPoint(20, 20);
110692e5dbf12901edacf14812a6fae25462920af42Steve Block    eventSender.touchStart();
111692e5dbf12901edacf14812a6fae25462920af42Steve Block
112692e5dbf12901edacf14812a6fae25462920af42Steve Block    eventSender.updateTouchPoint(0, 1000, 1000);
113692e5dbf12901edacf14812a6fae25462920af42Steve Block    eventSender.touchMove();
114692e5dbf12901edacf14812a6fae25462920af42Steve Block}
115692e5dbf12901edacf14812a6fae25462920af42Steve Block
116692e5dbf12901edacf14812a6fae25462920af42Steve Blockif (window.layoutTestController)
117692e5dbf12901edacf14812a6fae25462920af42Steve Block    layoutTestController.waitUntilDone();
118692e5dbf12901edacf14812a6fae25462920af42Steve Block
119692e5dbf12901edacf14812a6fae25462920af42Steve Blockif (window.eventSender) {
120692e5dbf12901edacf14812a6fae25462920af42Steve Block    description("This tests basic single touch event support.");
121692e5dbf12901edacf14812a6fae25462920af42Steve Block
122692e5dbf12901edacf14812a6fae25462920af42Steve Block    lastEvent = null;
123692e5dbf12901edacf14812a6fae25462920af42Steve Block    eventSender.clearTouchPoints();
124692e5dbf12901edacf14812a6fae25462920af42Steve Block    singleTouchSequence();
125692e5dbf12901edacf14812a6fae25462920af42Steve Block
126692e5dbf12901edacf14812a6fae25462920af42Steve Block    lastEvent = null;
127692e5dbf12901edacf14812a6fae25462920af42Steve Block    eventSender.clearTouchPoints();
128692e5dbf12901edacf14812a6fae25462920af42Steve Block    touchTargets();
129692e5dbf12901edacf14812a6fae25462920af42Steve Block
130692e5dbf12901edacf14812a6fae25462920af42Steve Block} else {
131692e5dbf12901edacf14812a6fae25462920af42Steve Block    debug("This test requires DumpRenderTree.  Tap on the blue rect to log.")
132692e5dbf12901edacf14812a6fae25462920af42Steve Block}
133692e5dbf12901edacf14812a6fae25462920af42Steve Block
134692e5dbf12901edacf14812a6fae25462920af42Steve Block
135