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); }
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); }
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); }
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); }
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); }