Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(151)

Side by Side Diff: chrome/test/data/pdf/gesture_detector_test.js

Issue 2400743002: Improved Pinch-Zoom for PDF. (Closed)
Patch Set: Code review changes and GestureDetector tests. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 chrome.test.runTests(function() {
6 'use strict';
7
8 class StubElement {
9 constructor() {
10 this.listeners_ = new Map([
11 ['touchstart', []],
12 ['touchmove', []],
13 ['touchend', []],
14 ['touchcancel', []]
15 ]);
16 }
17
18 addEventListener(type, listener) {
19 if (this.listeners_.has(type)) {
dpapad 2016/11/08 18:32:35 Let's be consistent within this file regarding whe
Kevin McNee - google account 2016/11/08 23:08:21 Done.
20 this.listeners_.get(type).push(listener);
21 }
22 }
23
24 sendEvent(event) {
25 let listeners = this.listeners_.get(event.type);
26
27 for (let l of listeners)
dpapad 2016/11/08 18:32:35 for (let l of this.listeners_.get(event.type)) l
Kevin McNee - google account 2016/11/08 23:08:21 Done.
28 l(event);
29 }
30 }
31
32 class MockTouchEvent {
33 constructor(type, touches) {
34 this.type = type;
35 this.touches = touches;
36 this.defaultPrevented = false;
37 }
38
39 preventDefault() {
40 this.defaultPrevented = true;
41 }
42 }
43
44 class PinchListener {
45 constructor(gestureDetector) {
46 this.lastEvent = null;
47 gestureDetector.addEventListener('pinchstart', this.onPinch_.bind(this));
48 gestureDetector.addEventListener('pinchupdate', this.onPinch_.bind(this));
49 gestureDetector.addEventListener('pinchend', this.onPinch_.bind(this));
50 }
51
52 onPinch_(pinchEvent) {
53 this.lastEvent = pinchEvent;
54 }
55 }
56
57 return [
58 function testPinchZoomIn() {
59 let stubElement = new StubElement();
60 let gestureDetector = new GestureDetector(stubElement);
61 let pinchListener = new PinchListener(gestureDetector);
62
63 stubElement.sendEvent(new MockTouchEvent('touchstart', [
64 {clientX: 0, clientY: 0},
65 {clientX: 0, clientY: 2}
66 ]));
67 chrome.test.assertEq('pinchstart', pinchListener.lastEvent.type);
68 chrome.test.assertEq(0, pinchListener.lastEvent.center.x);
69 chrome.test.assertEq(1, pinchListener.lastEvent.center.y);
70
71 stubElement.sendEvent(new MockTouchEvent('touchmove', [
72 {clientX: 0, clientY: 0},
73 {clientX: 0, clientY: 4}
74 ]));
75 chrome.test.assertEq('pinchupdate', pinchListener.lastEvent.type);
76 chrome.test.assertEq(2, pinchListener.lastEvent.scaleRatio);
77 chrome.test.assertEq('in', pinchListener.lastEvent.direction);
78 chrome.test.assertEq(2, pinchListener.lastEvent.startScaleRatio);
79 chrome.test.assertEq(0, pinchListener.lastEvent.center.x);
80 chrome.test.assertEq(2, pinchListener.lastEvent.center.y);
81
82 stubElement.sendEvent(new MockTouchEvent('touchmove', [
83 {clientX: 0, clientY: 0},
84 {clientX: 0, clientY: 8}
85 ]));
86 chrome.test.assertEq('pinchupdate', pinchListener.lastEvent.type);
dpapad 2016/11/08 18:32:35 There are multiple blocks of code that assert last
Kevin McNee - google account 2016/11/08 23:08:21 It looks like chrome.test.assertEq compares object
87 chrome.test.assertEq(2, pinchListener.lastEvent.scaleRatio);
88 chrome.test.assertEq('in', pinchListener.lastEvent.direction);
89 chrome.test.assertEq(4, pinchListener.lastEvent.startScaleRatio);
90 chrome.test.assertEq(0, pinchListener.lastEvent.center.x);
91 chrome.test.assertEq(4, pinchListener.lastEvent.center.y);
92
93 stubElement.sendEvent(new MockTouchEvent('touchend', []));
94 chrome.test.assertEq('pinchend', pinchListener.lastEvent.type);
95 chrome.test.assertEq(4, pinchListener.lastEvent.startScaleRatio);
96 chrome.test.assertEq(0, pinchListener.lastEvent.center.x);
97 chrome.test.assertEq(4, pinchListener.lastEvent.center.y);
98
99 chrome.test.succeed();
100 },
101
102 function testPinchZoomInAndBackOut() {
103 let stubElement = new StubElement();
104 let gestureDetector = new GestureDetector(stubElement);
105 let pinchListener = new PinchListener(gestureDetector);
106
107 stubElement.sendEvent(new MockTouchEvent('touchstart', [
108 {clientX: 0, clientY: 0},
109 {clientX: 0, clientY: 2}
110 ]));
111 chrome.test.assertEq('pinchstart', pinchListener.lastEvent.type);
112 chrome.test.assertEq(0, pinchListener.lastEvent.center.x);
113 chrome.test.assertEq(1, pinchListener.lastEvent.center.y);
114
115 stubElement.sendEvent(new MockTouchEvent('touchmove', [
116 {clientX: 0, clientY: 0},
117 {clientX: 0, clientY: 4}
118 ]));
119 chrome.test.assertEq('pinchupdate', pinchListener.lastEvent.type);
120 chrome.test.assertEq(2, pinchListener.lastEvent.scaleRatio);
121 chrome.test.assertEq('in', pinchListener.lastEvent.direction);
122 chrome.test.assertEq(2, pinchListener.lastEvent.startScaleRatio);
123 chrome.test.assertEq(0, pinchListener.lastEvent.center.x);
124 chrome.test.assertEq(2, pinchListener.lastEvent.center.y);
125
126 stubElement.sendEvent(new MockTouchEvent('touchmove', [
127 {clientX: 0, clientY: 0},
128 {clientX: 0, clientY: 2}
129 ]));
130 // This should be part of the same gesture as an update.
131 // A change in direction should not end the gesture and start a new one.
132 chrome.test.assertEq('pinchupdate', pinchListener.lastEvent.type);
133 chrome.test.assertEq(0.5, pinchListener.lastEvent.scaleRatio);
134 chrome.test.assertEq('out', pinchListener.lastEvent.direction);
135 chrome.test.assertEq(1, pinchListener.lastEvent.startScaleRatio);
136 chrome.test.assertEq(0, pinchListener.lastEvent.center.x);
137 chrome.test.assertEq(1, pinchListener.lastEvent.center.y);
138
139 stubElement.sendEvent(new MockTouchEvent('touchend', []));
140 chrome.test.assertEq('pinchend', pinchListener.lastEvent.type);
141 chrome.test.assertEq(1, pinchListener.lastEvent.startScaleRatio);
142 chrome.test.assertEq(0, pinchListener.lastEvent.center.x);
143 chrome.test.assertEq(1, pinchListener.lastEvent.center.y);
144
145 chrome.test.succeed();
146 },
147
148 function testIgnoreTouchScrolling() {
149 let stubElement = new StubElement();
150 let gestureDetector = new GestureDetector(stubElement);
151 let pinchListener = new PinchListener(gestureDetector);
152
153 let touchScrollStartEvent = new MockTouchEvent('touchstart', [
154 {clientX: 0, clientY: 0},
155 ]);
156 stubElement.sendEvent(touchScrollStartEvent);
157 chrome.test.assertEq(null, pinchListener.lastEvent);
158 chrome.test.assertFalse(touchScrollStartEvent.defaultPrevented);
159
160 stubElement.sendEvent(new MockTouchEvent('touchmove', [
161 {clientX: 0, clientY: 1},
162 ]));
163 chrome.test.assertEq(null, pinchListener.lastEvent);
164
165 stubElement.sendEvent(new MockTouchEvent('touchend', []));
166 chrome.test.assertEq(null, pinchListener.lastEvent);
167
168 chrome.test.succeed();
169 },
170
171 function testPreventNativePinchZoom() {
172 let stubElement = new StubElement();
173 let gestureDetector = new GestureDetector(stubElement);
174 let pinchListener = new PinchListener(gestureDetector);
175
176 let pinchStartEvent = new MockTouchEvent('touchstart', [
177 {clientX: 0, clientY: 0},
178 {clientX: 0, clientY: 2}
179 ]);
180 stubElement.sendEvent(pinchStartEvent);
181 chrome.test.assertEq('pinchstart', pinchListener.lastEvent.type);
182 chrome.test.assertTrue(pinchStartEvent.defaultPrevented);
183
184 chrome.test.succeed();
185 }
186 ];
187 }());
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698