basic-single-touch-events.js revision 21939df44de1705786c545cd1bf519d47250322d
1var div = document.createElement("div");
2div.id = "touchtarget";
3div.style.width = "100px";
4div.style.height = "100px";
5div.style.backgroundColor = "blue";
6
7var lastEvent = null;
8var touchEventsReceived = 0;
9var EXPECTED_TOUCH_EVENTS_TOTAL = 5;
10
11function touchEventCallback() {
12    if (window.eventSender) {
13        lastEvent = event;
14        verifyTouch(touchEventsReceived++);
15    } else {
16        debug(event.type);
17    }
18
19    if (window.layoutTestController && touchEventsReceived == EXPECTED_TOUCH_EVENTS_TOTAL) {
20        // If we've got here, we can safely say we were successfully parsed :) We need to
21        // call the isSucccessfullyParsed function to output the correct TEST COMPLETE
22        // footer message.
23        successfullyParsed = true;
24        isSuccessfullyParsed();
25        layoutTestController.notifyDone();
26    }
27}
28
29div.addEventListener("touchstart", touchEventCallback, false);
30div.addEventListener("touchmove", touchEventCallback, false);
31div.addEventListener("touchend", touchEventCallback, false);
32document.body.insertBefore(div, document.body.firstChild);
33
34function verifyTouchEvent(type, totalTouchCount, changedTouchCount, targetTouchCount)
35{
36    shouldBeEqualToString("lastEvent.type", type);
37    shouldBe("lastEvent.touches.length", totalTouchCount.toString());
38    shouldBe("lastEvent.changedTouches.length", changedTouchCount.toString());
39    shouldBe("lastEvent.targetTouches.length", targetTouchCount.toString());
40    shouldBe("lastEvent.pageX", "0");
41    shouldBe("lastEvent.pageY", "0");
42}
43
44function verifyTouchPoint(list, point, x, y, id)
45{
46    shouldBe("lastEvent." + list + "[" + point + "].pageX", x.toString());
47    shouldBe("lastEvent." + list + "[" + point + "].pageY", y.toString());
48    shouldBe("lastEvent." + list + "[" + point + "].clientX", x.toString());
49    shouldBe("lastEvent." + list + "[" + point + "].clientY", y.toString());
50    shouldBe("lastEvent." + list + "[" + point + "].identifier", id.toString());
51}
52
53function verifyTouch(which) {
54    switch (which) {
55        case 0:
56           verifyTouchEvent("touchstart", 1, 1, 1);
57           shouldBe("lastEvent.shiftKey", "false");
58           shouldBeEqualToString("lastEvent.touches[0].target.id", "touchtarget");
59           verifyTouchPoint("touches", 0, 10, 10, 0);
60           verifyTouchPoint("changedTouches", 0, 10, 10, 0);
61           verifyTouchPoint("targetTouches", 0, 10, 10, 0);
62        break;
63        case 1:
64           verifyTouchEvent("touchmove", 1, 1, 1);
65           verifyTouchPoint("touches", 0, 50, 50, 0);
66           shouldBe("lastEvent.shiftKey", "true");
67           shouldBe("lastEvent.altKey", "true");
68           shouldBe("lastEvent.ctrlKey", "false");
69           shouldBe("lastEvent.metaKey", "false");
70        break;
71        case 2:
72            verifyTouchEvent("touchend", 0, 1, 0);
73            verifyTouchPoint("changedTouches", 0, 50, 50, 0);
74            shouldBe("lastEvent.shiftKey", "false");
75            shouldBe("lastEvent.altKey", "false");
76        break;
77        case 3:
78            verifyTouchEvent("touchstart", 1, 1, 1);
79            shouldBeEqualToString("lastEvent.targetTouches[0].target.tagName", "DIV");
80        break;
81        case 4:
82            verifyTouchEvent("touchmove", 1, 1, 1);
83            shouldBeEqualToString("lastEvent.touches[0].target.tagName", "DIV");
84        break;
85
86        default: testFailed("Wrong number of touch events! (" + which + ")");
87    }
88}
89
90function singleTouchSequence()
91{
92    eventSender.addTouchPoint(10, 10);
93    eventSender.touchStart();
94
95    eventSender.updateTouchPoint(0, 50, 50);
96    eventSender.setTouchModifier("shift", true);
97    eventSender.setTouchModifier("alt", true);
98    eventSender.touchMove();
99
100    eventSender.setTouchModifier("shift", false);
101    eventSender.setTouchModifier("alt", false);
102
103    eventSender.releaseTouchPoint(0);
104    eventSender.touchEnd();
105}
106
107function touchTargets()
108{
109    eventSender.addTouchPoint(20, 20);
110    eventSender.touchStart();
111
112    eventSender.updateTouchPoint(0, 1000, 1000);
113    eventSender.touchMove();
114}
115
116if (window.layoutTestController)
117    layoutTestController.waitUntilDone();
118
119if (window.eventSender) {
120    description("This tests basic single touch event support.");
121
122    lastEvent = null;
123    eventSender.clearTouchPoints();
124    singleTouchSequence();
125
126    lastEvent = null;
127    eventSender.clearTouchPoints();
128    touchTargets();
129
130} else {
131    debug("This test requires DumpRenderTree.  Tap on the blue rect to log.")
132}
133
134
135