public void NullTarget()
        {
            var binding = new MethodBindingExtension(new NullExtension(), "SomeMethod");

            TestHelper.RunMethodBinding(null, binding);

            TraceMessages.ShouldBe(new[] {
                "testhost Warning: 0 : [MethodBindingExtension] First method binding argument is required and cannot resolve to null - method name or method target expected.",
            });
        }
        public void NullDataContext()
        {
            var binding = new MethodBindingExtension("SomeMethod");

            TestHelper.RunMethodBinding(null, binding);

            TraceMessages.ShouldBe(new[] {
                "testhost Warning: 0 : [MethodBindingExtension] Null data context for method 'SomeMethod' on element 'TestElement' (type: 'System.Windows.FrameworkElement').",
            });
        }
        public void OverloadedNullableIntDoubleAsString()
        {
            var vm = new ViewModel();

            var binding = new MethodBindingExtension(vm, nameof(ViewModel.OverloadedNullableIntDouble), "5");

            TestHelper.RunMethodBinding(null, binding);

            vm.Executed.ShouldBe(false);
            TraceMessages.ShouldBe(new[] {
                "testhost Warning: 0 : [MethodBindingExtension] Could not find method 'OverloadedNullableIntDouble' (target type 'Singulink.WPF.Data.Tests.ViewModel') that accepts the provided arguments ('System.String').",
            });
        }
        public void IntParameterAsNullExtension()
        {
            var vm = new ViewModel();

            var binding = new MethodBindingExtension(vm, nameof(ViewModel.IntParam), new NullExtension());

            TestHelper.RunMethodBinding(null, binding);

            vm.Executed.ShouldBe(false);
            TraceMessages.ShouldBe(new[] {
                "testhost Warning: 0 : [MethodBindingExtension] Method 'IntParam' (target type 'Singulink.WPF.Data.Tests.ViewModel') parameter 1 (name: 'x', type: 'System.Int32') is not assignable to null.",
            });
        }
        public void NullMethodName()
        {
            var vm = new ViewModel();

            var binding = new MethodBindingExtension(vm, new NullExtension());

            TestHelper.RunMethodBinding(null, binding);

            binding = new MethodBindingExtension(vm, null);
            TestHelper.RunMethodBinding(null, binding);

            TraceMessages.ShouldBe(new[] {
                "testhost Warning: 0 : [MethodBindingExtension] Method target type resolved to 'Singulink.WPF.Data.Tests.ViewModel', method name resolved to null.",
                "testhost Warning: 0 : [MethodBindingExtension] Method target type resolved to 'Singulink.WPF.Data.Tests.ViewModel', method name resolved to null.",
            });
        }
        public void MissingMethod()
        {
            var vm = new ViewModel();

            var binding = new MethodBindingExtension(vm, "NonExistent");

            TestHelper.RunMethodBinding(null, binding);

            binding = new MethodBindingExtension(vm, "NonExistent", null);
            TestHelper.RunMethodBinding(null, binding);

            vm.Executed.ShouldBe(false);
            TraceMessages.ShouldBe(new[] {
                "testhost Warning: 0 : [MethodBindingExtension] Could not find parameterless method 'NonExistent' (target type 'Singulink.WPF.Data.Tests.ViewModel').",
                "testhost Warning: 0 : [MethodBindingExtension] Could not find method 'NonExistent' (target type 'Singulink.WPF.Data.Tests.ViewModel') that accepts the provided arguments (null).",
            });
        }