public async Task ReactBridge_InvokeCallback() { await JavaScriptHelpers.Run(async (executor, jsQueueThread) => { using (var nativeThread = MessageQueueThread.Create(MessageQueueThreadSpec.Create("native", MessageQueueThreadKind.BackgroundAnyThread), ex => { Assert.Fail(); })) { var reactCallback = new MockReactCallback(); var bridge = new ReactBridge(executor, new MockReactCallback(), nativeThread); var token = await jsQueueThread.CallOnQueue(() => { bridge.InvokeCallback(1, new JArray()); return(executor.GetGlobalVariable("CallbackCalls")); }); var expected = new JArray { new JArray { 1, new JArray(), }, }; Assert.AreEqual(expected.ToString(Formatting.None), token.ToString(Formatting.None)); } }); }
public async Task ReactBridge_InvokeCallback() { await JavaScriptHelpers.Run(async (executor, jsQueueThread) => { using (var nativeThread = new ActionQueue(ex => { Assert.Fail(); })) { var bridge = new ReactBridge(executor, new MockReactCallback(), nativeThread); var token = await jsQueueThread.RunAsync(() => { bridge.InvokeCallback(1, new JArray()); return(executor.GetGlobalVariable("CallbackCalls")); }); var expected = new JArray { new JArray { 1, new JArray(), }, }; Assert.That(expected.ToString(Formatting.None), Is.EqualTo(token.ToString(Formatting.None))); } }); }
public async Task ReactBridge_CallFunction() { await JavaScriptHelpers.Run(async (executor, jsQueueThread) => { using (var nativeThread = CreateNativeModulesThread()) { var reactCallback = new MockReactCallback(); var bridge = new ReactBridge(executor, new MockReactCallback(), nativeThread); var token = await jsQueueThread.CallOnQueue(() => { bridge.CallFunction("module", "method", new JArray()); return(executor.GetGlobalVariable("FunctionCalls")); }); var expected = new JArray { new JArray { "module", "method", new JArray(), }, }; Assert.AreEqual(expected.ToString(Formatting.None), token.ToString(Formatting.None)); } }); }
public async Task ReactBridge_Ctor_ArgumentChecks() { await JavaScriptHelpers.Run((executor, jsQueueThread) => { using (var nativeThread = CreateNativeModulesThread()) { var reactCallback = new MockReactCallback(); Assert.That( () => new ReactBridge(null, reactCallback, nativeThread), Throws.ArgumentNullException.With.Property("ParamName").EqualTo("executor") ); Assert.That( () => new ReactBridge(executor, null, nativeThread), Throws.ArgumentNullException.With.Property("ParamName").EqualTo("reactCallback") ); Assert.That( () => new ReactBridge(executor, reactCallback, null), Throws.ArgumentNullException.With.Property("ParamName").EqualTo("nativeModulesQueueThread") ); } }); }
public async Task ChakraJavaScriptExecutor_ArgumentChecks() { await JavaScriptHelpers.Run((executor, jsQueueThread) => { AssertEx.Throws <ArgumentNullException>( () => executor.Call(null, "foo", new JArray()), ex => Assert.AreEqual("moduleName", ex.ParamName)); AssertEx.Throws <ArgumentNullException>( () => executor.Call("foo", null, new JArray()), ex => Assert.AreEqual("methodName", ex.ParamName)); AssertEx.Throws <ArgumentNullException>( () => executor.Call("foo", "bar", null), ex => Assert.AreEqual("arguments", ex.ParamName)); AssertEx.Throws <ArgumentNullException>( () => executor.RunScript(null), ex => Assert.AreEqual("script", ex.ParamName)); AssertEx.Throws <ArgumentNullException>( () => executor.SetGlobalVariable(null, new JArray()), ex => Assert.AreEqual("propertyName", ex.ParamName)); AssertEx.Throws <ArgumentNullException>( () => executor.SetGlobalVariable("foo", null), ex => Assert.AreEqual("value", ex.ParamName)); AssertEx.Throws <ArgumentNullException>( () => executor.GetGlobalVariable(null), ex => Assert.AreEqual("propertyName", ex.ParamName)); }); }
public async Task ThrowsWithCorrectParameterNameWhenGivenNull() { await JavaScriptHelpers.Run((executor, jsQueueThread) => { Assert.That( () => executor.CallFunctionReturnFlushedQueue(null, "foo", new JArray()), Throws.ArgumentNullException.With.Property("ParamName").EqualTo("moduleName") ); Assert.That( () => executor.CallFunctionReturnFlushedQueue("foo", null, new JArray()), Throws.ArgumentNullException.With.Property("ParamName").EqualTo("methodName") ); Assert.That( () => executor.CallFunctionReturnFlushedQueue("foo", "bar", null), Throws.ArgumentNullException.With.Property("ParamName").EqualTo("arguments") ); Assert.That( () => executor.InvokeCallbackAndReturnFlushedQueue(0, null), Throws.ArgumentNullException.With.Property("ParamName").EqualTo("arguments") ); Assert.That( () => executor.RunScript(null, "foo"), Throws.ArgumentNullException.With.Property("ParamName").EqualTo("sourcePath") ); Assert.That( () => executor.RunScript("", null), Throws.ArgumentNullException.With.Property("ParamName").EqualTo("sourceUrl") ); Assert.That( () => executor.SetGlobalVariable(null, new JArray()), Throws.ArgumentNullException.With.Property("ParamName").EqualTo("propertyName") ); Assert.That( () => executor.SetGlobalVariable("foo", null), Throws.ArgumentNullException.With.Property("ParamName").EqualTo("value") ); Assert.That( () => executor.GetGlobalVariable(null), Throws.ArgumentNullException.With.Property("ParamName").EqualTo("propertyName") ); }); }
public async Task ReactBridge_Method_ArgumentChecks() { await JavaScriptHelpers.Run((executor, jsQueueThread) => { using (var nativeThread = CreateNativeModulesThread()) { var reactCallback = new MockReactCallback(); var bridge = new ReactBridge(executor, reactCallback, nativeThread); AssertEx.Throws <ArgumentNullException>( () => bridge.SetGlobalVariable(null, null), ex => Assert.AreEqual("propertyName", ex.ParamName)); } }); }
public async Task ReactBridge_SyncCallback() { var jsFactories = new Func <IJavaScriptExecutor>[] { () => new ChakraJavaScriptExecutor(), #if WINDOWS_UWP () => new NativeJavaScriptExecutor(), #endif }; foreach (var jsFactory in jsFactories) { await JavaScriptHelpers.Run(async (executor, jsQueueThread) => { using (var nativeThread = CreateNativeModulesThread()) { var moduleId = 42; var methodId = 7; var called = 0; var callback = new MockReactCallback { InvokeSyncHandler = (mod, met, arg) => { Assert.AreEqual(moduleId, mod); Assert.AreEqual(methodId, met); Assert.AreEqual(0, arg.Count); ++called; return(JValue.CreateNull()); }, }; var bridge = new ReactBridge(executor, callback, nativeThread); await jsQueueThread.RunAsync(() => { bridge.CallFunction("SyncModule", "test", new JArray { 42, 7, new JArray() }); }); Assert.AreEqual(1, called); } }, jsFactory, @"Resources/sync.js"); } }
public async Task ReactBridge_Ctor_ArgumentChecks() { await JavaScriptHelpers.Run((executor, jsQueueThread) => { using (var nativeThread = CreateNativeModulesThread()) { var reactCallback = new MockReactCallback(); AssertEx.Throws <ArgumentNullException>( () => new ReactBridge(null, reactCallback, nativeThread), ex => Assert.AreEqual("executor", ex.ParamName)); AssertEx.Throws <ArgumentNullException>( () => new ReactBridge(executor, null, nativeThread), ex => Assert.AreEqual("reactCallback", ex.ParamName)); AssertEx.Throws <ArgumentNullException>( () => new ReactBridge(executor, reactCallback, null), ex => Assert.AreEqual("nativeModulesQueueThread", ex.ParamName)); } }); }
public async Task ReactBridge_FlushQueueImmediate() { var jsFactories = new Func <IJavaScriptExecutor>[] { () => new ChakraJavaScriptExecutor(), #if WINDOWS_UWP () => new NativeJavaScriptExecutor(), #endif }; foreach (var jsFactory in jsFactories) { await JavaScriptHelpers.Run(async (executor, jsQueueThread) => { using (var nativeThread = CreateNativeModulesThread()) { var moduleId = 42; var methodId = 7; var called = 0; var countdownEvent = new CountdownEvent(1); var callback = new MockReactCallback { InvokeHandler = (mod, met, arg) => { Assert.AreEqual(moduleId, mod); Assert.AreEqual(methodId, met); Assert.AreEqual(1, arg.Count); Assert.AreEqual("foo", arg[0].Value <string>()); ++called; }, OnBatchCompleteHandler = () => countdownEvent.Signal(), }; var bridge = new ReactBridge(executor, callback, nativeThread); await jsQueueThread.RunAsync(() => { bridge.CallFunction("FlushQueueImmediateModule", "test", new JArray { 10, new JArray { new JArray { 42 }, new JArray { 7 }, new JArray { new JArray { "foo" } } } }); }); // wait for `OnBatchComplete` in background // so we don't block native module thread await Task.Run(new Action(countdownEvent.Wait)); Assert.AreEqual(10, called); } }, jsFactory, @"Resources/immediate.js"); } }