mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Open sourced 4 more instrumentation tests for RN Android
Summary: More instrumentation tests in OSS means less work for FB engineers to investigate if a PR breaks some internal tests. + increased timeouts and retries for OSS tests runner Reviewed By: andreicoman11 Differential Revision: D3292582 fbshipit-source-id: 3f8aa4d3536450ea3af7acff044b9bb62be0f9db
This commit is contained in:
committed by
Facebook Github Bot 2
parent
31c8b3bd61
commit
2c3ca4c058
+161
@@ -0,0 +1,161 @@
|
||||
/**
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
package com.facebook.react.tests;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import android.app.TimePickerDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
|
||||
import com.facebook.react.bridge.BaseJavaModule;
|
||||
import com.facebook.react.testing.ReactInstanceSpecForTest;
|
||||
import com.facebook.react.bridge.ReactMethod;
|
||||
import com.facebook.react.bridge.JavaScriptModule;
|
||||
import com.facebook.react.bridge.WritableMap;
|
||||
import com.facebook.react.bridge.WritableNativeMap;
|
||||
import com.facebook.react.modules.timepicker.TimePickerDialogModule;
|
||||
import com.facebook.react.testing.ReactAppInstrumentationTestCase;
|
||||
|
||||
/**
|
||||
* Test case for {@link TimePickerDialogModule} options and callbacks.
|
||||
*/
|
||||
public class TimePickerDialogTestCase extends ReactAppInstrumentationTestCase {
|
||||
|
||||
private static interface TimePickerDialogTestModule extends JavaScriptModule {
|
||||
public void showTimePickerDialog(WritableMap options);
|
||||
}
|
||||
|
||||
private static class TimePickerDialogRecordingModule extends BaseJavaModule {
|
||||
|
||||
private final List<Integer[]> mTimes = new ArrayList<Integer[]>();
|
||||
private int mDismissed = 0;
|
||||
private int mErrors = 0;
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "TimePickerDialogRecordingModule";
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
public void recordTime(int hour, int minute) {
|
||||
mTimes.add(new Integer[] {hour, minute});
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
public void recordDismissed() {
|
||||
mDismissed++;
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
public void recordError() {
|
||||
mErrors++;
|
||||
}
|
||||
|
||||
public List<Integer[]> getTimes() {
|
||||
return new ArrayList<Integer[]>(mTimes);
|
||||
}
|
||||
|
||||
public int getDismissed() {
|
||||
return mDismissed;
|
||||
}
|
||||
|
||||
public int getErrors() {
|
||||
return mErrors;
|
||||
}
|
||||
}
|
||||
|
||||
final TimePickerDialogRecordingModule mRecordingModule = new TimePickerDialogRecordingModule();
|
||||
|
||||
@Override
|
||||
protected ReactInstanceSpecForTest createReactInstanceSpecForTest() {
|
||||
return super.createReactInstanceSpecForTest()
|
||||
.addNativeModule(mRecordingModule)
|
||||
.addJSModule(TimePickerDialogTestModule.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getReactApplicationKeyUnderTest() {
|
||||
return "TimePickerDialogTestApp";
|
||||
}
|
||||
|
||||
private TimePickerDialogTestModule getTestModule() {
|
||||
return getReactContext().getCatalystInstance().getJSModule(TimePickerDialogTestModule.class);
|
||||
}
|
||||
|
||||
private DialogFragment showDialog(WritableMap options) {
|
||||
getTestModule().showTimePickerDialog(options);
|
||||
|
||||
waitForBridgeAndUIIdle();
|
||||
getInstrumentation().waitForIdleSync();
|
||||
|
||||
return (DialogFragment) getActivity().getSupportFragmentManager()
|
||||
.findFragmentByTag(TimePickerDialogModule.FRAGMENT_TAG);
|
||||
}
|
||||
|
||||
public void testShowBasicTimePicker() {
|
||||
final DialogFragment fragment = showDialog(null);
|
||||
|
||||
assertNotNull(fragment);
|
||||
}
|
||||
|
||||
public void testPresetTimeAndCallback() throws Throwable {
|
||||
final WritableMap options = new WritableNativeMap();
|
||||
options.putInt("hour", 4);
|
||||
options.putInt("minute", 5);
|
||||
|
||||
final DialogFragment fragment = showDialog(options);
|
||||
|
||||
List<Integer[]> recordedTimes = mRecordingModule.getTimes();
|
||||
assertEquals(0, recordedTimes.size());
|
||||
|
||||
runTestOnUiThread(
|
||||
new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
((TimePickerDialog) fragment.getDialog())
|
||||
.getButton(DialogInterface.BUTTON_POSITIVE).performClick();
|
||||
}
|
||||
});
|
||||
|
||||
getInstrumentation().waitForIdleSync();
|
||||
waitForBridgeAndUIIdle();
|
||||
|
||||
assertEquals(0, mRecordingModule.getErrors());
|
||||
assertEquals(0, mRecordingModule.getDismissed());
|
||||
|
||||
recordedTimes = mRecordingModule.getTimes();
|
||||
assertEquals(1, recordedTimes.size());
|
||||
assertEquals(4, (int) recordedTimes.get(0)[0]);
|
||||
assertEquals(5, (int) recordedTimes.get(0)[1]);
|
||||
}
|
||||
|
||||
public void testDismissCallback() throws Throwable {
|
||||
final DialogFragment fragment = showDialog(null);
|
||||
|
||||
assertEquals(0, mRecordingModule.getDismissed());
|
||||
|
||||
runTestOnUiThread(
|
||||
new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
fragment.getDialog().dismiss();
|
||||
}
|
||||
});
|
||||
|
||||
getInstrumentation().waitForIdleSync();
|
||||
waitForBridgeAndUIIdle();
|
||||
|
||||
assertEquals(0, mRecordingModule.getErrors());
|
||||
assertEquals(0, mRecordingModule.getTimes().size());
|
||||
assertEquals(1, mRecordingModule.getDismissed());
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user