/**
* Copyright (c) 2015-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.bridge;
import com.facebook.react.bridge.queue.ReactQueueConfiguration;
import com.facebook.react.bridge.queue.ReactQueueConfigurationImpl;
import com.facebook.react.bridge.queue.ReactQueueConfigurationSpec;
import com.facebook.react.bridge.queue.MessageQueueThreadSpec;
import com.facebook.react.bridge.queue.QueueThreadExceptionHandler;
import com.facebook.react.uimanager.UIManagerModule;
import org.robolectric.RuntimeEnvironment;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/**
* Utility for creating pre-configured instances of core react components for tests.
*/
public class ReactTestHelper {
/**
* @return a ReactApplicationContext that has a CatalystInstance mock returned by
* {@link #createMockCatalystInstance}
*/
public static ReactApplicationContext createCatalystContextForTest() {
ReactApplicationContext context =
new ReactApplicationContext(RuntimeEnvironment.application);
context.initializeWithInstance(createMockCatalystInstance());
return context;
}
/**
* @return a CatalystInstance mock that has a default working ReactQueueConfiguration.
*/
public static CatalystInstance createMockCatalystInstance() {
ReactQueueConfigurationSpec spec = ReactQueueConfigurationSpec.builder()
.setJSQueueThreadSpec(MessageQueueThreadSpec.mainThreadSpec())
.setNativeModulesQueueThreadSpec(MessageQueueThreadSpec.mainThreadSpec())
.build();
ReactQueueConfiguration ReactQueueConfiguration = ReactQueueConfigurationImpl.create(
spec,
new QueueThreadExceptionHandler() {
@Override
public void handleException(Exception e) {
throw new RuntimeException(e);
}
});
CatalystInstance reactInstance = mock(CatalystInstance.class);
when(reactInstance.getReactQueueConfiguration()).thenReturn(ReactQueueConfiguration);
when(reactInstance.getNativeModule(UIManagerModule.class))
.thenReturn(mock(UIManagerModule.class));
return reactInstance;
}
}