public void MethodResoultionDynamicTest2()
        {
            const string targetPath = "Text";
            const string binding = @"Text $Ext.Method1(arg1)";
            var instance = new ExtInstance();
            BindingServiceProvider.ResourceResolver.AddObject("Ext", instance);
            IBindingParser bindingParser = CreateBindingParser();

            var context = new BindingBuilder(bindingParser.Parse(new object(), binding, null, null).Single());
            IBindingPath path = context.GetData(BindingBuilderConstants.TargetPath);
            path.Path.ShouldEqual(targetPath);

            var expression = context.GetData(BindingBuilderConstants.MultiExpression);
            var args = new object[] { instance, "st" };
            expression(context, args);
            instance.Assert(() => instance.Method1("st", 0M, "", int.MaxValue), new object[] { instance, "st", 0M, "", int.MaxValue });
        }
        public void MethodResoultionDynamicTest4()
        {
            const string targetPath = "Text";
            const string binding = @"Text $Ext.Method2(arg1, arg2)";
            var instance = new ExtInstance();
            BindingServiceProvider.ResourceResolver.AddObject("Ext", instance);
            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 expression = context.GetData(BindingBuilderConstants.MultiExpression);
            var array = new[] { int.MinValue, int.MaxValue };
            var args = new object[] { instance, 2, array };
            expression(context, args);
            instance.Assert(() => instance.Method2(2, array), new object[] { instance, 2, int.MinValue, int.MaxValue });

            args = new object[] { instance, 2, 3 };
            expression(context, args);
            instance.Assert(() => instance.Method2(2, 3), args);
        }
        public void MethodResoultionDynamicTest0()
        {
            const string targetPath = "Text";
            const string binding = @"Text $Ext.This().Method(arg1, arg2)";
            var instance = new ExtInstance();
            BindingServiceProvider.ResourceResolver.AddObject("Ext", instance);
            IBindingParser bindingParser = CreateBindingParser();

            var context = new BindingBuilder(bindingParser.Parse(new object(), binding, null, null).Single());
            IBindingPath path = context.GetData(BindingBuilderConstants.TargetPath);
            path.Path.ShouldEqual(targetPath);

            var expression = context.GetData(BindingBuilderConstants.MultiExpression);
            var args = new object[] { instance, 2M, 3M };
            expression(context, args);
            instance.Assert(() => instance.Method(2M, 3M), args);

            args = new object[] { instance, 2, 3 };
            expression(context, args);
            instance.Assert(() => instance.Method(2, 3), args);

            args = new object[] { instance, 2, 3 };
            expression(context, args);
            instance.Assert(() => instance.Method(2, 3), args);

            args = new object[] { instance, 2M, "t" };
            expression(context, args);
            instance.Assert(() => instance.Method(2M, "t"), args);

            args = new object[] { instance, 2, "t" };
            expression(context, args);
            instance.Assert(() => instance.Method(2M, "t"), args);

            args = new object[] { instance, "t", 2M };
            expression(context, args);
            instance.Assert(() => instance.Method("t", 2M), args);

            args = new object[] { instance, "t", 2 };
            expression(context, args);
            instance.Assert(() => instance.Method("t", 2), new object[] { instance, "t", 2M });
        }