]>
Commit | Line | Data |
---|---|---|
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 |