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({ + + + + + ); },