diff --git a/ReactAndroid/src/androidTest/java/com/facebook/react/tests/ReactPickerTestCase.java b/ReactAndroid/src/androidTest/java/com/facebook/react/tests/ReactPickerTestCase.java
index b27d9ecc0..5ad6d82e6 100644
--- a/ReactAndroid/src/androidTest/java/com/facebook/react/tests/ReactPickerTestCase.java
+++ b/ReactAndroid/src/androidTest/java/com/facebook/react/tests/ReactPickerTestCase.java
@@ -171,6 +171,36 @@ public class ReactPickerTestCase extends ReactAppInstrumentationTestCase {
assertEquals(2, (int) selections.get(0));
}
+ public void testOnSelectSequence() throws Throwable {
+ updateFirstSpinnerAndCheckLastSpinnerMatches(0);
+ updateFirstSpinnerAndCheckLastSpinnerMatches(2);
+ updateFirstSpinnerAndCheckLastSpinnerMatches(0);
+ updateFirstSpinnerAndCheckLastSpinnerMatches(2);
+ }
+
+ private void updateFirstSpinnerAndCheckLastSpinnerMatches(
+ final int indexToSelect
+ ) throws Throwable {
+ // The last spinner has the same selected value as the first one.
+ // Test that user selection is propagated correctly to JS, to setState, and to Spinners.
+ runTestOnUiThread(
+ new Runnable() {
+ @Override
+ public void run() {
+ ReactPicker spinner = getViewAtPath(0, 0);
+ spinner.setSelection(indexToSelect);
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+ waitForBridgeAndUIIdle();
+
+ ReactPicker spinnerInSync = getViewAtPath(0, 3);
+ assertEquals(
+ "Picker selection was not updated correctly via setState.",
+ indexToSelect,
+ spinnerInSync.getSelectedItemPosition());
+ }
+
private PickerAndroidTestModule getTestModule() {
return getReactContext().getCatalystInstance().getJSModule(PickerAndroidTestModule.class);
}
diff --git a/ReactAndroid/src/androidTest/js/PickerAndroidTestModule.js b/ReactAndroid/src/androidTest/js/PickerAndroidTestModule.js
index 95e31937d..e354d8fae 100644
--- a/ReactAndroid/src/androidTest/js/PickerAndroidTestModule.js
+++ b/ReactAndroid/src/androidTest/js/PickerAndroidTestModule.js
@@ -52,6 +52,14 @@ var PickerAndroidTestApp = React.createClass({
+
+
+
+
+
);
},