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