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); }
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 ); //-------------------------------------------------------------------// }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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 ); }