public async Task TwoWay_Maps_CommandWithoutParameter_CanExecuteValue_With_CanExecute(bool canExecute) { var command = Substitute.For <ICommandWithoutParameter>(); command.CanExecute.Returns(canExecute); var datacontexttest = new FakeTestViewModel() { CommandWithoutParameters = command }; var test = new TestInContext() { Bind = (win) => HtmlBinding.Bind(win, datacontexttest, JavascriptBindingMode.TwoWay), Test = (mb) => { var js = mb.JsRootObject; var mycommand = GetAttribute(js, "CommandWithoutParameters"); var res = GetBoolAttribute(mycommand, "CanExecuteValue"); res.Should().Be(canExecute); } }; await RunAsync(test); }
public async Task TwoWay_Maps_CommandGeneric() { var command = Substitute.For <ICommand <string> >(); var fakeTestViewModel = new FakeTestViewModel() { CommandGeneric = command }; var test = new TestInContext() { Bind = (win) => HtmlBinding.Bind(win, fakeTestViewModel, JavascriptBindingMode.TwoWay), Test = (mb) => { var js = ((HtmlBinding)mb).JsBrideRootObject as JsGenericObject; var jsCommand = js.GetAttribute("CommandGeneric") as JsCommand <string>; jsCommand.Should().NotBeNull(); jsCommand.ToString().Should().Be("{}"); jsCommand.Type.Should().Be(JsCsGlueType.Command); jsCommand.CachableJsValue.Should().NotBeNull(); } }; await RunAsync(test); }
public async Task TwoWay_Maps_CommandGeneric_CanExecuteValue_With_CanExecute(bool canExecute) { var command = Substitute.For <ICommand <string> >(); command.CanExecute(Arg.Any <string>()).Returns(canExecute); var fakeTestViewModel = new FakeTestViewModel() { CommandGenericNotBound = command }; var test = new TestInContext() { Bind = (win) => HtmlBinding.Bind(win, fakeTestViewModel, JavascriptBindingMode.TwoWay), Test = (mb) => { var js = mb.JsRootObject; var jsCommand = GetAttribute(js, "CommandGenericNotBound"); var res = GetBoolAttribute(jsCommand, "CanExecuteValue"); res.Should().BeTrue(); } }; await RunAsync(test); }
private Task Test_HTMLBinding_Stress_Collection_CreateBinding(JavascriptBindingMode imode, TestPerformanceKind context, TestContext ipath = TestContext.Index) { var r = 100; var datacontext = new TwoList(); datacontext.L1.AddRange(Enumerable.Range(0, r).Select(i => new Skill())); var stopWatch = new Stopwatch(); stopWatch.Start(); var test = new TestInContext() { Path = ipath, Bind = (win) => HtmlBinding.Bind(win, datacontext, imode), Test = (mb) => { stopWatch.Stop(); var ts = stopWatch.ElapsedMilliseconds; _Logger.Info($"Perf: {((double)(ts)) / 1000} sec for {r} iterations"); var js = mb.JsRootObject; var col = GetSafe(() => GetCollectionAttribute(js, "L1")); col.GetArrayLength().Should().Be(r); CheckVsExpectation(ts, context); } }; return(RunAsync(test)); }
public async Task TwoWay_Maps_SimpleCommand_With_Correct_Name() { var command = Substitute.For <ISimpleCommand>(); var simpleCommandTestViewModel = new SimpleCommandTestViewModel() { SimpleCommandNoArgument = command }; var test = new TestInContext() { Bind = (win) => HtmlBinding.Bind(win, simpleCommandTestViewModel, JavascriptBindingMode.TwoWay), Test = (mb) => { var js = (mb as HtmlBinding).JsBrideRootObject as JsGenericObject; var jsCommand = js.GetAttribute("SimpleCommandNoArgument") as JsSimpleCommand; jsCommand.Should().NotBeNull(); jsCommand.ToString().Should().Be("{}"); jsCommand.Type.Should().Be(JsCsGlueType.SimpleCommand); jsCommand.CachableJsValue.Should().NotBeNull(); } }; await RunAsync(test); }
public async Task TwoWay_Listens_Only_Once_To_Each_Object(ViewModelTestBase dataContext, params ViewModelTestBase[] children) { var test = new TestInContext() { Bind = (win) => Bind(win, dataContext, JavascriptBindingMode.TwoWay), Test = (mb) => { children.ForEach(child => child.ListenerCount.Should().Be(1)); } }; await RunAsync(test); }
public async Task OneTime_Does_Not_Listen_To_Any_Object(ViewModelTestBase dataContext, params ViewModelTestBase[] children) { var test = new TestInContext() { Bind = (win) => Bind(win, dataContext, JavascriptBindingMode.OneTime), Test = (mb) => { children.ForEach(child => child.ListenerCount.Should().Be(0)); } }; await RunAsync(test); }
public async Task TwoWay_Listens_To_Elements_In_List() { var root = BuildList(); var list = root.Children.ToList(); var test = new TestInContext() { Bind = (win) => Bind(win, root, JavascriptBindingMode.TwoWay), Test = (mb) => { list.ForEach(child => child.ListenerCount.Should().Be(1)); } }; await RunAsync(test); }
public async Task Bind_Is_Robust() { var test = new TestInContext() { Bind = (win) => HtmlBinding.Bind(win, _DataContext, JavascriptBindingMode.TwoWay), Test = _ => { } }; for (var i = 0; i < 150; i++) { _Logger.Info($"Runing interaction {i}"); await RunAsync(test); } }
public async Task TwoWay_creates_listener_only_for_write_property(Type type, ObjectObservability expected) { var datacontext = Activator.CreateInstance(type); var test = new TestInContext() { Bind = (win) => Bind(win, datacontext, JavascriptBindingMode.TwoWay), Test = (mb) => { var js = mb.JsRootObject; CheckObjectObservability(js, expected); } }; await RunAsync(test); }
public async Task TwoWay_should_create_listener_only_for_write_property(Type type, bool readOnly) { var datacontext = Activator.CreateInstance(type); var test = new TestInContext() { Bind = (win) => Bind(win, datacontext, JavascriptBindingMode.TwoWay), Test = (mb) => { var js = mb.JsRootObject; CheckReadOnly(js, readOnly); } }; await RunAsync(test); }
public async Task TwoWay_Freezes_Readonly_Objects(Type type, bool expectedIsFrozen) { var dataContext = Activator.CreateInstance(type); var test = new TestInContext() { Bind = (win) => Bind(win, dataContext, JavascriptBindingMode.TwoWay), Test = (mb) => { var js = mb.JsRootObject; var isFrozen = IsFrozen(js); isFrozen.Should().Be(expectedIsFrozen); } }; await RunAsync(test); }
public async Task TwoWay_Freezes_Readonly_Objects_Deep_Property(Type type, bool expectedIsFozen) { var child = (Observability)Activator.CreateInstance(type); var dataContext = new Composite(child); var test = new TestInContext() { Bind = (win) => Bind(win, dataContext, JavascriptBindingMode.TwoWay), Test = (mb) => { var js = mb.JsRootObject; var childJs = GetAttribute(js, "Child"); var isFrozen = IsFrozen(childJs); isFrozen.Should().Be(expectedIsFozen); } }; await RunAsync(test); }
public async Task TwoWay_freezes_readonly_objects_deep_array(Type type, bool expectedIsFozen) { var child = (Observability)Activator.CreateInstance(type); var datacontext = new Composite(children: new[] { child }); var test = new TestInContext() { Bind = (win) => Bind(win, datacontext, JavascriptBindingMode.TwoWay), Test = (mb) => { var js = mb.JsRootObject; var array = GetCollectionAttribute(js, "Children"); var childJs = array.GetArrayElements()[0]; var isFrozen = IsFrozen(childJs); isFrozen.Should().Be(expectedIsFozen); } }; await RunAsync(test); }
public async Task Binding_Can_Create_Collection_With_Count_Greater_Than_Max_Stack() { var value = 3; var dataContext = new BigCollectionVM <int>(value); var test = new TestInContext() { Bind = (win) => HtmlBinding.Bind(win, dataContext, JavascriptBindingMode.TwoWay), Test = (mb) => { var js = mb.JsRootObject; var res = GetCollectionAttribute(js, "Values"); res.GetArrayLength().Should().Be(BigCollectionVM <int> .Limit); var lastElement = res.GetValue(BigCollectionVM <int> .Limit - 1); lastElement.GetIntValue().Should().Be(value); } }; await RunAsync(test); }
public async Task Binding_Can_Create_More_Object_Than_Max_Stack() { var dataContext = new BigCollectionVM <Simple>(_ => new Simple()); var test = new TestInContext() { Bind = (win) => HtmlBinding.Bind(win, dataContext, JavascriptBindingMode.TwoWay), Test = (mb) => { var js = mb.JsRootObject; var res = GetCollectionAttribute(js, "Values"); res.GetArrayLength().Should().Be(BigCollectionVM <Simple> .Limit); var lastElement = res.GetValue(BigCollectionVM <Simple> .Limit - 1); var id = GetIntAttribute(lastElement, "Id"); id.Should().Be(23); } }; await RunAsync(test); }
public async Task TwoWay_SimpleCommand_Maps_As_ReadOnly() { var command = Substitute.For <ISimpleCommand <SimpleCommandTestViewModel> >(); var datacontexttest = new SimpleCommandTestViewModel() { SimpleCommandObjectArgument = command }; var test = new TestInContext() { Bind = (win) => HtmlBinding.Bind(win, datacontexttest, JavascriptBindingMode.TwoWay), Test = (mb) => { var js = mb.JsRootObject; var mycommand = GetAttribute(js, "SimpleCommandObjectArgument"); CheckObjectObservability(mycommand, ObjectObservability.ReadOnly); } }; await RunAsync(test); }
public async Task TwoWay_Maps_ResultCommand_Without_Argument() { var function = Substitute.For <Func <string> >(); var dc = new FakeFactory <string>(function); var test = new TestInContext() { Path = TestContext.IndexPromise, Bind = (win) => HtmlBinding.Bind(win, dc, JavascriptBindingMode.TwoWay), Test = (mb) => { var glueObject = (mb as HtmlBinding).JsBrideRootObject as JsGenericObject; var jsResultCommand = glueObject.GetAttribute("CreateObject") as JsResultCommand <string>; jsResultCommand.Should().NotBeNull(); jsResultCommand.ToString().Should().Be("{}"); jsResultCommand.Type.Should().Be(JsCsGlueType.ResultCommand); jsResultCommand.CachableJsValue.Should().NotBeNull(); } }; await RunAsync(test); }
public async Task TwoWay_Command_Generic_String_Maps_As_ObservableReadOnly() { var command = Substitute.For <ICommand <string> >(); command.CanExecute(Arg.Any <string>()).Returns(true); var datacontexttest = new FakeTestViewModel() { CommandGeneric = command }; var test = new TestInContext() { Path = TestContext.GenericBind, Bind = (win) => HtmlBinding.Bind(win, datacontexttest, JavascriptBindingMode.TwoWay), Test = (mb) => { var js = mb.JsRootObject; var mycommand = GetAttribute(js, "CommandGeneric"); CheckObjectObservability(mycommand, ObjectObservability.ReadOnlyObservable); } }; await RunAsync(test); }
protected Task RunAsync(TestInContext test, [CallerMemberName] string memberName = "") { return RunAsync(test, mb => RunInContext(() => test.Test(mb)), memberName); }
public Task Test_HTMLBinding_Stress_Collection_CreateBinding(JavascriptBindingMode imode, TestPerformanceKind context, TestContext ipath = TestContext.Index) { int r = 100; var datacontext = new TwoList(); datacontext.L1.AddRange(Enumerable.Range(0, r).Select(i => new Skill())); var stopWatch = new Stopwatch(); stopWatch.Start(); var test = new TestInContext() { Path = ipath, Bind = (win) => HTML_Binding.Bind(win, datacontext, imode), Test = (mb) => { stopWatch.Stop(); var ts = stopWatch.ElapsedMilliseconds; _Logger.Info($"Perf: {((double) (ts)) / 1000} sec for {r} iterations"); var js = mb.JSRootObject; var col = GetSafe(() => GetCollectionAttribute(js, "L1")); col.GetArrayLength().Should().Be(r); CheckVsExpectation(ts, context); } }; return RunAsync(test); }
public async Task Bind_ShouldBeRobust() { var test = new TestInContext() { Bind = (win) => HTML_Binding.Bind(win, _DataContext, JavascriptBindingMode.TwoWay), Test = _ => { } }; for (var i = 0; i < 150; i++) { _Logger.Info($"Runing interaction {i}"); await RunAsync(test); } }