aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/androidTest
diff options
context:
space:
mode:
authorKenny Root <kenny@the-b.org>2015-09-11 15:19:18 -0700
committerKenny Root <kenny@the-b.org>2015-09-11 15:19:53 -0700
commit02773d548ff5eaac9ac0e40c62345ea31419be61 (patch)
treeae0bc77ea2108dbd4d7f18708d56634bbabd5419 /app/src/androidTest
parent8114c1ec3ec2eb7f41add2a74bed51237b6b918a (diff)
downloadconnectbot-02773d548ff5eaac9ac0e40c62345ea31419be61.tar.gz
connectbot-02773d548ff5eaac9ac0e40c62345ea31419be61.tar.bz2
connectbot-02773d548ff5eaac9ac0e40c62345ea31419be61.zip
Try to add workaround for Espresso test race
The keyboard was not dismissing before the next espresso action ran, so it would send the input event to the wrong window and cause a security exception.
Diffstat (limited to 'app/src/androidTest')
-rw-r--r--app/src/androidTest/java/org/connectbot/StartupTest.java42
1 files changed, 41 insertions, 1 deletions
diff --git a/app/src/androidTest/java/org/connectbot/StartupTest.java b/app/src/androidTest/java/org/connectbot/StartupTest.java
index 9b725ef..05b7ba0 100644
--- a/app/src/androidTest/java/org/connectbot/StartupTest.java
+++ b/app/src/androidTest/java/org/connectbot/StartupTest.java
@@ -1,6 +1,7 @@
package org.connectbot;
import org.connectbot.util.HostDatabase;
+import org.hamcrest.Matcher;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -12,14 +13,17 @@ import android.content.res.Resources;
import android.support.annotation.ColorRes;
import android.support.annotation.StringRes;
import android.support.test.InstrumentationRegistry;
+import android.support.test.espresso.UiController;
+import android.support.test.espresso.ViewAction;
+import android.support.test.espresso.action.CloseKeyboardAction;
import android.support.test.espresso.intent.Intents;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
+import android.view.View;
import static android.support.test.espresso.Espresso.onData;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
-import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard;
import static android.support.test.espresso.action.ViewActions.longClick;
import static android.support.test.espresso.action.ViewActions.pressBack;
import static android.support.test.espresso.action.ViewActions.pressImeActionButton;
@@ -153,4 +157,40 @@ public class StartupTest {
onView(withId(R.id.console_flip)).check(matches(
hasDescendant(allOf(isDisplayed(), withId(R.id.terminal_view)))));
}
+
+ /*
+ * This is to work around a race condition where the software keyboard does not dismiss in time
+ * and you get a Security Exception.
+ *
+ * From: https://code.google.com/p/android-test-kit/issues/detail?id=79#c7
+ */
+ public static ViewAction closeSoftKeyboard() {
+ return new ViewAction() {
+ /**
+ * The delay time to allow the soft keyboard to dismiss.
+ */
+ private static final long KEYBOARD_DISMISSAL_DELAY_MILLIS = 1000L;
+
+ /**
+ * The real {@link CloseKeyboardAction} instance.
+ */
+ private final ViewAction mCloseSoftKeyboard = new CloseKeyboardAction();
+
+ @Override
+ public Matcher<View> getConstraints() {
+ return mCloseSoftKeyboard.getConstraints();
+ }
+
+ @Override
+ public String getDescription() {
+ return mCloseSoftKeyboard.getDescription();
+ }
+
+ @Override
+ public void perform(final UiController uiController, final View view) {
+ mCloseSoftKeyboard.perform(uiController, view);
+ uiController.loopMainThreadForAtLeast(KEYBOARD_DISMISSAL_DELAY_MILLIS);
+ }
+ };
+ }
}