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

Unified Diff: components/test/data/dom_distiller/pinch_tester.js

Issue 1009703002: Changing font size with pinch gesture in Reader Mode (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove redundant code, use const in js, fix feedback font size Created 5 years, 8 months 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: components/test/data/dom_distiller/pinch_tester.js
diff --git a/components/test/data/dom_distiller/pinch_tester.js b/components/test/data/dom_distiller/pinch_tester.js
new file mode 100644
index 0000000000000000000000000000000000000000..e2c1df505166790970b0a1003c4bfa1bbb11d8ed
--- /dev/null
+++ b/components/test/data/dom_distiller/pinch_tester.js
@@ -0,0 +1,388 @@
+// Copyright 2015 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.
+
+var pinchtest = (function() {
+ 'use strict';
+
+ function assertTrue(condition, message) {
+ if (!condition) {
+ message = message || "Assertion failed";
+ console.trace();
+ throw new Error(message);
+ }
+ }
+
+ function assertClose(a, b, message) {
+ if (Math.abs(a-b) > 1e-5) {
+ message = message || "Assertion failed";
+ console.log('"', a, '" and "', b, '" are not close.');
+ console.trace();
+ throw new Error(message);
+ }
+ }
+
+ function isEquivalent(a, b) {
+ // Create arrays of property names
+ var aProps = Object.getOwnPropertyNames(a);
+ var bProps = Object.getOwnPropertyNames(b);
+
+ // If number of properties is different,
+ // objects are not equivalent
+ if (aProps.length != bProps.length) {
+ return false;
+ }
+
+ for (var i = 0; i < aProps.length; i++) {
+ var propName = aProps[i];
+
+ // If values of same property are not equal,
+ // objects are not equivalent
+ if (a[propName] !== b[propName]) {
+ return false;
+ }
+ }
+
+ // If we made it this far, objects
+ // are considered equivalent
+ return true;
+ }
+
+ function assertEqual(a, b, message) {
+ if (!isEquivalent(a, b)) {
+ message = message || "Assertion failed";
+ console.log('"', a, '" and "', b, '" are not equal');
+ console.trace();
+ throw new Error(message);
+ }
+ }
+
+ var touch = (function() {
+ 'use strict';
+ var points = {};
+ function lowestID() {
+ var ans = -1;
+ for(var key in points) {
+ ans = Math.max(ans, key);
+ }
+ return ans + 1;
+ }
+ function changeTouchPoint (key, x, y, offsetX, offsetY) {
+ var e = {
+ clientX: x,
+ clientY: y,
+ pageX: x,
+ pageY: y
+ };
+ if (typeof(offsetX) === 'number') {
+ e.clientX += offsetX;
+ }
+ if (typeof(offsetY) === 'number') {
+ e.clientY += offsetY;
+ }
+ points[key] = e;
+ }
+ return {
+ addTouchPoint: function(x, y, offsetX, offsetY) {
+ changeTouchPoint(lowestID(), x, y, offsetX, offsetY);
+ },
+ updateTouchPoint: changeTouchPoint,
+ releaseTouchPoint: function(key) {
+ delete points[key];
+ },
+ events: function() {
+ var arr = [];
+ for(var key in points) {
+ arr.push(points[key]);
+ }
+ return {
+ touches: arr,
+ preventDefault: function(){}
+ };
+ }
+ }
+ });
+
+ function testZoomOut() {
+ pincher.reset();
+ var t = new touch();
+
+ // Make sure start event doesn't change state
+ var oldState = pincher.status();
+ t.addTouchPoint(100, 100);
+ pincher.handleTouchStart(t.events());
+ assertEqual(oldState, pincher.status());
+ t.addTouchPoint(300, 300);
+ pincher.handleTouchStart(t.events());
+ assertEqual(oldState, pincher.status());
+
+ // Make sure extra move event doesn't change state
+ pincher.handleTouchMove(t.events());
+ assertEqual(oldState, pincher.status());
+
+ t.updateTouchPoint(0, 150, 150);
+ t.updateTouchPoint(1, 250, 250);
+ pincher.handleTouchMove(t.events());
+ assertTrue(pincher.status().clampedScale < 0.9);
+
+ // Make sure end event doesn't change state
+ oldState = pincher.status();
+ t.releaseTouchPoint(1);
+ pincher.handleTouchEnd(t.events());
+ assertEqual(oldState, pincher.status());
+ t.releaseTouchPoint(0);
+ pincher.handleTouchEnd(t.events());
+ assertEqual(oldState, pincher.status());
+ }
+
+ function testZoomIn() {
+ pincher.reset();
+ var t = new touch();
+
+ var oldState = pincher.status();
+ t.addTouchPoint(150, 150);
+ pincher.handleTouchStart(t.events());
+ assertEqual(oldState, pincher.status());
+ t.addTouchPoint(250, 250);
+ pincher.handleTouchStart(t.events());
+ assertEqual(oldState, pincher.status());
+
+ t.updateTouchPoint(0, 100, 100);
+ t.updateTouchPoint(1, 300, 300);
+ pincher.handleTouchMove(t.events());
+ assertTrue(pincher.status().clampedScale > 1.1);
+
+ oldState = pincher.status();
+ t.releaseTouchPoint(1);
+ pincher.handleTouchEnd(t.events());
+ assertEqual(oldState, pincher.status());
+ t.releaseTouchPoint(0);
+ pincher.handleTouchEnd(t.events());
+ assertEqual(oldState, pincher.status());
+ }
+
+ function testZoomOutAndPan() {
+ pincher.reset();
+ var t = new touch();
+ t.addTouchPoint(100, 100);
+ pincher.handleTouchStart(t.events());
+ t.addTouchPoint(300, 300);
+ pincher.handleTouchStart(t.events());
+ t.updateTouchPoint(0, 150, 150);
+ t.updateTouchPoint(1, 250, 250);
+ pincher.handleTouchMove(t.events());
+ t.updateTouchPoint(0, 150, 150, 10, -5);
+ t.updateTouchPoint(1, 250, 250, 10, -5);
+ pincher.handleTouchMove(t.events());
+ t.releaseTouchPoint(1);
+ pincher.handleTouchEnd(t.events());
+ t.releaseTouchPoint(0);
+ pincher.handleTouchEnd(t.events());
+
+ assertClose(pincher.status().shiftX, 10);
+ assertClose(pincher.status().shiftY, -5);
+ assertTrue(pincher.status().clampedScale < 0.9);
+ }
+
+ function testReversible() {
+ pincher.reset();
+ var t = new touch();
+ t.addTouchPoint(100, 100);
+ pincher.handleTouchStart(t.events());
+ t.addTouchPoint(300, 300);
+ pincher.handleTouchStart(t.events());
+ t.updateTouchPoint(0, 0, 0);
+ t.updateTouchPoint(1, 400, 400);
+ pincher.handleTouchMove(t.events());
+ t.releaseTouchPoint(1);
+ pincher.handleTouchEnd(t.events());
+ t.releaseTouchPoint(0);
+ pincher.handleTouchEnd(t.events());
+ t.addTouchPoint(0, 0);
+ pincher.handleTouchStart(t.events());
+ t.addTouchPoint(400, 400);
+ pincher.handleTouchStart(t.events());
+ t.updateTouchPoint(0, 100, 100);
+ t.updateTouchPoint(1, 300, 300);
+ pincher.handleTouchMove(t.events());
+ t.releaseTouchPoint(1);
+ pincher.handleTouchEnd(t.events());
+ t.releaseTouchPoint(0);
+ pincher.handleTouchEnd(t.events());
+ assertClose(pincher.status().clampedScale, 1);
+ }
+
+ function testMultitouchZoomOut() {
+ pincher.reset();
+ var t = new touch();
+
+ var oldState = pincher.status();
+ t.addTouchPoint(100, 100);
+ pincher.handleTouchStart(t.events());
+ assertEqual(oldState, pincher.status());
+ t.addTouchPoint(300, 300);
+ pincher.handleTouchStart(t.events());
+ assertEqual(oldState, pincher.status());
+ t.addTouchPoint(100, 300);
+ pincher.handleTouchStart(t.events());
+ assertEqual(oldState, pincher.status());
+ t.addTouchPoint(300, 100);
+ pincher.handleTouchStart(t.events());
+ assertEqual(oldState, pincher.status());
+
+ // Multi-touch zoom out.
+ t.updateTouchPoint(0, 150, 150);
+ t.updateTouchPoint(1, 250, 250);
+ t.updateTouchPoint(2, 150, 250);
+ t.updateTouchPoint(3, 250, 150);
+ pincher.handleTouchMove(t.events());
+
+ oldState = pincher.status();
+ t.releaseTouchPoint(3);
+ pincher.handleTouchEnd(t.events());
+ assertEqual(oldState, pincher.status());
+ t.releaseTouchPoint(2);
+ pincher.handleTouchEnd(t.events());
+ assertEqual(oldState, pincher.status());
+ t.releaseTouchPoint(1);
+ pincher.handleTouchEnd(t.events());
+ assertEqual(oldState, pincher.status());
+ t.releaseTouchPoint(0);
+ pincher.handleTouchEnd(t.events());
+ assertEqual(oldState, pincher.status());
+
+ assertTrue(pincher.status().clampedScale < 0.9);
+ }
+
+ function testZoomOutThenMulti() {
+ pincher.reset();
+ var t = new touch();
+
+ var oldState = pincher.status();
+ t.addTouchPoint(100, 100);
+ pincher.handleTouchStart(t.events());
+ assertEqual(oldState, pincher.status());
+ t.addTouchPoint(300, 300);
+ pincher.handleTouchStart(t.events());
+ assertEqual(oldState, pincher.status());
+
+ // Zoom out.
+ t.updateTouchPoint(0, 150, 150);
+ t.updateTouchPoint(1, 250, 250);
+ pincher.handleTouchMove(t.events());
+ assertTrue(pincher.status().clampedScale < 0.9);
+
+ // Make sure adding and removing more point doesn't change state
+ oldState = pincher.status();
+ t.addTouchPoint(600, 600);
+ pincher.handleTouchStart(t.events());
+ assertEqual(oldState, pincher.status());
+ t.releaseTouchPoint(2);
+ pincher.handleTouchEnd(t.events());
+ assertEqual(oldState, pincher.status());
+
+ // More than two fingers.
+ t.addTouchPoint(150, 250);
+ pincher.handleTouchStart(t.events());
+ t.addTouchPoint(250, 150);
+ pincher.handleTouchStart(t.events());
+ assertEqual(oldState, pincher.status());
+
+ t.updateTouchPoint(0, 100, 100);
+ t.updateTouchPoint(1, 300, 300);
+ t.updateTouchPoint(2, 100, 300);
+ t.updateTouchPoint(3, 300, 100);
+ pincher.handleTouchMove(t.events());
+ assertClose(pincher.status().scale, 1);
+
+ oldState = pincher.status();
+ t.releaseTouchPoint(3);
+ t.releaseTouchPoint(2);
+ t.releaseTouchPoint(1);
+ t.releaseTouchPoint(0);
+ pincher.handleTouchEnd(t.events());
+ assertEqual(oldState, pincher.status());
+ }
+
+ function testCancel() {
+ pincher.reset();
+ var t = new touch();
+
+ t.addTouchPoint(100, 100);
+ pincher.handleTouchStart(t.events());
+ t.addTouchPoint(300, 300);
+ pincher.handleTouchStart(t.events());
+ t.updateTouchPoint(0, 150, 150);
+ t.updateTouchPoint(1, 250, 250);
+ pincher.handleTouchMove(t.events());
+ assertTrue(pincher.status().clampedScale < 0.9);
+
+ var oldState = pincher.status();
+ t.releaseTouchPoint(1);
+ t.releaseTouchPoint(0);
+ pincher.handleTouchCancel(t.events());
+ assertEqual(oldState, pincher.status());
+
+ t.addTouchPoint(150, 150);
+ pincher.handleTouchStart(t.events());
+ t.addTouchPoint(250, 250);
+ pincher.handleTouchStart(t.events());
+ t.updateTouchPoint(0, 100, 100);
+ t.updateTouchPoint(1, 300, 300);
+ pincher.handleTouchMove(t.events());
+ assertClose(pincher.status().clampedScale, 1);
+ }
+
+ function testSingularity() {
+ pincher.reset();
+ var t = new touch();
+
+ t.addTouchPoint(100, 100);
+ pincher.handleTouchStart(t.events());
+ t.addTouchPoint(100, 100);
+ pincher.handleTouchStart(t.events());
+ t.updateTouchPoint(0, 150, 150);
+ t.updateTouchPoint(1, 50, 50);
+ pincher.handleTouchMove(t.events());
+ assertTrue(pincher.status().clampedScale > 1.1);
+ assertTrue(pincher.status().clampedScale < 100);
+ assertTrue(pincher.status().scale < 100);
+
+ pincher.handleTouchCancel();
+ }
+
+ function testMinSpan() {
+ pincher.reset();
+ var t = new touch();
+
+ t.addTouchPoint(50, 50);
+ pincher.handleTouchStart(t.events());
+ t.addTouchPoint(150, 150);
+ pincher.handleTouchStart(t.events());
+ t.updateTouchPoint(0, 100, 100);
+ t.updateTouchPoint(1, 100, 100);
+ pincher.handleTouchMove(t.events());
+ assertTrue(pincher.status().clampedScale < 0.9);
+ assertTrue(pincher.status().clampedScale > 0);
+ assertTrue(pincher.status().scale > 0);
+
+ pincher.handleTouchCancel();
+ }
+
+ return {
+ run: function(){
+ testZoomOut();
+ testZoomIn();
+ testZoomOutAndPan();
+ testReversible();
+ testMultitouchZoomOut();
+ testZoomOutThenMulti();
+ testCancel();
+ testSingularity();
+ testMinSpan();
+ pincher.reset();
+
+ return {success: true};
+ }
+ };
+}());

Powered by Google App Engine
This is Rietveld 408576698