コード例 #1
0
        public void BindingBackAssert <TTargetProperty>(
            CalcBinding.Binding calcBinding,
            INotifyPropertyChanged source, Func <object> sourcePropertyGetter,
            FrameworkElement targetObject, DependencyProperty targetProperty,
            Action <TTargetProperty> targetPropertySetter,
            TTargetProperty targetPropertyValue1, TTargetProperty targetPropertyValue2,
            object sourcePropertyValue1, object sourcePropertyValue2)
        {
            targetObject.DataContext = source;

            var bindingExpression = calcBinding.ProvideValue(new ServiceProviderMock(targetObject, targetProperty));

            targetObject.SetValue(targetProperty, bindingExpression);

            //act
            targetPropertySetter(targetPropertyValue1);

            //assert
            var realSourcePropertyValue1 = sourcePropertyGetter();

            Assert.AreEqual(sourcePropertyValue1, realSourcePropertyValue1);

            //act
            targetPropertySetter(targetPropertyValue2);

            //assert
            var realSourcePropertyValue2 = sourcePropertyGetter();

            Assert.AreEqual(sourcePropertyValue2, realSourcePropertyValue2);
        }
コード例 #2
0
        public void VisibilityTest()
        {
            //-------------------------------------------------------------------//
            var test = new ExampleViewModel();

            //-------------------------------------------------------------------//
            VisibilityBindingAssert("!HasPrivileges", test,
                                    () => { test.HasPrivileges = true; }, Visibility.Collapsed,
                                    () => { test.HasPrivileges = false; }, Visibility.Visible
                                    );

            //-------------------------------------------------------------------//
            var calcBinding = new CalcBinding.Binding("!HasPrivileges")
            {
                FalseToVisibility = FalseToVisibility.Collapsed
            };

            VisibilityBindingAssert(calcBinding, test,
                                    () => { test.HasPrivileges = true; }, Visibility.Collapsed,
                                    () => { test.HasPrivileges = false; }, Visibility.Visible
                                    );

            //-------------------------------------------------------------------//
            calcBinding = new CalcBinding.Binding("!HasPrivileges")
            {
                FalseToVisibility = FalseToVisibility.Hidden
            };

            VisibilityBindingAssert(calcBinding, test,
                                    () => { test.HasPrivileges = true; }, Visibility.Hidden,
                                    () => { test.HasPrivileges = false; }, Visibility.Visible
                                    );
            //-------------------------------------------------------------------//
        }
コード例 #3
0
        public void BindingAssert <TTargetProperty>(
            CalcBinding.Binding calcBinding, INotifyPropertyChanged source,
            FrameworkElement targetObject, DependencyProperty targetProperty,
            Func <TTargetProperty> targetPropertyGetter,
            Action sourcePropertySetter1, TTargetProperty targetValue1,
            Action sourcePropertySetter2, TTargetProperty targetValue2
            )
        {
            //var test = new ExampleViewModel();

            targetObject.DataContext = source;

            var bindingExpression = calcBinding.ProvideValue(new ServiceProviderMock(targetObject, targetProperty));

            targetObject.SetValue(targetProperty, bindingExpression);

            //act
            sourcePropertySetter1();

            //assert
            var realValue1 = targetPropertyGetter();

            Assert.AreEqual(targetValue1, realValue1);

            //act
            sourcePropertySetter2();

            //assert
            var realValue2 = targetPropertyGetter();

            Assert.AreEqual(targetValue2, realValue2);
        }
コード例 #4
0
        public void BoolBindingAssert(CalcBinding.Binding calcBinding, INotifyPropertyChanged source,
                                      Action sourcePropertySetter1, bool targetValue1,
                                      Action sourcePropertySetter2, bool targetValue2)
        {
            var checkbox = new CheckBox();

            BindingAssert(calcBinding, source, checkbox, CheckBox.IsCheckedProperty, () => checkbox.IsChecked, sourcePropertySetter1, targetValue1, sourcePropertySetter2, targetValue2);
        }
コード例 #5
0
        public void VisibilityBindingAssert(CalcBinding.Binding calcBinding, INotifyPropertyChanged source,
                                            Action sourcePropertySetter1, Visibility targetValue1,
                                            Action sourcePropertySetter2, Visibility targetValue2)
        {
            var label = new Label();

            BindingAssert(calcBinding, source, label, Label.VisibilityProperty, () => label.Visibility, sourcePropertySetter1, targetValue1, sourcePropertySetter2, targetValue2);
        }
コード例 #6
0
        public void StringBindingAssert(CalcBinding.Binding calcBinding, INotifyPropertyChanged source,
                                        Action sourcePropertySetter1, string targetValue1,
                                        Action sourcePropertySetter2, string targetValue2)
        {
            var textBox = new TextBox();

            BindingAssert(calcBinding, source, textBox, TextBox.TextProperty, () => textBox.Text, sourcePropertySetter1, targetValue1, sourcePropertySetter2, targetValue2);
        }
コード例 #7
0
        public void BindingAssert <TTargetProperty>(
            string path, INotifyPropertyChanged source,
            FrameworkElement targetObject, DependencyProperty targetProperty,
            Func <TTargetProperty> targetPropertyGetter,
            Action sourcePropertySetter1, TTargetProperty targetValue1,
            Action sourcePropertySetter2, TTargetProperty targetValue2
            )
        {
            var calcBinding = new CalcBinding.Binding(path);

            BindingAssert(calcBinding, source, targetObject, targetProperty, targetPropertyGetter,
                          sourcePropertySetter1, targetValue1,
                          sourcePropertySetter2, targetValue2);
        }
コード例 #8
0
        public void BindingToReadonlyPropertyWithOneWaySuccessTest()
        {
            var calcBinding = new CalcBinding.Binding("ReadonlyA")
            {
                UpdateSourceTrigger = System.Windows.Data.UpdateSourceTrigger.PropertyChanged,
                Mode = BindingMode.OneWay
            };

            var source  = new ExampleViewModel();
            var element = new TextBox();

            BindingBackAssert(calcBinding, source, () => source.A,
                              element, TextBox.TextProperty, (string s) => element.Text = s,
                              "10", "100",
                              (double)10, (double)10);
        }
コード例 #9
0
        public void BindingBackAssert <TTargetProperty>(
            string path, INotifyPropertyChanged source, Func <object> sourcePropertyGetter,
            FrameworkElement targetObject, DependencyProperty targetProperty,
            Action <TTargetProperty> targetPropertySetter,
            TTargetProperty targetPropertyValue1, TTargetProperty targetPropertyValue2,
            object sourcePropertyValue1, object sourcePropertyValue2)
        {
            var calcBinding = new CalcBinding.Binding(path)
            {
                UpdateSourceTrigger = System.Windows.Data.UpdateSourceTrigger.PropertyChanged
            };

            BindingBackAssert(calcBinding, source, sourcePropertyGetter,
                              targetObject, targetProperty, targetPropertySetter,
                              targetPropertyValue1, targetPropertyValue2,
                              sourcePropertyValue1, sourcePropertyValue2);
        }
コード例 #10
0
        public void DataTriggerTest()
        {
            var viewModel = new ExampleViewModel()
            {
                A = 1, B = 1
            };
            var text = new TextBox
            {
                DataContext = viewModel
            };

            var dataTrigger1 = new DataTrigger
            {
                Value = true
            };

            dataTrigger1.Setters.Add(new Setter {
                Property = TextBox.BackgroundProperty, Value = Brushes.Red
            });
            dataTrigger1.Setters.Add(new Setter {
                Property = TextBox.IsEnabledProperty, Value = true
            });

            var calcBinding1 = new CalcBinding.Binding("(A+B)>10");

            var bindingExpression1 = calcBinding1.ProvideValue(
                new ServiceProviderMock(dataTrigger1, typeof(DataTrigger).GetProperty("Binding"), null)
                .WithNullXamlSchemaContextProvider()
                );

            dataTrigger1.Binding = bindingExpression1 as BindingBase;

            var dataTrigger2 = new DataTrigger
            {
                Value = true,
            };

            dataTrigger2.Setters.Add(new Setter {
                Property = TextBox.BackgroundProperty, Value = Brushes.Green
            });
            dataTrigger2.Setters.Add(new Setter {
                Property = TextBox.IsEnabledProperty, Value = false
            });

            var calcBinding2 = new CalcBinding.Binding("(A+B)<=10");

            var bindingExpression2 = calcBinding2.ProvideValue(
                new ServiceProviderMock(dataTrigger2, typeof(DataTrigger).GetProperty("Binding"), null)
                .WithNullXamlSchemaContextProvider()
                );

            dataTrigger2.Binding = bindingExpression2 as BindingBase;

            var style = new Style();

            style.Triggers.Add(dataTrigger1);
            style.Triggers.Add(dataTrigger2);

            text.Style = style;

            // act, assert
            viewModel.A = 5;
            viewModel.B = 7;

            Assert.AreEqual(Brushes.Red, text.Background);
            Assert.AreEqual(true, text.IsEnabled);

            viewModel.B = 2;

            Assert.AreEqual(Brushes.Green, text.Background);
            Assert.AreEqual(false, text.IsEnabled);
        }
コード例 #11
0
        public void MathTest()
        {
            var test = new ExampleViewModel();

            StringAndObjectBindingAssert("A", test,
                                         () => test.A = 10, "10", (double)10,
                                         () => test.A = 20.34, "20.34", 20.34
                                         );

            StringAndObjectBindingAssert("A+B+C", test,
                                         () => { test.A = 10; test.B = 20; test.C = -2; }, "28", (double)28,
                                         () => { test.A = 20.34; test.B = 15; test.C = 12; }, "47.34", 47.34
                                         );

            StringAndObjectBindingAssert("A-B-C", test,
                                         () => { test.A = 10; test.B = 20; test.C = 5; }, "-15", (double)-15,
                                         () => { test.A = 5; test.B = 3; test.C = -7; }, "9", (double)9
                                         );

            StringAndObjectBindingAssert("A*(B-C)", test,
                                         () => { test.A = 10; test.B = 20; test.C = 5; }, "150", (double)150,
                                         () => { test.A = 5.4; test.B = 3; test.C = -8; },
                                         59.400000000000006.ToString(CultureInfo.InvariantCulture),
                                         59.400000000000006

                                         );

            StringAndObjectBindingAssert("2*A-B*0.5", test,
                                         () => { test.A = 10; test.B = 20; }, "10", (double)10,
                                         () => { test.A = 5.4; test.B = 3; }, "9.3", (double)9.3
                                         );

            StringAndObjectBindingAssert("A % B", test,
                                         () => { test.A = 10; test.B = 4; }, "2", (double)2,
                                         () => { test.A = 12; test.B = 7; }, "5", (double)5
                                         );

            //String Format with many values
            var calcBinding = new CalcBinding.Binding("A/B")
            {
                StringFormat = "{0:n2}"
            };

            StringBindingAssert(calcBinding, test,
                                () => { test.A = 10; test.B = 3; }, "3.33",
                                () => { test.A = 20; test.B = -30; }, "-0.67"
                                );

            //String Format with one value
            calcBinding = new CalcBinding.Binding("Math.Sin(A)")
            {
                StringFormat = "{0:n2}"
            };

            StringBindingAssert(calcBinding, test,
                                () => { test.A = 10; }, "-0.54",
                                () => { test.A = 20; }, "0.91"
                                );

            //many entries of parameter
            StringAndObjectBindingAssert("A + 0.5*NestedViewModel.A + A + B + C + A - B", test,
                                         () => { test.A = 10; test.NestedViewModel.A = 4; test.B = 5; test.C = 2; }, "34", (double)34,
                                         () => { test.A = 12; test.NestedViewModel.A = 14; test.B = -2; test.C = 9; }, "52", (double)52
                                         );

            StringAndObjectBindingAssert("-4+B", test,
                                         () => { test.B = 7; }, "3", 3,
                                         () => { test.B = 12; }, "8", 8
                                         );
        }