]> git.proxmox.com Git - extjs.git/blame - extjs/packages/core/test/specs/event/gesture/Pinch.js
add extjs 6.0.1 sources
[extjs.git] / extjs / packages / core / test / specs / event / gesture / Pinch.js
CommitLineData
6527f429
DM
1// describe("Ext.event.gesture.Pinch", function () {});\r
2// The above appeases Cmd's parser to associate spec run results with files.\r
3\r
4(Ext.supports.Touch ? describe : xdescribe)("Ext.event.gesture.Pinch", function() {\r
5 var helper = Ext.testHelper,\r
6 targetEl, pinchstartHandler, pinchHandler, pinchendHandler, pinchcancelHandler,\r
7 pinchstartEvent, pinchEvent, pinchendEvent, pinchcancelEvent;\r
8\r
9 function start(cfg) {\r
10 helper.touchStart(targetEl, cfg);\r
11 }\r
12\r
13 function move(cfg) {\r
14 helper.touchMove(targetEl, cfg);\r
15 }\r
16\r
17 function end(cfg) {\r
18 helper.touchEnd(targetEl, cfg);\r
19 }\r
20\r
21 function cancel(cfg) {\r
22 helper.touchCancel(targetEl, cfg);\r
23 }\r
24\r
25 function expectInfo(e, info) {\r
26 var name;\r
27\r
28 for (name in info) {\r
29 expect(e[name]).toBe(info[name]);\r
30 }\r
31 }\r
32\r
33 function getDistance(x1, y1, x2, y2) {\r
34 return new Ext.util.Point(x1, y1).getDistanceTo({ x: x2, y: y2 });\r
35 }\r
36\r
37 beforeEach(function() {\r
38 targetEl = Ext.getBody().createChild({});\r
39 pinchstartHandler = jasmine.createSpy();\r
40 pinchHandler = jasmine.createSpy();\r
41 pinchendHandler = jasmine.createSpy();\r
42 pinchcancelHandler = jasmine.createSpy();\r
43\r
44 pinchstartHandler.andCallFake(function(event) {\r
45 pinchstartEvent = event;\r
46 });\r
47\r
48 pinchHandler.andCallFake(function(event) {\r
49 pinchEvent = event;\r
50 });\r
51\r
52 pinchendHandler.andCallFake(function(event) {\r
53 pinchendEvent = event;\r
54 });\r
55\r
56 pinchcancelHandler.andCallFake(function(event) {\r
57 pinchendEvent = event;\r
58 });\r
59\r
60 targetEl.on('pinchstart', pinchstartHandler);\r
61 targetEl.on('pinch', pinchHandler);\r
62 targetEl.on('pinchend', pinchendHandler);\r
63 targetEl.on('pinchcancel', pinchcancelHandler);\r
64 });\r
65\r
66 afterEach(function() {\r
67 targetEl.destroy();\r
68 });\r
69\r
70 it("should fire pinchstart, pinch, and pinchend", function() {\r
71 var distance, startDistance;\r
72 runs(function() {\r
73 start({ id: 1, x: 100, y: 102 });\r
74 start({ id: 2, x: 200, y: 198 });\r
75 move({ id: 1, x: 105, y: 103 });\r
76 });\r
77\r
78 waitsForAnimation();\r
79\r
80 runs(function() {\r
81 expect(pinchstartHandler).toHaveBeenCalled();\r
82 startDistance = distance = getDistance(105, 103, 200, 198);\r
83 expect(pinchstartEvent.distance).toBe(distance);\r
84 expect(pinchstartEvent.scale).toBe(1);\r
85 move({ id: 2, x: 195, y: 190 });\r
86 });\r
87\r
88 waitsForAnimation();\r
89\r
90 runs(function() {\r
91 distance = getDistance(105, 103, 195, 190);\r
92 expect(pinchHandler.callCount).toBe(1);\r
93 expect(pinchEvent.distance).toBe(distance);\r
94 expect(pinchEvent.scale).toBe(distance / startDistance);\r
95\r
96 move({ id: 1, x: 125, y: 133 });\r
97 });\r
98\r
99 waitsForAnimation();\r
100\r
101 runs(function() {\r
102 distance = getDistance(125, 133, 195, 190);\r
103 expect(pinchHandler.callCount).toBe(2);\r
104 expect(pinchEvent.distance).toBe(distance);\r
105 expect(pinchEvent.scale).toBe(distance / startDistance);\r
106\r
107 end({ id: 1, x: 125, y: 133 });\r
108 end({ id: 2, x: 195, y: 190 });\r
109 });\r
110\r
111 waitsForAnimation();\r
112\r
113 runs(function() {\r
114 expect(pinchendHandler).toHaveBeenCalled();\r
115 });\r
116 });\r
117\r
118 if (Ext.supports.Touch) {\r
119 it("should fire pinchcancel and not pinchend if the first touch is canceled", function() {\r
120 var distance, startDistance;\r
121 runs(function() {\r
122 start({ id: 1, x: 100, y: 102 });\r
123 start({ id: 2, x: 200, y: 198 });\r
124 move({ id: 1, x: 105, y: 103 });\r
125 });\r
126\r
127 waitsForAnimation();\r
128\r
129 runs(function() {\r
130 expect(pinchstartHandler).toHaveBeenCalled();\r
131 startDistance = distance = getDistance(105, 103, 200, 198);\r
132 expect(pinchstartEvent.distance).toBe(distance);\r
133 expect(pinchstartEvent.scale).toBe(1);\r
134 move({ id: 2, x: 195, y: 190 });\r
135 });\r
136\r
137 waitsForAnimation();\r
138\r
139 runs(function() {\r
140 distance = getDistance(105, 103, 195, 190);\r
141 expect(pinchHandler.callCount).toBe(1);\r
142 expect(pinchEvent.distance).toBe(distance);\r
143 expect(pinchEvent.scale).toBe(distance / startDistance);\r
144\r
145 cancel({ id: 1, x: 125, y: 133 });\r
146 end({ id: 2, x: 195, y: 190 });\r
147 });\r
148\r
149 waitsForAnimation();\r
150\r
151 runs(function() {\r
152 expect(pinchcancelHandler).toHaveBeenCalled();\r
153 expect(pinchendHandler).not.toHaveBeenCalled();\r
154 });\r
155 });\r
156\r
157 it("should fire pinchcancel if the second touch is canceled", function() {\r
158 var distance, startDistance;\r
159 runs(function() {\r
160 start({ id: 1, x: 100, y: 102 });\r
161 start({ id: 2, x: 200, y: 198 });\r
162 move({ id: 1, x: 105, y: 103 });\r
163 });\r
164\r
165 waitsForAnimation();\r
166\r
167 runs(function() {\r
168 expect(pinchstartHandler).toHaveBeenCalled();\r
169 startDistance = distance = getDistance(105, 103, 200, 198);\r
170 expect(pinchstartEvent.distance).toBe(distance);\r
171 expect(pinchstartEvent.scale).toBe(1);\r
172 move({ id: 2, x: 195, y: 190 });\r
173 });\r
174\r
175 waitsForAnimation();\r
176\r
177 runs(function() {\r
178 distance = getDistance(105, 103, 195, 190);\r
179 expect(pinchHandler.callCount).toBe(1);\r
180 expect(pinchEvent.distance).toBe(distance);\r
181 expect(pinchEvent.scale).toBe(distance / startDistance);\r
182\r
183 cancel({ id: 2, x: 195, y: 190 });\r
184 end({ id: 1, x: 125, y: 133 });\r
185 });\r
186\r
187 waitsForAnimation();\r
188\r
189 runs(function() {\r
190 expect(pinchcancelHandler).toHaveBeenCalled();\r
191 expect(pinchendHandler).not.toHaveBeenCalled();\r
192 });\r
193 });\r
194 }\r
195});\r