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

Unified Diff: content/public/android/javatests/src/org/chromium/content/browser/LongPressDetectorTest.java

Issue 10818039: Upstream Android LongPressDetector (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Target rename base_javatests->base_java_test_support Created 8 years, 5 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: content/public/android/javatests/src/org/chromium/content/browser/LongPressDetectorTest.java
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/LongPressDetectorTest.java b/content/public/android/javatests/src/org/chromium/content/browser/LongPressDetectorTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..71718a6b6d846b7fbd84c40ccf7f83811d26f8b2
--- /dev/null
+++ b/content/public/android/javatests/src/org/chromium/content/browser/LongPressDetectorTest.java
@@ -0,0 +1,163 @@
+// Copyright (c) 2012 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.
+
+package org.chromium.content.browser;
+
+import android.content.Context;
+import android.os.SystemClock;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.view.GestureDetector;
+import android.view.MotionEvent;
+import android.view.ViewConfiguration;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import org.chromium.base.test.Feature;
+import org.chromium.base.test.ScalableTimeout;
+
+/**
+ * Test suite for LongPressDetector.
+ */
+public class LongPressDetectorTest extends InstrumentationTestCase {
+ private static final int FAKE_COORD_X = 42;
+ private static final int FAKE_COORD_Y = 24;
+ private LongPressDetector mLongPressDetector;
+
+ private MotionEvent motionEvent(int action, long downTime, long eventTime) {
+ return MotionEvent.obtain(downTime, eventTime, action, FAKE_COORD_X, FAKE_COORD_Y, 0);
+ }
+
+ @Override
+ public void setUp() {
+ mLongPressDetector = new LongPressDetector(getInstrumentation().getTargetContext(), null);
+ }
+
+ /**
+ * Verify a DOWN without a corresponding UP will have a pending DOWN.
+ *
+ * @throws Exception
+ */
+ @SmallTest
+ @Feature({"Android-WebView"})
+ public void testGestureSimpleLongPress() throws Exception {
+ final long downTime = SystemClock.uptimeMillis();
+ final long eventTime = SystemClock.uptimeMillis();
+
+ MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, eventTime);
+ mLongPressDetector.startLongPressTimerIfNeeded(event);
+
+ assertTrue("Should have a pending LONG_PRESS", mLongPressDetector.hasPendingMessage());
+ }
+
+ /**
+ * Verify a DOWN with a corresponding UP will not have a pending Gesture.
+ *
+ * @throws Exception
+ */
+ @SmallTest
+ @Feature({"Android-WebView"})
+ public void testGestureNoLongPress() throws Exception {
+ final long downTime = SystemClock.uptimeMillis();
+ final long eventTime = SystemClock.uptimeMillis();
+
+ MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, eventTime);
+ mLongPressDetector.startLongPressTimerIfNeeded(event);
+
+ assertTrue("Should have a pending LONG_PRESS", mLongPressDetector.hasPendingMessage());
+
+ event = motionEvent(MotionEvent.ACTION_UP, downTime, eventTime + 10);
+ mLongPressDetector.cancelLongPressIfNeeded(event);
+ assertTrue("Should not have a pending LONG_PRESS", !mLongPressDetector.hasPendingMessage());
+ }
+
+ /**
+ * Verify that a DOWN followed by an UP after the long press timer would
+ * detect a long press (that is, the UP will not trigger a tap or cancel the
+ * long press).
+ *
+ * @throws Exception
+ */
+ @SmallTest
+ @Feature({"Android-WebView"})
+ public void testGestureLongWithDelayedUp() throws Exception {
+ final long downTime = SystemClock.uptimeMillis();
+ final long eventTime = SystemClock.uptimeMillis();
+
+ MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, eventTime);
+ mLongPressDetector.startLongPressTimerIfNeeded(event);
+
+ assertTrue("Should have a pending LONG_PRESS", mLongPressDetector.hasPendingMessage());
+
+ // Event time must be larger than LONG_PRESS_TIMEOUT.
+ event = motionEvent(MotionEvent.ACTION_UP, downTime, eventTime + 1000);
+ mLongPressDetector.cancelLongPressIfNeeded(event);
+ assertTrue("Should still have a pending gesture", mLongPressDetector.hasPendingMessage());
+ }
+
+ /**
+ * Verify that the touch move threshold (slop) is working for events offered to native.
+ */
+ @SmallTest
+ @Feature({"Android-WebView"})
+ public void testConfirmOfferMoveEventToNative() {
+ final int slop = ViewConfiguration.get(getInstrumentation().getTargetContext())
+ .getScaledTouchSlop();
+
+ long eventTime = SystemClock.uptimeMillis();
+ final MotionEvent downEvent = MotionEvent.obtain(
+ eventTime, eventTime, MotionEvent.ACTION_DOWN, FAKE_COORD_X, FAKE_COORD_Y, 0);
+
+ // Test a small move, where confirmOfferMoveEventToNative should return false.
+ mLongPressDetector.onOfferTouchEventToJavaScript(downEvent);
+ eventTime = SystemClock.uptimeMillis();
+ final MotionEvent smallMove = MotionEvent.obtain(
+ eventTime, eventTime, MotionEvent.ACTION_MOVE,
+ FAKE_COORD_X + slop / 2, FAKE_COORD_Y + slop / 2, 0);
+ assertFalse(mLongPressDetector.confirmOfferMoveEventToJavaScript(smallMove));
+
+ // Test a big move, where confirmOfferMoveEventToNative should return true.
+ mLongPressDetector.onOfferTouchEventToJavaScript(downEvent);
+ eventTime = SystemClock.uptimeMillis();
+ final MotionEvent largeMove = MotionEvent.obtain(
+ eventTime, eventTime, MotionEvent.ACTION_MOVE,
+ FAKE_COORD_X + slop * 2, FAKE_COORD_Y + slop * 2, 0);
+ assertTrue(mLongPressDetector.confirmOfferMoveEventToJavaScript(largeMove));
+ }
+
+ /**
+ * This is an example of a large test running delayed messages.
+ * It exercises GestureDetector itself, and expects the onLongPress to be called.
+ * Note that GestureDetector creates a Handler and posts message to it for detecting
+ * long press. It needs to be created on the Main thread.
+ *
+ * @throws Exception
+ */
+ @LargeTest
+ @Feature({"Android-WebView"})
+ public void testGestureLongPressDetected() throws Exception {
+ final CountDownLatch longPressCalled = new CountDownLatch(1);
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ LongPressDetector longPressDetector = new LongPressDetector(
+ getInstrumentation().getTargetContext(),
+ new LongPressDetector.LongPressDelegate() {
+ public void onLongPress(MotionEvent event) {
+ longPressCalled.countDown();
+ }
+ });
+
+ final long downTime = SystemClock.uptimeMillis();
+ final long eventTime = SystemClock.uptimeMillis();
+ MotionEvent event = motionEvent(MotionEvent.ACTION_DOWN, downTime, downTime);
+ longPressDetector.startLongPressTimerIfNeeded(event);
+ }
+ });
+ assertTrue(longPressCalled.await(
+ ScalableTimeout.ScaleTimeout(1000), TimeUnit.MILLISECONDS));
+ }
+}
« no previous file with comments | « content/public/android/javatests/content_javatests.xml ('k') | content/shell/android/javatests/content_shell_test_apk.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698