diff --git a/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TextInputTestCase.java b/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TextInputTestCase.java
index ed3494ca6..9eff4494c 100644
--- a/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TextInputTestCase.java
+++ b/ReactAndroid/src/androidTest/java/com/facebook/react/tests/TextInputTestCase.java
@@ -11,25 +11,26 @@ package com.facebook.react.tests;
import android.graphics.Color;
import android.text.style.ForegroundColorSpan;
import android.util.TypedValue;
+import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
+import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import com.facebook.react.bridge.JavaScriptModule;
import com.facebook.react.testing.ReactAppInstrumentationTestCase;
import com.facebook.react.testing.ReactInstanceSpecForTest;
+import com.facebook.react.testing.StringRecordingModule;
import com.facebook.react.uimanager.PixelUtil;
-import com.facebook.react.uimanager.UIManagerModule;
-import com.facebook.react.uimanager.events.EventDispatcher;
import com.facebook.react.views.textinput.ReactEditText;
-import com.facebook.react.views.textinput.ReactTextChangedEvent;
-import com.facebook.react.views.textinput.ReactTextInputEvent;
/**
* Test to verify that TextInput renders correctly
*/
public class TextInputTestCase extends ReactAppInstrumentationTestCase {
+ private final StringRecordingModule mRecordingModule = new StringRecordingModule();
+
private interface TextInputTestModule extends JavaScriptModule {
void setValueRef(String ref, String value);
}
@@ -99,6 +100,46 @@ public class TextInputTestCase extends ReactAppInstrumentationTestCase {
}
}
+ public void testOnSubmitEditing() throws Throwable {
+ String testId = "onSubmitTextInput";
+ ReactEditText reactEditText = getViewByTestId(testId);
+
+ fireEditorActionAndCheckRecording(reactEditText, EditorInfo.IME_ACTION_GO);
+ fireEditorActionAndCheckRecording(reactEditText, EditorInfo.IME_ACTION_DONE);
+ fireEditorActionAndCheckRecording(reactEditText, EditorInfo.IME_ACTION_NEXT);
+ fireEditorActionAndCheckRecording(reactEditText, EditorInfo.IME_ACTION_PREVIOUS);
+ fireEditorActionAndCheckRecording(reactEditText, EditorInfo.IME_ACTION_SEARCH);
+ fireEditorActionAndCheckRecording(reactEditText, EditorInfo.IME_ACTION_SEND);
+ fireEditorActionAndCheckRecording(reactEditText, EditorInfo.IME_ACTION_UNSPECIFIED);
+ fireEditorActionAndCheckRecording(reactEditText, EditorInfo.IME_ACTION_NONE);
+ }
+
+ private void fireEditorActionAndCheckRecording(final ReactEditText reactEditText,
+ final int actionId) throws Throwable {
+ fireEditorActionAndCheckRecording(reactEditText, actionId, true);
+ fireEditorActionAndCheckRecording(reactEditText, actionId, false);
+ }
+
+ private void fireEditorActionAndCheckRecording(final ReactEditText reactEditText,
+ final int actionId,
+ final boolean blurOnSubmit) throws Throwable {
+ mRecordingModule.reset();
+
+ runTestOnUiThread(
+ new Runnable() {
+ @Override
+ public void run() {
+ reactEditText.requestFocusFromJS();
+ reactEditText.setBlurOnSubmit(blurOnSubmit);
+ reactEditText.onEditorAction(actionId);
+ }
+ });
+ waitForBridgeAndUIIdle();
+
+ assertEquals(1, mRecordingModule.getCalls().size());
+ assertEquals(!blurOnSubmit, reactEditText.isFocused());
+ }
+
/**
* Test that the mentions input has colors displayed correctly.
* Removed for being flaky in open source, December 2016
@@ -207,7 +248,8 @@ public class TextInputTestCase extends ReactAppInstrumentationTestCase {
@Override
protected ReactInstanceSpecForTest createReactInstanceSpecForTest() {
return super.createReactInstanceSpecForTest()
- .addJSModule(TextInputTestModule.class);
+ .addJSModule(TextInputTestModule.class)
+ .addNativeModule(mRecordingModule);
}
@Override
diff --git a/ReactAndroid/src/androidTest/js/TextInputTestModule.js b/ReactAndroid/src/androidTest/js/TextInputTestModule.js
index 1dd1c3d0c..924b7e119 100644
--- a/ReactAndroid/src/androidTest/js/TextInputTestModule.js
+++ b/ReactAndroid/src/androidTest/js/TextInputTestModule.js
@@ -18,6 +18,8 @@ var Text = require('Text');
var TextInput = require('TextInput');
var View = require('View');
+var Recording = require('NativeModules').Recording;
+
var app;
class TokenizedTextExample extends React.Component {
@@ -81,6 +83,10 @@ class TextInputTestApp extends React.Component {
app = this;
}
+ handleOnSubmitEditing = (record) => {
+ Recording.record(record);
+ };
+
render() {
return (
@@ -128,6 +134,12 @@ class TextInputTestApp extends React.Component {
defaultValue="Text"
testID="textInput6"
/>
+
);
diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java
index 714154be4..a09d9802a 100644
--- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java
+++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java
@@ -688,14 +688,12 @@ public class ReactTextInputManager extends BaseViewManager