Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / fast / events / touch / multi-touch-partial-sequence.html
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2 <html>
3 <head>
4 <script src="../../../resources/js-test.js"></script>
5 </head>
6 <body>
7 <p id="description"></p>
8 <div id="target" style="padding: 10px; background-color: blue;"></div>
9 <div id="console"></div>
10 <script>
11 description("Tests that events are received properly even when we never saw the touchstart for the first finger (eg. was skipped by cc touch hit testing) - crbug.com/363321");
12
13 var event;
14 var expectingStart = false;
15 var expectingEnd = false;
16
17 var target = document.getElementById('target');
18 var rect = target.getBoundingClientRect();
19 var targetX = rect.left + rect.width / 2;
20 var targetY = rect.top + rect.height / 2;
21
22 window.addEventListener('touchstart', function(e) {
23     if (!expectingStart) {
24       testFailed('Got unexpected touchstart event');
25       return;
26     }
27     expectingStart = false;
28     event = e;
29
30     shouldBe('event.target', 'target');
31
32     // Touch ID 0 is the one we never got a touchstart for, so it should
33     // be targetted at the document.
34     shouldBe('event.touches.length', '2');
35     shouldBe('event.touches[0].identifier', '0');
36     shouldBe('event.touches[0].pageX', '12');
37     shouldBe('event.touches[0].pageY', '0');
38     shouldBe('event.touches[0].target', 'document');
39
40     // Touch ID 1 should be the new touch.
41     shouldBe('event.touches[1].identifier', '1');
42     shouldBe('event.touches[1].pageX', 'targetX');
43     shouldBe('event.touches[1].pageY', 'targetY');
44     shouldBe('event.touches[1].target', 'target');
45     
46     shouldBe('event.changedTouches.length', '1');
47     shouldBe('event.changedTouches[0].identifier', '1');
48
49     shouldBe('event.targetTouches.length', '1');
50     shouldBe('event.targetTouches[0].identifier', '1');
51 });
52
53 window.addEventListener('touchmove', function(e) {
54     testFailed('Got unexpected touchmove event');
55 });
56
57 window.addEventListener('touchend', function(e) {
58     if (!expectingEnd) {
59       testFailed('Got unexpected touchstart event');
60       return;
61     }
62     expectingEnd = false;
63     event = e;
64
65     shouldBe('event.target', 'target');
66
67     shouldBe('event.touches.length', '0');
68     
69     shouldBe('event.changedTouches.length', '1');
70     shouldBe('event.changedTouches[0].identifier', '1');
71     shouldBe('event.changedTouches[0].pageX', 'targetX');
72     shouldBe('event.changedTouches[0].pageY', 'targetY');
73     shouldBe('event.changedTouches[0].target', 'target');
74
75     shouldBe('event.targetTouches.length', '0');
76 });
77
78 if (document.elementFromPoint(targetX, targetY) != target) {
79     testFailed('Failed to hit expected target at ' + targetX + ',' + targetY);
80 } else if (!window.eventSender) {
81     testFailed('This test requires eventSender');
82 } else {
83     eventSender.clearTouchPoints();
84
85     // First touch point is outside our target, but we never actually
86     // get a touchstart event sent to the renderer for it.
87     eventSender.addTouchPoint(10, 0);
88     eventSender.updateTouchPoint(0, 12, 0);
89
90     // Second point is on our target and we expect touchstart
91     eventSender.addTouchPoint(targetX, targetY);
92     debug('Sending touchstart event.');
93     expectingStart = true;
94     eventSender.touchStart();
95     if (expectingStart)
96       testFailed("Didn't receive expected touchstart event");
97     debug('');
98
99     // Make sure we don't get any events (or crash) if we receive a move or
100     // end for just the first touch point.
101     debug('Sending touchmove and touchend for unrelated touch point.');
102     eventSender.updateTouchPoint(0, 13, 0);
103     eventSender.touchMove();
104     eventSender.releaseTouchPoint(0);
105     eventSender.touchEnd();
106     debug('');
107
108     // If the 2nd touch point lifts, we get an event showing just that change.
109     debug('Sending touchend.');
110     eventSender.releaseTouchPoint(0);
111     expectingEnd = true;
112     eventSender.touchEnd();
113     if (expectingEnd)
114       testFailed("Didn't receive expected touchend event");
115     debug('');
116 }
117 </script>
118 </body>
119 </html>
120