public async Task TwoWay_should_clean_javascriptObject_listeners_when_object_is_not_part_of_the_graph_js()
        {
            var datacontext = new BasicFatherTestViewModel();
            var child       = new BasicTestViewModel();

            datacontext.Child = child;

            var test = new TestInContextAsync()
            {
                Bind = (win) => Bind(win, datacontext, JavascriptBindingMode.TwoWay),
                Test = async(mb) =>
                {
                    var js      = mb.JsRootObject;
                    var childJs = GetAttribute(js, "Child");

                    CheckReadOnly(childJs, false);

                    var nullJs = Factory.CreateNull();
                    SetAttribute(js, "Child", nullJs);

                    await Task.Delay(150);

                    DoSafeUI(() => datacontext.Child.Should().BeNull());

                    child.ListenerCount.Should().Be(0);

                    await Task.Delay(100);

                    CheckHasListener(childJs, false);
                }
            };

            await RunAsync(test);
        }
        public async Task TwoWay_should_clean_javascriptObject_listeners_when_object_is_not_part_of_the_graph(BasicTestViewModel remplacementChild)
        {
            var datacontext = new BasicFatherTestViewModel();
            var child       = new BasicTestViewModel();

            datacontext.Child = child;

            var test = new TestInContextAsync()
            {
                Bind = (win) => Bind(win, datacontext, JavascriptBindingMode.TwoWay),
                Test = async(mb) =>
                {
                    var js      = mb.JsRootObject;
                    var childJs = GetAttribute(js, "Child");

                    CheckReadOnly(childJs, false);

                    DoSafeUI(() => datacontext.Child = remplacementChild);
                    await Task.Delay(150);

                    CheckHasListener(childJs, false);
                }
            };

            await RunAsync(test);
        }
Beispiel #3
0
        public async Task TwoWay_Cleans_Javascript_Objects_Cache_When_Object_Is_Not_Part_Of_The_Graph(
            BasicTestViewModel replacementChild)
        {
            var dataContext = new BasicFatherTestViewModel();
            var child       = new BasicTestViewModel();

            dataContext.Child = child;

            var test = new TestInContextAsync()
            {
                Bind = (win) => HtmlBinding.Bind(win, dataContext, JavascriptBindingMode.TwoWay),
                Test = async(mb) =>
                {
                    var js      = mb.JsRootObject;
                    var childJs = GetAttribute(js, "Child");

                    await DoSafeAsyncUI(() => dataContext.Child = replacementChild);

                    await WaitAnotherWebContextCycle();

                    var myCommand = await GetAttributeAsync(js, "Command");
                    await DoSafeAsync(() => Call(myCommand, "Execute", childJs));

                    await DoSafeAsyncUI(() =>
                    {
                        dataContext.CallCount.Should().Be(0);
                        dataContext.LastCallElement.Should().BeNull();
                    });
                }
            };

            await RunAsync(test);
        }
Beispiel #4
0
        public async Task TwoWay_Calls_Command_With_Correct_Argument()
        {
            var fakeTestViewModel = new BasicFatherTestViewModel();
            var child             = new BasicTestViewModel();

            fakeTestViewModel.Child = child;

            var test = new TestInContextAsync()
            {
                Bind = (win) => HtmlBinding.Bind(win, fakeTestViewModel, JavascriptBindingMode.TwoWay),
                Test = async(mb) =>
                {
                    var js      = mb.JsRootObject;
                    var childJs = GetAttribute(js, "Child");

                    var jsCommand = GetAttribute(js, "Command");
                    await DoSafeAsync(() => Call(jsCommand, "Execute", childJs));

                    await DoSafeAsyncUI(() =>
                    {
                        fakeTestViewModel.CallCount.Should().Be(1);
                        fakeTestViewModel.LastCallElement.Should().Be(child);
                    });
                }
            };

            await RunAsync(test);
        }
Beispiel #5
0
        public async Task TwoWay_Cleans_JavascriptObject_Listeners_When_Object_Is_Not_Part_Of_The_Graph_Js()
        {
            var dataContext = new BasicFatherTestViewModel();
            var child       = new BasicTestViewModel();

            dataContext.Child = child;

            var test = new TestInContextAsync()
            {
                Bind = (win) => Bind(win, dataContext, JavascriptBindingMode.TwoWay),
                Test = async(mb) =>
                {
                    var js      = mb.JsRootObject;
                    var childJs = GetAttribute(js, "Child");

                    CheckObjectObservability(childJs, ObjectObservability.Observable);

                    var nullJs = Factory.CreateNull();
                    await SetAttributeAsync(js, "Child", nullJs);

                    await DoSafeAsyncUI(() => dataContext.Child.Should().BeNull());

                    child.ListenerCount.Should().Be(0);

                    //await WaitAnotherWebContextCycle();
                    await CheckHasListenerAsync(childJs, false);
                }
            };

            await RunAsync(test);
        }
Beispiel #6
0
        public async Task TwoWay_Cleans_JavascriptObject_Listeners_When_Object_Is_Not_Part_Of_The_Graph_Multiple_Changes(BasicTestViewModel remplacementChild)
        {
            var dataContext = new BasicFatherTestViewModel();
            var child       = new BasicTestViewModel();

            dataContext.Child = child;

            var tempChild1 = new BasicTestViewModel();
            var tempChild2 = new BasicTestViewModel();

            var test = new TestInContextAsync()
            {
                Bind = (win) => Bind(win, dataContext, JavascriptBindingMode.TwoWay),
                Test = async(mb) =>
                {
                    var js      = mb.JsRootObject;
                    var childJs = GetAttribute(js, "Child");

                    CheckObjectObservability(childJs, ObjectObservability.Observable);

                    await DoSafeAsyncUI(() =>
                    {
                        dataContext.Child = tempChild1;
                        dataContext.Child = tempChild2;
                        dataContext.Child = remplacementChild;
                    });

                    await CheckHasListenerAsync(childJs, false);
                }
            };

            await RunAsync(test);
        }