public void HandleChange_DescendantValidationStateChanged_PerformsViewModelValidation()
        {
            var args = ChangeArgs.ValidationResultChanged()
                       .PrependViewModel(VM)
                       .PrependViewModel(ViewModelStub.Build());

            Behavior.HandleChange(Context, args);
            Assert.AreEqual(HandleChangeNext + Validate + RevalidateNext, ActionLog);
        }
Пример #2
0
        public void NotifyChange_WithValidationResultChangeForOwnViewModel_CallsValidationResultChanged()
        {
            VMInterface.NotifyChange(ChangeArgs
                                     .ValidationResultChanged()
                                     .PrependViewModel(VM)
                                     );

            Assert.IsTrue(VM.OnValidationStateChangedWasCalled);
            Assert.IsNull(VM.LastOnValidationStateChangedInvocation);
        }
Пример #3
0
        public void NotifyChange_WithValidationResultChangeForOwnProperty_CallsValidationResultChanged()
        {
            var property = PropertyStub.Build();

            VMInterface.NotifyChange(ChangeArgs
                                     .ValidationResultChanged(property, ValueStage.Value)
                                     .PrependViewModel(VM)
                                     );

            Assert.AreEqual(property, VM.LastOnValidationStateChangedInvocation);
        }
Пример #4
0
        public void NotifyChange_ForOwnProperty_RaisesPropertyChangedForErrorProperty()
        {
            var counter = new PropertyChangedCounter(VM, "Error");

            VMInterface.NotifyChange(ChangeArgs
                                     .ValidationResultChanged()
                                     .PrependViewModel(VM)
                                     );

            counter.AssertOneRaise();
        }
Пример #5
0
        public void NotifyChange_WithPropertyChangeForDescendantViewModel_DoesNothing()
        {
            VMInterface.NotifyChange(ChangeArgs
                                     .ValidationResultChanged()
                                     .PrependViewModel(ViewModelStub.Build())
                                     .PrependViewModel(VM)
                                     );

            Assert.IsNull(VM.LastOnPropertyChangedInvocation);
            Assert.IsNull(VM.LastOnValidationStateChangedInvocation);
        }
Пример #6
0
        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()
                );
        }
Пример #7
0
        public void UpdateValidationResult_AsViewModelBehavior_CallsNotifyChangeWithCorrectArgs()
        {
            SetupForViewModel();

            var oldResult = CreateValidationResult("New result");

            Manager.UpdateValidationResult(Context, oldResult);

            DomainAssert.AreEqual(
                ChangeArgs.ValidationResultChanged(),
                Context.NotifyChangeInvocations.LastOrDefault()
                );
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
            }
        }
Пример #12
0
        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);
        }
Пример #13
0
        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);
        }
Пример #14
0
        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);
        }
Пример #15
0
 public void CallHandleChangeForSecondProperty()
 {
     CallHandleChangeWith(ChangeArgs
                          .ValidationResultChanged(SecondProperty, ValueStage.ValidatedValue)
                          .PrependViewModel(this));
 }
Пример #16
0
 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);
 }