Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }