-
Notifications
You must be signed in to change notification settings - Fork 24.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Convert BaseJavaModuleTest to Kotlin (#37822)
Summary: As part of the effort to Kotlin-fy React Native tests, I've converted [BaseJavaModuleTest](https://github.com/facebook/react-native/blob/main/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/BaseJavaModuleTest.java) to Kotlin. ## Changelog: [Internal] [Changed] - Convert BaseJavaModuleTest to Kotlin Pull Request resolved: #37822 Test Plan: Tests pass: ./gradlew :packages:react-native:ReactAndroid:test Formatted with [KtFmt](https://facebook.github.io/ktfmt/) Reviewed By: cortinico Differential Revision: D46639573 Pulled By: rshest fbshipit-source-id: d971d3a86ad05195885b8fbed8a165ab9efa9e78
- Loading branch information
1 parent
cd56347
commit 8ddb334
Showing
2 changed files
with
99 additions
and
131 deletions.
There are no files selected for viewing
131 changes: 0 additions & 131 deletions
131
...react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/BaseJavaModuleTest.java
This file was deleted.
Oops, something went wrong.
99 changes: 99 additions & 0 deletions
99
...s/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/BaseJavaModuleTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
/* | ||
* 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.turbomodule.core.interfaces.TurboModule | ||
import com.facebook.testutils.shadows.ShadowSoLoader | ||
import org.junit.Before | ||
import org.junit.Test | ||
import org.junit.runner.RunWith | ||
import org.mockito.Mockito.mock | ||
import org.mockito.Mockito.`when` as whenever | ||
import org.robolectric.RobolectricTestRunner | ||
import org.robolectric.annotation.Config | ||
|
||
/** Tests for [BaseJavaModule] and [JavaModuleWrapper] */ | ||
@Config(shadows = [ShadowSoLoader::class]) | ||
@RunWith(RobolectricTestRunner::class) | ||
class BaseJavaModuleTest { | ||
private lateinit var methods: List<JavaModuleWrapper.MethodDescriptor> | ||
private lateinit var moduleWrapper: JavaModuleWrapper | ||
private lateinit var generatedMethods: List<JavaModuleWrapper.MethodDescriptor> | ||
private lateinit var generatedModuleWrapper: JavaModuleWrapper | ||
private lateinit var arguments: ReadableNativeArray | ||
|
||
@Before | ||
fun setup() { | ||
val moduleHolder = ModuleHolder(MethodsModule()) | ||
moduleWrapper = JavaModuleWrapper(null, moduleHolder) | ||
methods = moduleWrapper.methodDescriptors | ||
val generatedModuleHolder = ModuleHolder(GeneratedMethodsModule()) | ||
generatedModuleWrapper = JavaModuleWrapper(null, generatedModuleHolder) | ||
generatedMethods = generatedModuleWrapper.methodDescriptors | ||
arguments = mock(ReadableNativeArray::class.java) | ||
} | ||
|
||
private fun findMethod(mname: String, methods: List<JavaModuleWrapper.MethodDescriptor>): Int = | ||
methods.indexOfFirst({ it.name === mname }) | ||
|
||
@Test(expected = NativeArgumentsParseException::class) | ||
fun testCallMethodWithoutEnoughArgs() { | ||
val methodId = findMethod("regularMethod", methods) | ||
whenever(arguments.size()).thenReturn(1) | ||
moduleWrapper.invoke(methodId, arguments) | ||
} | ||
|
||
@Test | ||
fun testCallMethodWithEnoughArgs() { | ||
val methodId = findMethod("regularMethod", methods) | ||
whenever(arguments.size()).thenReturn(2) | ||
moduleWrapper.invoke(methodId, arguments) | ||
} | ||
|
||
@Test | ||
fun testCallAsyncMethodWithEnoughArgs() { | ||
// Promise block evaluates to 2 args needing to be passed from JS | ||
val methodId = findMethod("asyncMethod", methods) | ||
whenever(arguments.size()).thenReturn(3) | ||
moduleWrapper.invoke(methodId, arguments) | ||
} | ||
|
||
@Test | ||
fun testCallSyncMethod() { | ||
val methodId = findMethod("syncMethod", methods) | ||
whenever(arguments.size()).thenReturn(2) | ||
moduleWrapper.invoke(methodId, arguments) | ||
} | ||
|
||
@Test | ||
fun testCallGeneratedMethod() { | ||
val methodId = findMethod("generatedMethod", generatedMethods) | ||
whenever(arguments.size()).thenReturn(2) | ||
generatedModuleWrapper.invoke(methodId, arguments) | ||
} | ||
|
||
private class MethodsModule : BaseJavaModule() { | ||
override fun getName(): String = "Methods" | ||
|
||
@ReactMethod fun regularMethod(a: String?, b: Int?) {} | ||
|
||
@ReactMethod fun asyncMethod(a: Int, p: Promise) {} | ||
|
||
@ReactMethod(isBlockingSynchronousMethod = true) fun syncMethod(a: Int, b: Int): Int = a + b | ||
} | ||
|
||
private abstract inner class NativeTestGeneratedModuleSpec : BaseJavaModule(), TurboModule { | ||
@ReactMethod abstract fun generatedMethod(a: String?, b: Int?) | ||
} | ||
|
||
private inner class GeneratedMethodsModule : NativeTestGeneratedModuleSpec() { | ||
override fun getName(): String = "GeneratedMethods" | ||
|
||
override fun generatedMethod(a: String?, b: Int?) {} | ||
} | ||
} |