public void IsRegisteredShouldReturnTrueIfBindingIsRegistered() { const string path = "test"; var target = new object(); var bindingMock = new DataBindingMock(); var manager = GetBindingManager(); manager.Register(target, path, bindingMock); manager.IsRegistered(bindingMock).ShouldBeTrue(); }
public void ManagerShouldRegisterBinding() { const string path = "test"; var target = new object(); var bindingMock = new DataBindingMock(); var manager = GetBindingManager(); manager.Register(target, path, bindingMock); manager.IsRegistered(bindingMock).ShouldBeTrue(); manager.GetBindings(target, path).Single().ShouldEqual(bindingMock); manager.GetBindings(target).Single().ShouldEqual(bindingMock); }
public void ManagerShouldReturnAllBindingsForTarget() { const string path = "test"; var target = new object(); var bindingMock1 = new DataBindingMock(); var bindingMock2 = new DataBindingMock(); var manager = GetBindingManager(); manager.Register(target, path, bindingMock1); manager.GetBindings(target).Single().ShouldEqual(bindingMock1); manager.Register(target, path + 1, bindingMock2); var bindings = manager.GetBindings(target).ToList(); bindings.Contains(bindingMock1).ShouldBeTrue(); bindings.Contains(bindingMock2).ShouldBeTrue(); bindings.Count.ShouldEqual(2); }
public void ManagerShouldClearAllBindingsForTarget() { const string path1 = "test"; const string path2 = "test2"; var target = new object(); var bindingFirst = new DataBindingMock(); var bindingSecond = new DataBindingMock(); var manager = GetBindingManager(); manager.Register(target, path1, bindingFirst); manager.Register(target, path2, bindingSecond); manager.IsRegistered(bindingFirst).ShouldBeTrue(); manager.IsRegistered(bindingSecond).ShouldBeTrue(); manager.ClearBindings(target); manager.IsRegistered(bindingFirst).ShouldBeFalse(); manager.IsRegistered(bindingSecond).ShouldBeFalse(); manager.GetBindings(target).ShouldBeEmpty(); }
public void ManagerShouldReturnAllBindingsForTargetAndPath() { const string path = "test"; var target = new object(); var bindingMock1 = new DataBindingMock(); var manager = GetBindingManager(); manager.Register(target, path, bindingMock1); manager.GetBindings(target, path).Single().ShouldEqual(bindingMock1); }
public void IsRegisteredShouldReturnFalseIfBindingIsNotRegistered() { var bindingMock = new DataBindingMock(); var manager = GetBindingManager(); manager.IsRegistered(bindingMock).ShouldBeFalse(); }
public void ManagerShouldClearBindingIfBindingIsRegistered() { const string path = "test"; var target = new object(); var bindingMock = new DataBindingMock { TargetAccessor = new BindingSourceAccessorMock { Source = new BindingSourceMock { Path = BindingPath.Create(path), GetSource = b => target } } }; var manager = GetBindingManager(); manager.Register(target, path, bindingMock); manager.IsRegistered(bindingMock).ShouldBeTrue(); manager.Unregister(bindingMock); manager.IsRegistered(bindingMock).ShouldBeFalse(); bindingMock.IsDisposed.ShouldBeTrue(); }
public void ParserShouldParseMultiExpressionWithConverter() { const string targetPath = "Text"; const string sourcePath1 = "SourceText1"; const string sourcePath2 = "SourceText2"; const string converterName = "TestConverter"; const string binding = "Text $TestConverter(SourceText1, SourceText2)"; var target = new object(); var args = new object[] { "tset", 1 }; var sourceModel = new BindingSourceModel { IntProperty = int.MaxValue }; var bindingMock = new DataBindingMock { TargetAccessor = new BindingSourceAccessorMock { Source = new BindingSourceMock { GetPathMembers = b => new BindingPathMembersMock(this, BindingPath.Create("IntProperty"), new BindingMemberInfo("IntProperty", BindingSourceModel.IntPropertyInfo, typeof(BindingSourceModel))) } } }; var converterMock = new ValueConverterCoreMock { Convert = (o, type, arg3, arg4) => { type.ShouldEqual(BindingSourceModel.IntPropertyInfo.PropertyType); o.ShouldEqual(args[0]); arg3.ShouldEqual(args[1]); return sourceModel; } }; var provider = new BindingProvider(); var resolver = new BindingResourceResolver(); BindingServiceProvider.ResourceResolver = resolver; resolver.AddConverter(converterName, converterMock, true); IBindingParser bindingParser = CreateBindingParser(bindingProvider: provider); var context = new BindingBuilder(bindingParser.Parse(binding, EmptyContext, target, null).Single()); context.Add(BindingConstants.Binding, bindingMock); IBindingPath path = context.GetData(BindingBuilderConstants.TargetPath); path.Path.ShouldEqual(targetPath); var expression = context.GetData(BindingBuilderConstants.MultiExpression); expression(context, args).ShouldEqual(sourceModel); var sources = context.GetData(BindingBuilderConstants.Sources); BindingSourceShouldBeValidDataContext(target, sources[0].Invoke(context), sourcePath1); BindingSourceShouldBeValidDataContext(target, sources[1].Invoke(context), sourcePath2); }
public void ParserShouldParseExpressionWithBinding() { const string targetPath = "Text"; const string binding = @"Text $binding"; var dataContext = new DataContext(); var bindingMock = new DataBindingMock { GetContext = () => dataContext }; IBindingParser bindingParser = CreateBindingParser(); var context = new BindingBuilder(bindingParser.Parse(new object(), binding, null, null).Single()); var path = context.GetData(BindingBuilderConstants.TargetPath); path.Path.ShouldEqual(targetPath); context.Add(BindingConstants.Binding, bindingMock); var expression = context.GetData(BindingBuilderConstants.MultiExpression); expression(context, Empty.Array<object>()).ShouldEqual(bindingMock); }
public void ParserShouldParseMultiExpressionWithOneTimeScope() { const string targetPath = "Text"; const string sourcePath1 = "SourceText1"; const string sourcePath2 = "SourceText2"; const string sourcePath3 = "SourceText3"; const string methodName = "TestMethod"; const string binding = "Text $OneTime($TestMethod(SourceText1, SourceText2).IntProperty) + SourceText3"; const int firstValue = -1; var ctx = new DataContext(); var bindingMock = new DataBindingMock { GetContext = () => ctx }; int executionCount = 0; var target = new object(); var args = new object[] { "tset", 1, 3 }; var sourceModel = new BindingSourceModel { IntProperty = firstValue }; var provider = new BindingProvider(); var resolver = new BindingResourceResolver(); BindingServiceProvider.ResourceResolver = resolver; var method = new BindingResourceMethod((list, objects, c) => { ++executionCount; objects[0].ShouldEqual(args[0]); objects[1].ShouldEqual(args[1]); return sourceModel; }, typeof(BindingSourceModel)); resolver.AddMethod(methodName, method, true); IBindingParser bindingParser = CreateBindingParser(bindingProvider: provider); var context = new BindingBuilder(bindingParser.Parse(target, binding, null, null).Single()); context.AddOrUpdate(BindingConstants.Binding, bindingMock); IBindingPath path = context.GetData(BindingBuilderConstants.TargetPath); path.Path.ShouldEqual(targetPath); var expression = context.GetData(BindingBuilderConstants.MultiExpression); expression(context, args).ShouldEqual(firstValue + 3); sourceModel.IntProperty = int.MinValue; args[2] = 5; expression(context, args).ShouldEqual(firstValue + 5); args[2] = 6; expression(context, args).ShouldEqual(firstValue + 6); executionCount.ShouldEqual(1); var sources = context.GetData(BindingBuilderConstants.Sources); BindingSourceShouldBeValidDataContext(target, sources[0].Invoke(context), sourcePath1); BindingSourceShouldBeValidDataContext(target, sources[1].Invoke(context), sourcePath2); BindingSourceShouldBeValidDataContext(target, sources[2].Invoke(context), sourcePath3); }
public void BuilderShouldUseExpressionWithOneTimeScope() { const string key = "key"; var builder = new BindingBuilder(); var sourceModel = new BindingSourceModel(); const int firstValue = -1; int executionCount = 0; var dataContext = new DataContext(); var bindingMock = new DataBindingMock { GetContext = () => dataContext }; var result = new BindingSourceModel { IntProperty = firstValue }; BindingServiceProvider.ResourceResolver.AddMethod<string, object, BindingSourceModel>(key, (s1, s2, context) => { ++executionCount; s1.ShouldEqual(key); s2.ShouldEqual(builder); context.ShouldEqual(builder); return result; }); builder.Bind(sourceModel, "empty").To<BindingSourceModel>(() => (model, ctx) => ctx.OneTime(ctx.ResourceMethod<BindingSourceModel>(key, key, builder).IntProperty) + 3); builder.AddOrUpdate(BindingConstants.Binding, bindingMock); var sources = builder.GetData(BindingBuilderConstants.Sources); sources.Count.ShouldEqual(1); sources[0].Invoke(builder).Path.Path.ShouldEqual(string.Empty); var expression = builder.GetData(BindingBuilderConstants.MultiExpression); expression(builder, Empty.Array<object>()).ShouldEqual(firstValue + 3); sourceModel.IntProperty = int.MinValue; expression(builder, Empty.Array<object>()).ShouldEqual(firstValue + 3); executionCount.ShouldEqual(1); }
public void BuilderShouldUseBinding() { var builder = new BindingBuilder(); var dataContext = new DataContext(); var bindingMock = new DataBindingMock { GetContext = () => dataContext }; builder.Bind(new object(), "empty").To<BindingSourceModel>(() => (model, ctx) => ctx.Binding()); builder.AddOrUpdate(BindingConstants.Binding, bindingMock); var expression = builder.GetData(BindingBuilderConstants.MultiExpression); expression(builder, Empty.Array<object>()).ShouldEqual(bindingMock); }