3 module("Touch Interaction");
5 if ( !document.createEvent ){
6 test("Touch Simulation Not Supported",function(){
7 ok( true, 'This browser does not support "document.createEvent" and cannot simulate touch events.');
12 // a simple re-usable test harness object
14 init: function( opts ){
15 obj.$div = $('<div />')
23 .append('<div class="child" />')
24 .appendTo( document.body )
25 .bind("draginit dragstart drag dragend click", opts || {}, function( event ){
26 obj[ event.type ] += 1;
28 $.extend( obj, { draginit:0, dragstart:0, drag:0, dragend:0, click:0 });
36 asyncTest("default",function(){
38 // prep DEFAULT interaction
40 // simulate DEFAULT interaction
42 .fire("touchstart",{ pageX:50, pageY:50 })
43 .fire("touchmove",{ pageX:51, pageY:51 })
44 .fire("touchend",{ pageX:51, pageY:51 })
47 equals( obj.draginit, 1, "draginit");
48 equals( obj.dragstart, 1, "dragstart");
49 equals( obj.drag, 1, "drag");
50 equals( obj.dragend, 1, "dragend");
51 equals( obj.click, 0, "click");
52 // clean-up interaction
56 asyncTest('"not" option',function(){
59 obj.init({ not:'.child' });
60 // simulate NOT interaction
62 .fire("touchstart",{ pageX:50, pageY:50 })
63 .fire("touchmove",{ pageX:51, pageY:51 })
64 .fire("touchend",{ pageX:51, pageY:51 })
67 equals( obj.draginit, 0, "draginit");
68 equals( obj.dragstart, 0, "dragstart");
69 equals( obj.drag, 0, "drag");
70 equals( obj.dragend, 0, "dragend");
71 equals( obj.click, 1, "click");
72 // simlate NON NOT interaction
74 .fire("touchstart",{ pageX:50, pageY:50 })
75 .fire("touchmove",{ pageX:51, pageY:51 })
76 .fire("touchend",{ pageX:51, pageY:51 })
79 equals( obj.draginit, 1, "draginit");
80 equals( obj.dragstart, 1, "dragstart");
81 equals( obj.drag, 1, "drag");
82 equals( obj.dragend, 1, "dragend");
83 equals( obj.click, 1, "click");
84 // clean-up interaction
88 asyncTest('"handle" option',function(){
91 obj.init({ handle:'.child' });
92 // simulate HANDLE interaction
94 .fire("touchstart",{ pageX:50, pageY:50 })
95 .fire("touchmove",{ pageX:51, pageY:51 })
96 .fire("touchend",{ pageX:51, pageY:51 })
99 equals( obj.draginit, 1, "draginit");
100 equals( obj.dragstart, 1, "dragstart");
101 equals( obj.drag, 1, "drag");
102 equals( obj.dragend, 1, "dragend");
103 equals( obj.click, 0, "click");
104 // simulate NON HANDLE interaction
106 .fire("touchstart",{ pageX:50, pageY:50 })
107 .fire("touchmove",{ pageX:51, pageY:51 })
108 .fire("touchend",{ pageX:51, pageY:51 })
111 equals( obj.draginit, 1, "draginit");
112 equals( obj.dragstart, 1, "dragstart");
113 equals( obj.drag, 1, "drag");
114 equals( obj.dragend, 1, "dragend");
115 equals( obj.click, 1, "click");
116 // clean-up interaction
120 asyncTest('"which" option',function(){
123 obj.init({ which:0 });
124 // simulate WHICH interaction
126 .fire("touchstart",{ pageX:50, pageY:50, button:5 })
127 .fire("touchmove",{ pageX:51, pageY:51 })
128 .fire("touchend",{ pageX:51, pageY:51 })
131 equals( obj.draginit, 1, "draginit");
132 equals( obj.dragstart, 1, "dragstart");
133 equals( obj.drag, 1, "drag");
134 equals( obj.dragend, 1, "dragend");
135 equals( obj.click, 0, "click");
136 ok( true, '"which" not supported with touch events...');
137 // simulate NON WHICH interaction
139 .fire("touchstart",{ pageX:50, pageY:50 })
140 .fire("touchmove",{ pageX:51, pageY:51 })
141 .fire("touchend",{ pageX:51, pageY:51 })
144 equals( obj.draginit, 2, "draginit");
145 equals( obj.dragstart, 2, "dragstart");
146 equals( obj.drag, 2, "drag");
147 equals( obj.dragend, 2, "dragend");
148 equals( obj.click, 0, "click");
149 // clean-up interaction
153 asyncTest('"distance" option',function(){
156 obj.init({ distance:5 });
157 // simulate NON DISTANCE interaction
159 .fire("touchstart",{ pageX:50, pageY:50 })
160 .fire("touchmove",{ pageX:51, pageY:51 })
161 .fire("touchend",{ pageX:51, pageY:51 })
164 equals( obj.draginit, 1, "draginit");
165 equals( obj.dragstart, 0, "dragstart");
166 equals( obj.drag, 0, "drag");
167 equals( obj.dragend, 0, "dragend");
168 equals( obj.click, 1, "click");
169 // simulate DISTANCE interaction
171 .fire("touchstart",{ pageX:50, pageY:50 })
172 .fire("touchmove",{ pageX:53, pageY:54 })
173 .fire("touchend",{ pageX:53, pageY:54 })
176 equals( obj.draginit, 2, "draginit");
177 equals( obj.dragstart, 1, "dragstart");
178 equals( obj.drag, 1, "drag");
179 equals( obj.dragend, 1, "dragend");
180 equals( obj.click, 1, "click");
181 // clean-up interaction
186 asyncTest('"click" option',function(){
189 obj.init({ click:true });
190 // simulate CLICK interaction
192 .fire("touchstart",{ pageX:50, pageY:50 })
193 .fire("touchmove",{ pageX:51, pageY:51 })
194 .fire("touchend",{ pageX:51, pageY:51 })
197 equals( obj.draginit, 1, "draginit");
198 equals( obj.dragstart, 1, "dragstart");
199 equals( obj.drag, 1, "drag");
200 equals( obj.dragend, 1, "dragend");
201 equals( obj.click, 1, "click");
202 // clean-up interaction