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(); |
+ } |
+ ]; |
+}()); |