Merge "Make TextViewActivityTest stable by sleeping between clicks." into nyc-dev

This commit is contained in:
Keisuke Kuroyanagi
2016-04-04 03:39:18 +00:00
committed by Android (Google) Code Review
3 changed files with 69 additions and 22 deletions

View File

@@ -21,7 +21,6 @@ import org.hamcrest.Matcher;
import android.support.test.espresso.UiController;
import android.support.test.espresso.ViewAction;
import android.support.test.espresso.action.CoordinatesProvider;
import android.support.test.espresso.action.GeneralClickAction;
import android.support.test.espresso.action.MotionEvents;
import android.support.test.espresso.action.MotionEvents.DownResultHolder;
import android.support.test.espresso.action.Press;
@@ -34,7 +33,7 @@ import android.view.ViewConfiguration;
* ViewAction for performing an click on View by a mouse.
*/
public final class MouseClickAction implements ViewAction {
private final GeneralClickAction mGeneralClickAction;
private final ViewClickAction mViewClickAction;
@MouseUiController.MouseButton
private final int mButton;
@@ -100,30 +99,22 @@ public final class MouseClickAction implements ViewAction {
*/
public MouseClickAction(Tapper tapper, CoordinatesProvider coordinatesProvider,
@MouseUiController.MouseButton int button) {
mGeneralClickAction = new GeneralClickAction(tapper, coordinatesProvider, Press.PINPOINT);
mViewClickAction = new ViewClickAction(tapper, coordinatesProvider, Press.PINPOINT);
mButton = button;
}
@Override
public Matcher<View> getConstraints() {
return mGeneralClickAction.getConstraints();
return mViewClickAction.getConstraints();
}
@Override
public String getDescription() {
return mGeneralClickAction.getDescription();
return mViewClickAction.getDescription();
}
@Override
public void perform(UiController uiController, View view) {
mGeneralClickAction.perform(new MouseUiController(uiController, mButton), view);
long doubleTapTimeout = ViewConfiguration.getDoubleTapTimeout();
if (0 < doubleTapTimeout) {
// Wait to avoid false gesture detection. Without this wait, consecutive clicks can be
// detected as a triple click. e.g. 2 double clicks are detected as a triple click and
// a single click because espresso isn't aware of triple click detection logic, which
// is TextView specific gesture.
uiController.loopMainThreadForAtLeast(doubleTapTimeout);
}
mViewClickAction.perform(new MouseUiController(uiController, mButton), view);
}
}

View File

@@ -17,15 +17,10 @@
package android.widget.espresso;
import static android.support.test.espresso.action.ViewActions.actionWithAssertions;
import org.hamcrest.core.Is;
import org.hamcrest.core.IsInstanceOf;
import android.graphics.Rect;
import android.support.test.espresso.PerformException;
import android.support.test.espresso.ViewAction;
import android.support.test.espresso.action.CoordinatesProvider;
import android.support.test.espresso.action.GeneralClickAction;
import android.support.test.espresso.action.Press;
import android.support.test.espresso.action.Tap;
import android.support.test.espresso.util.HumanReadables;
@@ -55,7 +50,7 @@ public final class TextViewActions {
*/
public static ViewAction clickOnTextAtIndex(int index) {
return actionWithAssertions(
new GeneralClickAction(Tap.SINGLE, new TextCoordinates(index), Press.FINGER));
new ViewClickAction(Tap.SINGLE, new TextCoordinates(index), Press.FINGER));
}
/**
@@ -101,7 +96,7 @@ public final class TextViewActions {
*/
public static ViewAction doubleClickOnTextAtIndex(int index) {
return actionWithAssertions(
new GeneralClickAction(Tap.DOUBLE, new TextCoordinates(index), Press.FINGER));
new ViewClickAction(Tap.DOUBLE, new TextCoordinates(index), Press.FINGER));
}
/**
@@ -131,7 +126,7 @@ public final class TextViewActions {
*/
public static ViewAction longPressOnTextAtIndex(int index) {
return actionWithAssertions(
new GeneralClickAction(Tap.LONG, new TextCoordinates(index), Press.FINGER));
new ViewClickAction(Tap.LONG, new TextCoordinates(index), Press.FINGER));
}
/**

View File

@@ -0,0 +1,61 @@
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package android.widget.espresso;
import org.hamcrest.Matcher;
import android.support.test.espresso.UiController;
import android.support.test.espresso.ViewAction;
import android.support.test.espresso.action.CoordinatesProvider;
import android.support.test.espresso.action.GeneralClickAction;
import android.support.test.espresso.action.PrecisionDescriber;
import android.support.test.espresso.action.Tapper;
import android.view.View;
import android.view.ViewConfiguration;
public final class ViewClickAction implements ViewAction {
private final GeneralClickAction mGeneralClickAction;
public ViewClickAction(Tapper tapper, CoordinatesProvider coordinatesProvider,
PrecisionDescriber precisionDescriber) {
mGeneralClickAction = new GeneralClickAction(tapper, coordinatesProvider,
precisionDescriber);
}
@Override
public Matcher<View> getConstraints() {
return mGeneralClickAction.getConstraints();
}
@Override
public String getDescription() {
return mGeneralClickAction.getDescription();
}
@Override
public void perform(UiController uiController, View view) {
mGeneralClickAction.perform(uiController, view);
long doubleTapTimeout = ViewConfiguration.getDoubleTapTimeout();
if (0 < doubleTapTimeout) {
// Wait to avoid false gesture detection. Without this wait, consecutive clicks can be
// detected as a double click or triple click. e.g. 2 double clicks on TextView are
// detected as a triple click and a single click because espresso isn't aware of
// TextView specific gestures.
uiController.loopMainThreadForAtLeast(doubleTapTimeout);
}
}
}