public void GetValueShouldReturnValueUsingConverterSourceDoubleSource() { bool converterInvoked = false; var memberMock = new BindingMemberInfoMock { Type = typeof(int) }; CultureInfo culture = CultureInfo.InvariantCulture; var parameter = new object(); var sourceModel = new BindingSourceModel(); var converterMock = new ValueConverterCoreMock { Convert = (o, type, arg3, arg4) => { converterInvoked = true; o.ShouldEqual(sourceModel.IntProperty.ToString() + sourceModel.ObjectProperty); type.ShouldEqual(typeof(int)); arg3.ShouldEqual(parameter); arg4.ShouldEqual(culture); return int.MaxValue; } }; var dataContext = new DataContext { {BindingBuilderConstants.Converter, d => converterMock}, {BindingBuilderConstants.ConverterCulture, d => culture}, {BindingBuilderConstants.ConverterParameter, d => parameter} }; string propertyName = GetMemberPath<BindingSourceModel>(model => model.IntProperty); var valueAccessor = new MultiBindingSourceAccessor(new[] { CreateSource(sourceModel, propertyName), CreateSource(sourceModel, GetMemberPath(sourceModel, model => model.ObjectProperty)), }, (context, list) => list[0].ToString() + list[1], dataContext); valueAccessor.GetValue(memberMock, EmptyContext, true).ShouldEqual(int.MaxValue); converterInvoked.ShouldBeTrue(); }
public void GetValueShouldReturnValueUsingConverterTarget() { bool converterInvoked = false; var memberMock = new BindingMemberInfoMock { Type = typeof(int) }; CultureInfo culture = CultureInfo.InvariantCulture; var parameter = new object(); var sourceModel = new BindingSourceModel(); var converterMock = new ValueConverterCoreMock { ConvertBack = (o, type, arg3, arg4) => { converterInvoked = true; o.ShouldEqual(sourceModel.IntProperty); type.ShouldEqual(typeof(int)); arg3.ShouldEqual(parameter); arg4.ShouldEqual(culture); return int.MaxValue; } }; var dataContext = new DataContext { {BindingBuilderConstants.Converter, d => converterMock}, {BindingBuilderConstants.ConverterCulture, d => culture}, {BindingBuilderConstants.ConverterParameter, d => parameter} }; string propertyName = GetMemberPath<BindingSourceModel>(model => model.IntProperty); var valueAccessor = GetAccessor(sourceModel, propertyName, dataContext, false); valueAccessor.GetValue(memberMock, EmptyContext, true).ShouldEqual(int.MaxValue); converterInvoked.ShouldBeTrue(); }
public void BuilderShouldUseConverter1() { var converter = new ValueConverterCoreMock(); var builder = new BindingBuilder(); builder.Bind(new object(), "test").To("test").WithConverter(converter); builder.GetData(BindingBuilderConstants.Converter).Invoke(builder).ShouldEqual(converter); }
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); }