public void ParserShouldParseExpressionWithDynamicObjectMethodGenericAccessExpression() { const string targetPath = "Text"; const string binding = "Text $context.InvokeMethod<string>(TestValue)"; IBindingParser bindingParser = CreateBindingParser(); var context = new BindingBuilder(bindingParser.Parse(binding, EmptyContext, new object(), null).Single()); IBindingPath path = context.GetData(BindingBuilderConstants.TargetPath); path.Path.ShouldEqual(targetPath); var dynamicObject = new DynamicObjectMock { InvokeMember = (name, list, types, dataContext) => { types.Count.ShouldEqual(1); types[0].ShouldEqual(typeof(string)); name.ShouldEqual("InvokeMethod"); dataContext.ShouldEqual(context); list.Count.ShouldEqual(1); return list[0]; } }; var expression = context.GetData(BindingBuilderConstants.MultiExpression); expression(context, new object[] { dynamicObject, expression }).ShouldEqual(expression); }
public void ParserShouldParseExpressionWithDynamicObjectIndexerAccessConstant() { const string targetPath = "Text"; const string sourcePath = "[\"value\"]"; const string binding = "Text ['value']"; var target = new object(); IBindingParser bindingParser = CreateBindingParser(); var context = new BindingBuilder(bindingParser.Parse(binding, EmptyContext, target, null).Single()); IBindingPath path = context.GetData(BindingBuilderConstants.TargetPath); path.Path.ShouldEqual(targetPath); bool invokedObserve = false; var dynamicObject = new DynamicObjectMock { GetMember = (s, list) => { throw new NotSupportedException(); }, TryObserve = (s, listener) => { s.ShouldEqual(sourcePath); invokedObserve = true; return null; }, GetIndex = (list, dataContext) => { list.Count.ShouldEqual(1); list[0].ShouldEqual("value"); return context; } }; var source = context.GetData(BindingBuilderConstants.Sources)[0].Invoke(context); BindingSourceShouldBeValidDataContext(target, source, sourcePath); BindingServiceProvider.ContextManager.GetBindingContext(target).Value = dynamicObject; BindingSourceShouldBeValidDataContext(target, source, sourcePath); invokedObserve.ShouldBeTrue(); var pathMembers = source.GetPathMembers(true); pathMembers.AllMembersAvailable.ShouldBeTrue(); pathMembers.LastMember.GetValue(pathMembers.PenultimateValue, null).ShouldEqual(context); }
public void ParserShouldParseExpressionWithDynamicObjectIndexerAccessExpression() { const string targetPath = "Text"; const string binding = "Text $context[TestValue]"; IBindingParser bindingParser = CreateBindingParser(); var context = new BindingBuilder(bindingParser.Parse(binding, EmptyContext, new object(), null).Single()); IBindingPath path = context.GetData(BindingBuilderConstants.TargetPath); path.Path.ShouldEqual(targetPath); var dynamicObject = new DynamicObjectMock { GetIndex = (list, dataContext) => { dataContext.ShouldEqual(context); list.Count.ShouldEqual(1); return list[0]; } }; var expression = context.GetData(BindingBuilderConstants.MultiExpression); expression(context, new object[] { dynamicObject, expression }).ShouldEqual(expression); }
public void ParserShouldParseExpressionWithDynamicObjectMemberAccess() { const string targetPath = "Text"; const string sourcePath = "TestValue"; const string binding = "Text TestValue"; var target = new object(); IBindingParser bindingParser = CreateBindingParser(); var context = new BindingBuilder(bindingParser.Parse(target, binding, null, null).Single()); IBindingPath path = context.GetData(BindingBuilderConstants.TargetPath); path.Path.ShouldEqual(targetPath); bool invokedObserve = false; var dynamicObject = new DynamicObjectMock { GetMember = (s, list) => { list.IsNullOrEmpty().ShouldBeTrue(); s.ShouldEqual(sourcePath); return context; }, TryObserve = (s, listener) => { s.ShouldEqual(sourcePath); invokedObserve = true; return null; } }; var source = context.GetData(BindingBuilderConstants.Sources)[0].Invoke(context); source.GetPathMembers(true); source.ValueChanged += (sender, args) => { }; BindingSourceShouldBeValidDataContext(target, source, sourcePath); BindingServiceProvider.ContextManager.GetBindingContext(target).Value = dynamicObject; BindingSourceShouldBeValidDataContext(target, source, sourcePath); invokedObserve.ShouldBeTrue(); var pathMembers = source.GetPathMembers(true); pathMembers.AllMembersAvailable.ShouldBeTrue(); pathMembers.LastMember.GetValue(pathMembers.PenultimateValue, null).ShouldEqual(context); }