From 27f50ae12dc1411d9dc3d40d977152555fc05883 Mon Sep 17 00:00:00 2001 From: Stephen G Date: Tue, 14 Nov 2017 13:08:52 -0800 Subject: [PATCH 1/3] Locally working example --- app/build.gradle | 11 +- .../java/com/termux/app/TermuxTest.java | 126 ++++++++++++++++++ .../java/com/termux/view/TerminalView.java | 2 + 3 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 app/src/androidTest/java/com/termux/app/TermuxTest.java diff --git a/app/build.gradle b/app/build.gradle index 33768b31ae..af669746fa 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,8 +5,8 @@ android { buildToolsVersion "27.0.1" dependencies { - compile 'com.android.support:support-annotations:27.0.0' - compile "com.android.support:support-core-ui:27.0.0" + compile 'com.android.support:support-annotations:27.0.1' + compile 'com.android.support:support-core-ui:27.0.1' compile project(":terminal-view") } @@ -16,6 +16,7 @@ android { targetSdkVersion 27 versionCode 54 versionName "0.54" + testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner' } buildTypes { @@ -29,4 +30,10 @@ android { dependencies { testCompile 'junit:junit:4.12' + androidTestCompile 'com.android.support.test:runner:1.0.1' + androidTestCompile 'com.android.support.test:rules:1.0.1' + androidTestCompile 'org.hamcrest:hamcrest-library:1.3' + androidTestCompile 'com.android.support.test.espresso:espresso-core:3.0.1' + androidTestCompile 'com.android.support.test.espresso:espresso-intents:3.0.1' + androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.3' } diff --git a/app/src/androidTest/java/com/termux/app/TermuxTest.java b/app/src/androidTest/java/com/termux/app/TermuxTest.java new file mode 100644 index 0000000000..b6bddd1a57 --- /dev/null +++ b/app/src/androidTest/java/com/termux/app/TermuxTest.java @@ -0,0 +1,126 @@ +package com.termux.app; + +import org.hamcrest.Matcher; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import android.support.test.espresso.PerformException; +import android.support.test.espresso.UiController; +import android.support.test.espresso.ViewAction; +import android.support.test.espresso.util.HumanReadables; +import android.support.test.espresso.util.TreeIterables; +import android.support.test.filters.LargeTest; +import android.support.test.rule.ActivityTestRule; +import android.support.test.runner.AndroidJUnit4; +import android.util.Log; +import android.view.View; + +import com.termux.R; +import com.termux.view.TerminalView; + +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +import static android.support.test.espresso.Espresso.onView; +import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard; +import static android.support.test.espresso.action.ViewActions.typeText; +import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom; +import static android.support.test.espresso.matcher.ViewMatchers.isRoot; +import static android.support.test.espresso.matcher.ViewMatchers.withId; + +@RunWith(AndroidJUnit4.class) +@LargeTest +public class TermuxTest { + + private String mStringToBetyped; + + private final String LOG_TAG = "tagger"; + + @Rule + public ActivityTestRule mActivityRule = new ActivityTestRule<>( + TermuxActivity.class); + + @Before + public void initValidString() { + // Specify a valid string. + mStringToBetyped = "ls -lah\n"; + } + + @Test + public void changeText_sameActivity() { + // wait during 15 seconds for a view + onView(isRoot()).perform(waitId(R.id.terminal_view, TimeUnit.SECONDS.toMillis(15))); + + // Type text + onView(withId(R.id.terminal_view)).perform(typeText(mStringToBetyped), closeSoftKeyboard()); + + Log.d(LOG_TAG,"Hello"); + Log.d(LOG_TAG, getText(withId(R.id.terminal_view))); + } + + String getText(final Matcher matcher) { + final String[] stringHolder = { null }; + onView(matcher).perform(new ViewAction() { + @Override + public Matcher getConstraints() { + return isAssignableFrom(TerminalView.class); + } + + @Override + public String getDescription() { + return "getting text from a TextView"; + } + + @Override + public void perform(UiController uiController, View view) { + TerminalView tv = (TerminalView)view; //Save, because of check in getConstraints() + stringHolder[0] = tv.getText().toString(); + } + }); + return stringHolder[0]; + } + + /** Perform action of waiting for a specific view id. */ + public static ViewAction waitId(final int viewId, final long millis) { + return new ViewAction() { + @Override + public Matcher getConstraints() { + return isRoot(); + } + + @Override + public String getDescription() { + return "wait for a specific view with id <" + viewId + "> during " + millis + " millis."; + } + + @Override + public void perform(final UiController uiController, final View view) { + uiController.loopMainThreadUntilIdle(); + final long startTime = System.currentTimeMillis(); + final long endTime = startTime + millis; + final Matcher viewMatcher = withId(viewId); + + do { + for (View child : TreeIterables.breadthFirstViewTraversal(view)) { + // found view with required ID + if (viewMatcher.matches(child)) { + return; + } + } + + uiController.loopMainThreadForAtLeast(50); + } + while (System.currentTimeMillis() < endTime); + + // timeout happens + throw new PerformException.Builder() + .withActionDescription(this.getDescription()) + .withViewDescription(HumanReadables.describe(view)) + .withCause(new TimeoutException()) + .build(); + } + }; + } +} diff --git a/terminal-view/src/main/java/com/termux/view/TerminalView.java b/terminal-view/src/main/java/com/termux/view/TerminalView.java index 91d0762d90..9603df8313 100644 --- a/terminal-view/src/main/java/com/termux/view/TerminalView.java +++ b/terminal-view/src/main/java/com/termux/view/TerminalView.java @@ -909,6 +909,8 @@ public void onGetContentRect(ActionMode mode, View view, Rect outRect) { } } + public String getText() { return mTermSession.getEmulator().getScreen().getTranscriptText(); } + public TerminalSession getCurrentSession() { return mTermSession; } From edd332245859daf338326107b5585cd8f317fe7a Mon Sep 17 00:00:00 2001 From: Stephen Date: Thu, 21 Dec 2017 14:44:24 -0800 Subject: [PATCH 2/3] bad merge --- app/build.gradle | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1b8e5b05d4..496389e2be 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,6 @@ android { applicationId "com.termux" minSdkVersion 21 targetSdkVersion 27 - versionCode 56 - versionName "0.56" versionCode 59 versionName "0.59" testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner' From 2c7ce98c321ac3eedc1a9bd34e5c39e6a81eaf4f Mon Sep 17 00:00:00 2001 From: Stephen Date: Fri, 13 Mar 2020 13:53:53 -0700 Subject: [PATCH 3/3] remove doubled --- terminal-view/src/main/java/com/termux/view/TerminalView.java | 1 - 1 file changed, 1 deletion(-) diff --git a/terminal-view/src/main/java/com/termux/view/TerminalView.java b/terminal-view/src/main/java/com/termux/view/TerminalView.java index adaba732ab..cc3df20e31 100644 --- a/terminal-view/src/main/java/com/termux/view/TerminalView.java +++ b/terminal-view/src/main/java/com/termux/view/TerminalView.java @@ -1479,7 +1479,6 @@ private void stopTextSelectionMode() { } } - public String getText() { return mTermSession.getEmulator().getScreen().getTranscriptText(); } private final Runnable mShowFloatingToolbar = new Runnable() { @Override