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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/pdf/gesture_detector_test.js
diff --git a/chrome/test/data/pdf/gesture_detector_test.js b/chrome/test/data/pdf/gesture_detector_test.js
new file mode 100644
index 0000000000000000000000000000000000000000..e990bc473f1405406f9d4d6f2331dda084ca57c4
--- /dev/null
+++ b/chrome/test/data/pdf/gesture_detector_test.js
@@ -0,0 +1,187 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+chrome.test.runTests(function() {
+ 'use strict';
+
+ class StubElement {
+ constructor() {
+ this.listeners_ = new Map([
+ ['touchstart', []],
+ ['touchmove', []],
+ ['touchend', []],
+ ['touchcancel', []]
+ ]);
+ }
+
+ addEventListener(type, listener) {
+ 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.
+ this.listeners_.get(type).push(listener);
+ }
+ }
+
+ sendEvent(event) {
+ let listeners = this.listeners_.get(event.type);
+
+ 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.
+ l(event);
+ }
+ }
+
+ class MockTouchEvent {
+ constructor(type, touches) {
+ this.type = type;
+ this.touches = touches;
+ this.defaultPrevented = false;
+ }
+
+ preventDefault() {
+ this.defaultPrevented = true;
+ }
+ }
+
+ class PinchListener {
+ constructor(gestureDetector) {
+ this.lastEvent = null;
+ gestureDetector.addEventListener('pinchstart', this.onPinch_.bind(this));
+ gestureDetector.addEventListener('pinchupdate', this.onPinch_.bind(this));
+ gestureDetector.addEventListener('pinchend', this.onPinch_.bind(this));
+ }
+
+ onPinch_(pinchEvent) {
+ this.lastEvent = pinchEvent;
+ }
+ }
+
+ return [
+ function testPinchZoomIn() {
+ let stubElement = new StubElement();
+ let gestureDetector = new GestureDetector(stubElement);
+ let pinchListener = new PinchListener(gestureDetector);
+
+ stubElement.sendEvent(new MockTouchEvent('touchstart', [
+ {clientX: 0, clientY: 0},
+ {clientX: 0, clientY: 2}
+ ]));
+ chrome.test.assertEq('pinchstart', pinchListener.lastEvent.type);
+ chrome.test.assertEq(0, pinchListener.lastEvent.center.x);
+ chrome.test.assertEq(1, pinchListener.lastEvent.center.y);
+
+ stubElement.sendEvent(new MockTouchEvent('touchmove', [
+ {clientX: 0, clientY: 0},
+ {clientX: 0, clientY: 4}
+ ]));
+ chrome.test.assertEq('pinchupdate', pinchListener.lastEvent.type);
+ chrome.test.assertEq(2, pinchListener.lastEvent.scaleRatio);
+ chrome.test.assertEq('in', pinchListener.lastEvent.direction);
+ chrome.test.assertEq(2, pinchListener.lastEvent.startScaleRatio);
+ chrome.test.assertEq(0, pinchListener.lastEvent.center.x);
+ chrome.test.assertEq(2, pinchListener.lastEvent.center.y);
+
+ stubElement.sendEvent(new MockTouchEvent('touchmove', [
+ {clientX: 0, clientY: 0},
+ {clientX: 0, clientY: 8}
+ ]));
+ 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
+ chrome.test.assertEq(2, pinchListener.lastEvent.scaleRatio);
+ chrome.test.assertEq('in', pinchListener.lastEvent.direction);
+ chrome.test.assertEq(4, pinchListener.lastEvent.startScaleRatio);
+ chrome.test.assertEq(0, pinchListener.lastEvent.center.x);
+ chrome.test.assertEq(4, pinchListener.lastEvent.center.y);
+
+ stubElement.sendEvent(new MockTouchEvent('touchend', []));
+ chrome.test.assertEq('pinchend', pinchListener.lastEvent.type);
+ chrome.test.assertEq(4, pinchListener.lastEvent.startScaleRatio);
+ chrome.test.assertEq(0, pinchListener.lastEvent.center.x);
+ chrome.test.assertEq(4, pinchListener.lastEvent.center.y);
+
+ chrome.test.succeed();
+ },
+
+ function testPinchZoomInAndBackOut() {
+ let stubElement = new StubElement();
+ let gestureDetector = new GestureDetector(stubElement);
+ let pinchListener = new PinchListener(gestureDetector);
+
+ stubElement.sendEvent(new MockTouchEvent('touchstart', [
+ {clientX: 0, clientY: 0},
+ {clientX: 0, clientY: 2}
+ ]));
+ chrome.test.assertEq('pinchstart', pinchListener.lastEvent.type);
+ chrome.test.assertEq(0, pinchListener.lastEvent.center.x);
+ chrome.test.assertEq(1, pinchListener.lastEvent.center.y);
+
+ stubElement.sendEvent(new MockTouchEvent('touchmove', [
+ {clientX: 0, clientY: 0},
+ {clientX: 0, clientY: 4}
+ ]));
+ chrome.test.assertEq('pinchupdate', pinchListener.lastEvent.type);
+ chrome.test.assertEq(2, pinchListener.lastEvent.scaleRatio);
+ chrome.test.assertEq('in', pinchListener.lastEvent.direction);
+ chrome.test.assertEq(2, pinchListener.lastEvent.startScaleRatio);
+ chrome.test.assertEq(0, pinchListener.lastEvent.center.x);
+ chrome.test.assertEq(2, pinchListener.lastEvent.center.y);
+
+ stubElement.sendEvent(new MockTouchEvent('touchmove', [
+ {clientX: 0, clientY: 0},
+ {clientX: 0, clientY: 2}
+ ]));
+ // This should be part of the same gesture as an update.
+ // A change in direction should not end the gesture and start a new one.
+ chrome.test.assertEq('pinchupdate', pinchListener.lastEvent.type);
+ chrome.test.assertEq(0.5, pinchListener.lastEvent.scaleRatio);
+ chrome.test.assertEq('out', pinchListener.lastEvent.direction);
+ chrome.test.assertEq(1, pinchListener.lastEvent.startScaleRatio);
+ chrome.test.assertEq(0, pinchListener.lastEvent.center.x);
+ chrome.test.assertEq(1, pinchListener.lastEvent.center.y);
+
+ stubElement.sendEvent(new MockTouchEvent('touchend', []));
+ chrome.test.assertEq('pinchend', pinchListener.lastEvent.type);
+ chrome.test.assertEq(1, pinchListener.lastEvent.startScaleRatio);
+ chrome.test.assertEq(0, pinchListener.lastEvent.center.x);
+ chrome.test.assertEq(1, pinchListener.lastEvent.center.y);
+
+ chrome.test.succeed();
+ },
+
+ function testIgnoreTouchScrolling() {
+ let stubElement = new StubElement();
+ let gestureDetector = new GestureDetector(stubElement);
+ let pinchListener = new PinchListener(gestureDetector);
+
+ let touchScrollStartEvent = new MockTouchEvent('touchstart', [
+ {clientX: 0, clientY: 0},
+ ]);
+ stubElement.sendEvent(touchScrollStartEvent);
+ chrome.test.assertEq(null, pinchListener.lastEvent);
+ chrome.test.assertFalse(touchScrollStartEvent.defaultPrevented);
+
+ stubElement.sendEvent(new MockTouchEvent('touchmove', [
+ {clientX: 0, clientY: 1},
+ ]));
+ chrome.test.assertEq(null, pinchListener.lastEvent);
+
+ stubElement.sendEvent(new MockTouchEvent('touchend', []));
+ chrome.test.assertEq(null, pinchListener.lastEvent);
+
+ chrome.test.succeed();
+ },
+
+ function testPreventNativePinchZoom() {
+ let stubElement = new StubElement();
+ let gestureDetector = new GestureDetector(stubElement);
+ let pinchListener = new PinchListener(gestureDetector);
+
+ let pinchStartEvent = new MockTouchEvent('touchstart', [
+ {clientX: 0, clientY: 0},
+ {clientX: 0, clientY: 2}
+ ]);
+ stubElement.sendEvent(pinchStartEvent);
+ chrome.test.assertEq('pinchstart', pinchListener.lastEvent.type);
+ chrome.test.assertTrue(pinchStartEvent.defaultPrevented);
+
+ chrome.test.succeed();
+ }
+ ];
+}());

Powered by Google App Engine
This is Rietveld 408576698