public void HandleChange_DescendantValidationStateChanged_PerformsViewModelValidation() { var args = ChangeArgs.ValidationResultChanged() .PrependViewModel(VM) .PrependViewModel(ViewModelStub.Build()); Behavior.HandleChange(Context, args); Assert.AreEqual(HandleChangeNext + Validate + RevalidateNext, ActionLog); }
public void NotifyChange_WithValidationResultChangeForOwnViewModel_CallsValidationResultChanged() { VMInterface.NotifyChange(ChangeArgs .ValidationResultChanged() .PrependViewModel(VM) ); Assert.IsTrue(VM.OnValidationStateChangedWasCalled); Assert.IsNull(VM.LastOnValidationStateChangedInvocation); }
public void NotifyChange_WithValidationResultChangeForOwnProperty_CallsValidationResultChanged() { var property = PropertyStub.Build(); VMInterface.NotifyChange(ChangeArgs .ValidationResultChanged(property, ValueStage.Value) .PrependViewModel(VM) ); Assert.AreEqual(property, VM.LastOnValidationStateChangedInvocation); }
public void NotifyChange_ForOwnProperty_RaisesPropertyChangedForErrorProperty() { var counter = new PropertyChangedCounter(VM, "Error"); VMInterface.NotifyChange(ChangeArgs .ValidationResultChanged() .PrependViewModel(VM) ); counter.AssertOneRaise(); }
public void NotifyChange_WithPropertyChangeForDescendantViewModel_DoesNothing() { VMInterface.NotifyChange(ChangeArgs .ValidationResultChanged() .PrependViewModel(ViewModelStub.Build()) .PrependViewModel(VM) ); Assert.IsNull(VM.LastOnPropertyChangedInvocation); Assert.IsNull(VM.LastOnValidationStateChangedInvocation); }
public void UpdateValidationResult_AsPropertyBehavior_CallsNotifyChangeWithCorrectArgs() { SetupForProperty(ValueStage.DisplayValue); var oldResult = CreateValidationResult("New result"); Manager.UpdateValidationResult(Context, oldResult); DomainAssert.AreEqual( ChangeArgs.ValidationResultChanged(Property, ValueStage.DisplayValue), Context.NotifyChangeInvocations.LastOrDefault() ); }
public void UpdateValidationResult_AsViewModelBehavior_CallsNotifyChangeWithCorrectArgs() { SetupForViewModel(); var oldResult = CreateValidationResult("New result"); Manager.UpdateValidationResult(Context, oldResult); DomainAssert.AreEqual( ChangeArgs.ValidationResultChanged(), Context.NotifyChangeInvocations.LastOrDefault() ); }
public void ValidationStateChange_SetsChangeTypeAndChangedPath() { var args = ChangeArgs.ValidationResultChanged(); Assert.AreEqual(ChangeType.ValidationResultChanged, args.ChangeType); DomainAssert.AreEqual(Path.Empty, args.ChangedPath); var property = PropertyStub.Build(); args = ChangeArgs.ValidationResultChanged(property, ValueStage.ValidatedValue); Assert.AreEqual(ValueStage.ValidatedValue, args.Stage); Assert.AreEqual(ChangeType.ValidationResultChanged, args.ChangeType); DomainAssert.AreEqual(Path.Empty.Append(property), args.ChangedPath); }
public void HandleChange_WithValidationResultChangedOfDescendantProperty_DoesNotUpdateCachedResults() { var vm = new TestVM(); var descendantArgs = ChangeArgs .ValidationResultChanged(PropertyStub.Build(), ValueStage.ValidatedValue) .PrependViewModel(ViewModelStub.Build()) .PrependViewModel(vm); vm.FirstPropertyResultSetup = CreateValidationResult("Irrelevant property error"); vm.CallHandleChangeWith(descendantArgs); AssertBehaviorResults(vm, ExpectedResults.AllValid); }
public void ValidationStateChange_InvalidatesCache() { Behavior.GetValidationResult(Context, ValidationResultScope.All); var expectedResult = ChangeNextResultsAndReturnJoinedResults(); Behavior.HandleChange( Context, ChangeArgs.ValidationResultChanged().PrependViewModel(ViewModelStub.Build()) ); var actualResult = Behavior.GetValidationResult(Context, ValidationResultScope.All); Assert.AreEqual(expectedResult, actualResult); }
public void UpdateValidationResult(IBehaviorContext context, ValidationResult result) { var previousResult = GetValidationResult(context); if (!result.Equals(previousResult)) { SetOrClearValidationResult(context, result); var args = _property != null? ChangeArgs.ValidationResultChanged(_property, _stage) : ChangeArgs.ValidationResultChanged(); context.NotifyChange(args); } }
public void Revalidate_ValidationFails_RaisesOnlyValidationStateChanged() { SetPropertyToValidValue(); SetPropertyToInvalidValue(); VM.OnChangeInvocations.Clear(); VM.PropertyResultToReturn = InvalidValidationResult; RevalidateProperty(); var expectedChangeNotifications = new[] { ChangeArgs .ValidationResultChanged(TestVM.ClassDescriptor.Property, ValueStage.Value) .PrependViewModel(VM) }; DomainAssert.AreEqual(expectedChangeNotifications, VM.OnChangeInvocations); }
public void HandleChange_AlsoRefreshesParentCaches() { Behavior.GetValidationResult(Context, ValidationResultScope.All); var newResult = ChangeNextResultsAndReturnJoinedResults(); var childBehavior = new ValidationResultAggregatorCacheBehavior(); var childVM = ViewModelStub .WithBehaviors(childBehavior, new ValidationResultAggregatorStub()) .Build(); childVM.Kernel.Parents.Add(Context.VM); childBehavior.HandleChange( childVM.GetContext(), ChangeArgs.ValidationResultChanged().PrependViewModel(ViewModelStub.Build()) ); var actualResult = Behavior.GetValidationResult(Context, ValidationResultScope.All); Assert.AreEqual(newResult, actualResult); }
public void NotifyChange_CallsHandlePropertyChangedBehaviorOnlyIfOwnPropertyHasChanged() { var mock = new PropertyChangedMock(); var property = PropertyStub .WithBehaviors(mock) .Build(); var vm = ViewModelStub .WithProperties(property) .Build(); var context = vm.GetContext(); var args = ChangeArgs.PropertyChanged(property, ValueStage.ValidatedValue); context.NotifyChange(args); Assert.IsTrue(mock.PropertyChangedWasCalled); mock.PropertyChangedWasCalled = false; args = ChangeArgs .PropertyChanged(property, ValueStage.ValidatedValue) .PrependViewModel(ViewModelStub.Build()); context.NotifyChange(args); Assert.IsFalse(mock.PropertyChangedWasCalled); mock.PropertyChangedWasCalled = false; args = ChangeArgs.ValidationResultChanged(property, ValueStage.Value); context.NotifyChange(args); Assert.IsFalse(mock.PropertyChangedWasCalled); mock.PropertyChangedWasCalled = false; args = ChangeArgs.ItemsAdded(VMCollectionStub.Build(), new[] { ViewModelStub.Build() }); context.NotifyChange(args); Assert.IsFalse(mock.PropertyChangedWasCalled); }
public void CallHandleChangeForSecondProperty() { CallHandleChangeWith(ChangeArgs .ValidationResultChanged(SecondProperty, ValueStage.ValidatedValue) .PrependViewModel(this)); }
public void CallHandleChangeForViewModel() { CallHandleChangeWith(ChangeArgs .ValidationResultChanged() .PrependViewModel(this)); }
public void HandleChange_OwnValidationStateChanged_PerformsViewModelValidation() { Behavior.HandleChange(Context, ChangeArgs.ValidationResultChanged().PrependViewModel(VM)); Assert.AreEqual(HandleChangeNext + Validate + RevalidateNext, ActionLog); }