public void Produces_BindingNotifications() { var inpcAccessorPlugin = new InpcPropertyAccessorPlugin(); var validatorPlugin = new IndeiValidationPlugin(); var data = new Data { Maximum = 5 }; var accessor = inpcAccessorPlugin.Start(new WeakReference(data), nameof(data.Value)); var validator = validatorPlugin.Start(new WeakReference(data), nameof(data.Value), accessor); var result = new List<object>(); validator.Subscribe(x => result.Add(x)); validator.SetValue(5, BindingPriority.LocalValue); validator.SetValue(6, BindingPriority.LocalValue); data.Maximum = 10; data.Maximum = 5; Assert.Equal(new[] { new BindingNotification(0), new BindingNotification(5), // Value is first signalled without an error as validation hasn't been updated. new BindingNotification(6), // Then the ErrorsChanged event is fired. new BindingNotification(new Exception("Must be less than Maximum"), BindingErrorType.DataValidationError, 6), // Maximum is changed to 10 so value is now valid. new BindingNotification(6), // And Maximum is changed back to 5. new BindingNotification(new Exception("Must be less than Maximum"), BindingErrorType.DataValidationError, 6), }, result); }
public void Produces_BindingNotifications() { var inpcAccessorPlugin = new InpcPropertyAccessorPlugin(); var validatorPlugin = new IndeiValidationPlugin(); var data = new Data { Maximum = 5 }; var accessor = inpcAccessorPlugin.Start(new WeakReference(data), nameof(data.Value)); var validator = validatorPlugin.Start(new WeakReference(data), nameof(data.Value), accessor); var result = new List <object>(); validator.Subscribe(x => result.Add(x)); validator.SetValue(5, BindingPriority.LocalValue); validator.SetValue(6, BindingPriority.LocalValue); data.Maximum = 10; data.Maximum = 5; Assert.Equal(new[] { new BindingNotification(0), new BindingNotification(5), // Value is first signalled without an error as validation hasn't been updated. new BindingNotification(6), // Then the ErrorsChanged event is fired. new BindingNotification(new Exception("Must be less than Maximum"), BindingErrorType.DataValidationError, 6), // Maximum is changed to 10 so value is now valid. new BindingNotification(6), // And Maximum is changed back to 5. new BindingNotification(new Exception("Must be less than Maximum"), BindingErrorType.DataValidationError, 6), }, result); }
public void Setting_Validating_Property_To_Invalid_Value_Returns_Failed_ValidationStatus() { var inpcAccessorPlugin = new InpcPropertyAccessorPlugin(); var validatorPlugin = new IndeiValidationPlugin(); var data = new Data(); var accessor = inpcAccessorPlugin.Start(new WeakReference(data), nameof(data.MustBePositive), _ => { }); IValidationStatus status = null; var validator = validatorPlugin.Start(new WeakReference(data), nameof(data.MustBePositive), accessor, s => status = s); validator.SetValue(-5, BindingPriority.LocalValue); Assert.False(status.IsValid); }
public void Setting_Non_Validating_Does_Not_Trigger_Validation() { var inpcAccessorPlugin = new InpcPropertyAccessorPlugin(); var validatorPlugin = new IndeiValidationPlugin(); var data = new Data(); var accessor = inpcAccessorPlugin.Start(new WeakReference(data), nameof(data.NonValidated), _ => { }); IValidationStatus status = null; var validator = validatorPlugin.Start(new WeakReference(data), nameof(data.NonValidated), accessor, s => status = s); validator.SetValue(5, BindingPriority.LocalValue); Assert.Null(status); }
public void Setting_Validating_Property_To_Valid_Value_Returns_Successful_ValidationStatus() { var inpcAccessorPlugin = new InpcPropertyAccessorPlugin(); var validatorPlugin = new IndeiValidationPlugin(); var data = new Data(); var accessor = inpcAccessorPlugin.Start(new WeakReference(data), nameof(data.MustBePositive), _ => { }); IValidationStatus status = null; var validator = validatorPlugin.Start(new WeakReference(data), nameof(data.MustBePositive), accessor, s => status = s); validator.SetValue(5, BindingPriority.LocalValue); Assert.True(status.IsValid); }
public void Subscribes_And_Unsubscribes() { var inpcAccessorPlugin = new InpcPropertyAccessorPlugin(); var validatorPlugin = new IndeiValidationPlugin(); var data = new Data { Maximum = 5 }; var accessor = inpcAccessorPlugin.Start(new WeakReference(data), nameof(data.Value)); var validator = validatorPlugin.Start(new WeakReference(data), nameof(data.Value), accessor); Assert.Equal(0, data.ErrorsChangedSubscriptionCount); var sub = validator.Subscribe(_ => { }); Assert.Equal(1, data.ErrorsChangedSubscriptionCount); sub.Dispose(); Assert.Equal(0, data.ErrorsChangedSubscriptionCount); }
public void Subscribes_And_Unsubscribes() { var inpcAccessorPlugin = new InpcPropertyAccessorPlugin(); var validatorPlugin = new IndeiValidationPlugin(); var data = new Data { Maximum = 5 }; var accessor = inpcAccessorPlugin.Start(new WeakReference(data), nameof(data.Value)); var validator = validatorPlugin.Start(new WeakReference(data), nameof(data.Value), accessor); Assert.Equal(0, data.ErrorsChangedSubscriptionCount); validator.Subscribe(_ => { }); Assert.Equal(1, data.ErrorsChangedSubscriptionCount); validator.Unsubscribe(); Assert.Equal(0, data.ErrorsChangedSubscriptionCount); }
public void Subscribes_And_Unsubscribes() { var inpcAccessorPlugin = new InpcPropertyAccessorPlugin(); var validatorPlugin = new IndeiValidationPlugin(); var data = new Data { Maximum = 5 }; var accessor = inpcAccessorPlugin.Start(new WeakReference <object>(data), nameof(data.Value)); var validator = validatorPlugin.Start(new WeakReference <object>(data), nameof(data.Value), accessor); Assert.Equal(0, data.ErrorsChangedSubscriptionCount); validator.Subscribe(_ => { }); Assert.Equal(1, data.ErrorsChangedSubscriptionCount); validator.Unsubscribe(); // Forces WeakEvent compact Dispatcher.UIThread.RunJobs(); Assert.Equal(0, data.ErrorsChangedSubscriptionCount); }