Skip to content

Commit e705e34

Browse files
committed
feat(Bridge): Remove the JavaScriptModulesConfig
Instead of registering JavaScript module names and methods, we can invoke the methods directly from the strings previously configured in the JavaScriptModulesConfig. This is how JavaScript modules are invoked in the latest version of React Native JavaScript libraries.
1 parent fafd55b commit e705e34

18 files changed

+198
-519
lines changed

ReactWindows/ReactNative.Tests/Bridge/JavaScriptModuleRegistryTests.cs

+49-32
Original file line numberDiff line numberDiff line change
@@ -13,67 +13,84 @@ namespace ReactNative.Tests.Bridge
1313
[TestClass]
1414
public class JavaScriptModuleRegistryTests
1515
{
16-
[TestMethod]
17-
public void JavaScriptModuleRegistry_ArgumentChecks()
18-
{
19-
var reactInstance = new MockReactInstance();
20-
var config = new JavaScriptModulesConfig.Builder().Build();
21-
22-
AssertEx.Throws<ArgumentNullException>(
23-
() => new JavaScriptModuleRegistry(null, config),
24-
ex => Assert.AreEqual("reactInstance", ex.ParamName));
25-
26-
AssertEx.Throws<ArgumentNullException>(
27-
() => new JavaScriptModuleRegistry(reactInstance, null),
28-
ex => Assert.AreEqual("config", ex.ParamName));
29-
}
30-
3116
[TestMethod]
3217
public void JavaScriptModuleRegistry_Invoke()
3318
{
34-
var config = new JavaScriptModulesConfig.Builder()
19+
var registry = new JavaScriptModuleRegistry.Builder()
3520
.Add<RCTEventEmitter>()
3621
.Add<AppRegistry>()
3722
.Add<TestJavaScriptModule>()
3823
.Build();
3924

4025
var are = new AutoResetEvent(false);
41-
var moduleIds = new List<int>();
42-
var methodIds = new List<int>();
26+
var modules = new List<string>();
27+
var methods = new List<string>();
4328
var argsList = new List<JArray>();
44-
var reactInstance = new MockReactInstance((moduleId, methodId, args, tracingName) =>
29+
var reactInstance = new MockReactInstance((mod, met, args, tracingName) =>
4530
{
46-
moduleIds.Add(moduleId);
47-
methodIds.Add(methodId);
31+
modules.Add(mod);
32+
methods.Add(met);
4833
argsList.Add(args);
4934
are.Set();
5035
});
5136

52-
var registry = new JavaScriptModuleRegistry(reactInstance, config);
53-
var module = registry.GetJavaScriptModule<TestJavaScriptModule>();
37+
var module = registry.GetJavaScriptModule<TestJavaScriptModule>(reactInstance);
5438

5539
module.Foo(42);
5640

5741
are.WaitOne();
5842

59-
Assert.AreEqual(1, moduleIds.Count);
60-
Assert.AreEqual(1, methodIds.Count);
61-
Assert.AreEqual(1, moduleIds.Count);
43+
Assert.AreEqual(1, modules.Count);
44+
Assert.AreEqual(1, methods.Count);
45+
Assert.AreEqual(1, modules.Count);
6246

63-
Assert.AreEqual(2, moduleIds[0]);
64-
Assert.AreEqual(2, methodIds[0]);
47+
Assert.AreEqual("TestJavaScriptModule", modules[0]);
48+
Assert.AreEqual("Foo", methods[0]);
6549
Assert.AreEqual(
66-
JArray.FromObject(new[] { 42 }).ToString(Formatting.None),
50+
JArray.FromObject(new[] { 42 }).ToString(Formatting.None),
6751
argsList[0].ToString(Formatting.None));
6852
}
6953

7054
[TestMethod]
7155
public void JavaScriptModuleRegistry_InvalidModule_Throws()
7256
{
73-
var config = new JavaScriptModulesConfig.Builder().Build();
57+
var registry = new JavaScriptModuleRegistry.Builder().Build();
7458
var reactInstance = new MockReactInstance();
75-
var registry = new JavaScriptModuleRegistry(reactInstance, config);
76-
AssertEx.Throws<InvalidOperationException>(() => registry.GetJavaScriptModule<TestJavaScriptModule>());
59+
AssertEx.Throws<InvalidOperationException>(() => registry.GetJavaScriptModule<TestJavaScriptModule>(reactInstance));
60+
}
61+
62+
#if DEBUG
63+
[TestMethod]
64+
public void JavaScriptModuleRegistry_Validate()
65+
{
66+
var builder = new JavaScriptModuleRegistry.Builder();
67+
68+
AssertEx.Throws<ArgumentException>(
69+
() => builder.Add(typeof(JavaScriptModuleBase)),
70+
ex => Assert.AreEqual("type", ex.ParamName));
71+
72+
AssertEx.Throws<ArgumentException>(
73+
() => builder.Add(typeof(IDerivedJavaScriptModule)),
74+
ex => Assert.AreEqual("type", ex.ParamName));
75+
76+
AssertEx.Throws<ArgumentException>(
77+
() => builder.Add(typeof(object)),
78+
ex => Assert.AreEqual("type", ex.ParamName));
79+
80+
AssertEx.Throws<ArgumentException>(
81+
() => builder.Add(typeof(NoConstructorJavaScriptModule)),
82+
ex => Assert.AreEqual("type", ex.ParamName));
83+
}
84+
#endif
85+
86+
public interface IDerivedJavaScriptModule : IJavaScriptModule
87+
{
88+
89+
}
90+
91+
public class NoConstructorJavaScriptModule : JavaScriptModuleBase
92+
{
93+
private NoConstructorJavaScriptModule() { }
7794
}
7895

7996
class TestJavaScriptModule : JavaScriptModuleBase

ReactWindows/ReactNative.Tests/Bridge/JavaScriptModulesConfigTests.cs

-187
This file was deleted.

ReactWindows/ReactNative.Tests/Bridge/ReactBridgeTests.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,16 @@ await JavaScriptHelpers.Run(async (executor, jsQueueThread) =>
6565
var bridge = new ReactBridge(executor, new MockReactCallback(), nativeThread);
6666
var token = await jsQueueThread.CallOnQueue(() =>
6767
{
68-
bridge.CallFunction(1, 1, new JArray());
68+
bridge.CallFunction("module", "method", new JArray());
6969
return executor.GetGlobalVariable("FunctionCalls");
7070
});
7171

7272
var expected = new JArray
7373
{
7474
new JArray
7575
{
76-
1,
77-
1,
76+
"module",
77+
"method",
7878
new JArray(),
7979
},
8080
};
@@ -132,7 +132,7 @@ public void ReactBridge_ReactCallbacks()
132132
() => eventHandler.Set());
133133

134134
var bridge = new ReactBridge(executor, callback, nativeThread);
135-
bridge.CallFunction(0, 0, new JArray());
135+
bridge.CallFunction("module", "method", new JArray());
136136

137137
Assert.IsTrue(eventHandler.WaitOne());
138138

@@ -175,7 +175,7 @@ public void ReactBridge_InvalidJavaScriptResponse()
175175

176176
for (var i = 0; i < n; ++i)
177177
{
178-
AssertEx.Throws<InvalidOperationException>(() => bridge.CallFunction(0, 0, new JArray()));
178+
AssertEx.Throws<InvalidOperationException>(() => bridge.CallFunction("module", "method", new JArray()));
179179
}
180180

181181
Assert.AreEqual(n, count);

ReactWindows/ReactNative.Tests/Bridge/ReactInstanceTests.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public async Task ReactInstance_GetModules()
2020
.Add(module)
2121
.Build();
2222

23-
var jsConfig = new JavaScriptModulesConfig.Builder()
23+
var jsRegistry = new JavaScriptModuleRegistry.Builder()
2424
.Add<TestJavaScriptModule>()
2525
.Build();
2626

@@ -29,7 +29,7 @@ public async Task ReactInstance_GetModules()
2929
{
3030
QueueConfigurationSpec = ReactQueueConfigurationSpec.Default,
3131
Registry = registry,
32-
JavaScriptModulesConfig = jsConfig,
32+
JavaScriptModuleRegistry = jsRegistry,
3333
JavaScriptExecutorFactory = () => executor,
3434
BundleLoader = JavaScriptBundleLoader.CreateFileLoader("ms-appx:///Resources/test.js"),
3535
NativeModuleCallExceptionHandler = _ => { }
@@ -56,14 +56,14 @@ public async Task ReactInstance_Initialize_Dispose()
5656
.Add(module)
5757
.Build();
5858

59-
var jsConfig = new JavaScriptModulesConfig.Builder().Build();
59+
var jsRegistry = new JavaScriptModuleRegistry.Builder().Build();
6060

6161
var executor = new MockJavaScriptExecutor((p0, p1, p2) => JValue.CreateNull());
6262
var builder = new ReactInstance.Builder()
6363
{
6464
QueueConfigurationSpec = ReactQueueConfigurationSpec.Default,
6565
Registry = registry,
66-
JavaScriptModulesConfig = jsConfig,
66+
JavaScriptModuleRegistry = jsRegistry,
6767
JavaScriptExecutorFactory = () => executor,
6868
BundleLoader = JavaScriptBundleLoader.CreateFileLoader("ms-appx:///Resources/test.js"),
6969
NativeModuleCallExceptionHandler = _ => { },
@@ -107,7 +107,7 @@ public async Task ReactInstance_ExceptionHandled_Disposes()
107107
.Add(module)
108108
.Build();
109109

110-
var jsConfig = new JavaScriptModulesConfig.Builder().Build();
110+
var jsRegistry = new JavaScriptModuleRegistry.Builder().Build();
111111
var executor = new MockJavaScriptExecutor((p0, p1, p2) => JValue.CreateNull());
112112

113113
var exception = new Exception();
@@ -121,7 +121,7 @@ public async Task ReactInstance_ExceptionHandled_Disposes()
121121
{
122122
QueueConfigurationSpec = ReactQueueConfigurationSpec.Default,
123123
Registry = registry,
124-
JavaScriptModulesConfig = jsConfig,
124+
JavaScriptModuleRegistry = jsRegistry,
125125
JavaScriptExecutorFactory = () => executor,
126126
BundleLoader = JavaScriptBundleLoader.CreateFileLoader("ms-appx:///Resources/test.js"),
127127
NativeModuleCallExceptionHandler = handler,

0 commit comments

Comments
 (0)