Skip to content

Commit e4a0a02

Browse files
philIipfacebook-github-bot
authored andcommitted
add unit test for method reflection on generated native modules (#36671)
Summary: Pull Request resolved: #36671 Changelog: [Internal] BaseJavaModuleTest tests the reflection of the native module methods wrapped by the JavaModuleWrapper abstraction, this abstraction is used by JNI in the C++ layer. however, though we already have logic that supports the reflection of our codegenned modules (turbomodules), we didn't have a test for it yet, so i'm adding it in this change. Reviewed By: javache, cortinico Differential Revision: D44450433 fbshipit-source-id: 44abcf188d4b0559c684a95b058bd55e082b5531
1 parent a7f7f8a commit e4a0a02

File tree

1 file changed

+39
-7
lines changed

1 file changed

+39
-7
lines changed

packages/react-native/ReactAndroid/src/test/java/com/facebook/react/bridge/BaseJavaModuleTest.java

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,23 @@ public static boolean loadLibrary(String shortName) {
4040
@RunWith(RobolectricTestRunner.class)
4141
public class BaseJavaModuleTest {
4242
private List<JavaModuleWrapper.MethodDescriptor> mMethods;
43-
private JavaModuleWrapper mWrapper;
43+
private JavaModuleWrapper mModuleWrapper;
44+
45+
private List<JavaModuleWrapper.MethodDescriptor> mGeneratedMethods;
46+
private JavaModuleWrapper mGeneratedModuleWrapper;
47+
4448
private ReadableNativeArray mArguments;
4549

4650
@Before
4751
public void setup() {
4852
ModuleHolder moduleHolder = new ModuleHolder(new MethodsModule());
49-
mWrapper = new JavaModuleWrapper(null, moduleHolder);
50-
mMethods = mWrapper.getMethodDescriptors();
53+
mModuleWrapper = new JavaModuleWrapper(null, moduleHolder);
54+
mMethods = mModuleWrapper.getMethodDescriptors();
55+
56+
ModuleHolder generatedModuleHolder = new ModuleHolder(new GeneratedMethodsModule());
57+
mGeneratedModuleWrapper = new JavaModuleWrapper(null, generatedModuleHolder);
58+
mGeneratedMethods = mGeneratedModuleWrapper.getMethodDescriptors();
59+
5160
mArguments = Mockito.mock(ReadableNativeArray.class);
5261
}
5362

@@ -67,29 +76,36 @@ private int findMethod(String mname, List<JavaModuleWrapper.MethodDescriptor> me
6776
public void testCallMethodWithoutEnoughArgs() throws Exception {
6877
int methodId = findMethod("regularMethod", mMethods);
6978
when(mArguments.size()).thenReturn(1);
70-
mWrapper.invoke(methodId, mArguments);
79+
mModuleWrapper.invoke(methodId, mArguments);
7180
}
7281

7382
@Test
7483
public void testCallMethodWithEnoughArgs() {
7584
int methodId = findMethod("regularMethod", mMethods);
7685
when(mArguments.size()).thenReturn(2);
77-
mWrapper.invoke(methodId, mArguments);
86+
mModuleWrapper.invoke(methodId, mArguments);
7887
}
7988

8089
@Test
8190
public void testCallAsyncMethodWithEnoughArgs() {
8291
// Promise block evaluates to 2 args needing to be passed from JS
8392
int methodId = findMethod("asyncMethod", mMethods);
8493
when(mArguments.size()).thenReturn(3);
85-
mWrapper.invoke(methodId, mArguments);
94+
mModuleWrapper.invoke(methodId, mArguments);
8695
}
8796

8897
@Test
8998
public void testCallSyncMethod() {
9099
int methodId = findMethod("syncMethod", mMethods);
91100
when(mArguments.size()).thenReturn(2);
92-
mWrapper.invoke(methodId, mArguments);
101+
mModuleWrapper.invoke(methodId, mArguments);
102+
}
103+
104+
@Test
105+
public void testCallGeneratedMethod() {
106+
int methodId = findMethod("generatedMethod", mGeneratedMethods);
107+
when(mArguments.size()).thenReturn(2);
108+
mGeneratedModuleWrapper.invoke(methodId, mArguments);
93109
}
94110

95111
private static class MethodsModule extends BaseJavaModule {
@@ -109,4 +125,20 @@ public int syncMethod(int a, int b) {
109125
return a + b;
110126
}
111127
}
128+
129+
private abstract class NativeTestGeneratedModuleSpec extends BaseJavaModule
130+
implements ReactModuleWithSpec {
131+
@ReactMethod
132+
public abstract void generatedMethod(String a, int b);
133+
}
134+
135+
private class GeneratedMethodsModule extends NativeTestGeneratedModuleSpec {
136+
@Override
137+
public String getName() {
138+
return "GeneratedMethods";
139+
}
140+
141+
@Override
142+
public void generatedMethod(String a, int b) {}
143+
}
112144
}

0 commit comments

Comments
 (0)