Ejemplo n.º 1
0
        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));
                }
            });
        }
Ejemplo n.º 2
0
        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)));
                }
            });
        }
Ejemplo n.º 3
0
        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));
                }
            });
        }
Ejemplo n.º 4
0
        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")
                        );
                }
            });
        }
Ejemplo n.º 5
0
        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")
                    );
            });
        }
Ejemplo n.º 7
0
        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));
                }
            });
        }
Ejemplo n.º 8
0
        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");
            }
        }
Ejemplo n.º 9
0
        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));
                }
            });
        }
Ejemplo n.º 10
0
        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");
            }
        }