Convert ReactTestHelper (#37768)

Summary:
As part of the effort to Kotlin-fy React Native tests, I've converted [ReactTestHelper](https://github.com/facebook/react-native/tree/main/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.java) to Kotlin.

## Changelog:

[Internal] [Changed] - Convert ReactTestHelper to Kotlin

Pull Request resolved: https://github.com/facebook/react-native/pull/37768

Test Plan:
Tests pass: ./gradlew :packages:react-native:ReactAndroid:test
Formatted with [KtFmt](https://facebook.github.io/ktfmt/)

Reviewed By: rshest

Differential Revision: D46587427

Pulled By: cortinico

fbshipit-source-id: 82d08d01cf4c7cb7c05a63696e1acdacf60b1ad5
This commit is contained in:
Abdennour JEBBAR
2023-06-09 07:08:08 -07:00
committed by Facebook GitHub Bot
parent 0aa330801b
commit 6ebee63ab7
2 changed files with 48 additions and 59 deletions
@@ -1,59 +0,0 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
package com.facebook.react.bridge;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import com.facebook.react.bridge.queue.MessageQueueThreadSpec;
import com.facebook.react.bridge.queue.QueueThreadExceptionHandler;
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.uimanager.UIManagerModule;
import org.robolectric.RuntimeEnvironment;
/** 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));
when(reactInstance.isDestroyed()).thenReturn(false);
return reactInstance;
}
}
@@ -0,0 +1,48 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
package com.facebook.react.bridge
import com.facebook.react.bridge.queue.MessageQueueThreadSpec
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.uimanager.UIManagerModule
import org.mockito.Mockito.mock
import org.mockito.Mockito.`when` as whenever
import org.robolectric.RuntimeEnvironment
/** Utility for creating pre-configured instances of core react components for tests. */
object ReactTestHelper {
/**
* @return a ReactApplicationContext that has a CatalystInstance mock returned by
* [createMockCatalystInstance]
*/
@JvmStatic
fun createCatalystContextForTest(): ReactApplicationContext =
ReactApplicationContext(RuntimeEnvironment.application).apply {
initializeWithInstance(createMockCatalystInstance())
}
/** @return a CatalystInstance mock that has a default working ReactQueueConfiguration. */
@JvmStatic
fun createMockCatalystInstance(): CatalystInstance {
val spec: ReactQueueConfigurationSpec =
ReactQueueConfigurationSpec.builder()
.setJSQueueThreadSpec(MessageQueueThreadSpec.mainThreadSpec())
.setNativeModulesQueueThreadSpec(MessageQueueThreadSpec.mainThreadSpec())
.build()
val reactQueueConfiguration: ReactQueueConfiguration =
ReactQueueConfigurationImpl.create(spec) { e -> throw RuntimeException(e) }
val reactInstance: CatalystInstance = mock(CatalystInstance::class.java)
whenever(reactInstance.getReactQueueConfiguration()).thenReturn(reactQueueConfiguration)
whenever(reactInstance.getNativeModule(UIManagerModule::class.java))
.thenReturn(mock(UIManagerModule::class.java))
whenever(reactInstance.isDestroyed()).thenReturn(false)
return reactInstance
}
}