From 6ebee63ab78daa3f0863a2ae4e2f2b05dbcdd965 Mon Sep 17 00:00:00 2001 From: Abdennour JEBBAR Date: Fri, 9 Jun 2023 07:08:08 -0700 Subject: [PATCH] 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 --- .../react/bridge/ReactTestHelper.java | 59 ------------------- .../facebook/react/bridge/ReactTestHelper.kt | 48 +++++++++++++++ 2 files changed, 48 insertions(+), 59 deletions(-) delete mode 100644 packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.java create mode 100644 packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.kt diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.java b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.java deleted file mode 100644 index 717b689a2b0..00000000000 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.java +++ /dev/null @@ -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; - } -} diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.kt new file mode 100644 index 00000000000..18a49fb04a0 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.kt @@ -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 + } +}