public void ItemsAdded_SetsChangeTypeAndNewItemsAndChangedPathToCollection()
        {
            var collection = VMCollectionStub.Build();
            var newItems   = new[] { ViewModelStub.Build() };
            var args       = ChangeArgs.ItemsAdded(collection, newItems);

            Assert.AreEqual(ChangeType.AddedToCollection, args.ChangeType);
            CollectionAssert.AreEqual(newItems, args.NewItems.ToArray());
            Assert.IsFalse(args.OldItems.Any());
            DomainAssert.AreEqual(Path.Empty.Append(collection), args.ChangedPath);
        }
示例#2
0
        public void ItemInserted_CallsNotifyChange()
        {
            var insertedItem = CreateItem("Inserted item");

            Collection = CreateCollection(insertedItem);

            HandleItemInserted(insertedItem);

            AssertChangeArgs(
                ChangeArgs.ItemsAdded(Collection, newItems: new[] { insertedItem })
                );
        }
示例#3
0
        public void ItemSet_CallsNotifyChangeForOldAndNewItem()
        {
            var oldItem = CreateItem("Old item");
            var newItem = CreateItem("New item");

            Collection = CreateCollection(newItem);

            HandleItemSet(previousItem: oldItem, item: newItem);

            AssertChangeArgs(
                ChangeArgs.ItemsRemoved(Collection, oldItems: new[] { oldItem }),
                ChangeArgs.ItemsAdded(Collection, newItems: new[] { newItem })
                );
        }
示例#4
0
        public void HandleChange_WithItemsAddedOrRemovedFromOwnCollection_UpdatesCachedResults()
        {
            var owner = new TestVM();

            owner.MakePropertiesAndViewModelInvalid();
            var expected = owner.GetCurrentlySetupResults();

            //   F I R S T   A D D
            var firstNewItem = new ViewModelStub {
                ValidationResult = CreateValidationResult("First new item error")
            };

            var collectionChangeArgs = ChangeArgs
                                       .ItemsAdded(VMCollectionStub.Build(), new[] { firstNewItem })
                                       .PrependViewModel(owner);

            owner.CallHandleChangeWith(collectionChangeArgs);

            expected.Descenants = firstNewItem.ValidationResult;
            AssertBehaviorResults(owner, expected);

            //   S E C O N D   A D D
            var secondNewItem = new ViewModelStub {
                ValidationResult = CreateValidationResult("Second new Item error")
            };

            collectionChangeArgs = ChangeArgs
                                   .ItemsAdded(VMCollectionStub.Build(), new[] { secondNewItem })
                                   .PrependViewModel(owner);

            owner.CallHandleChangeWith(collectionChangeArgs);

            expected.Descenants = ValidationResult.Join(
                firstNewItem.ValidationResult,
                secondNewItem.ValidationResult
                );

            AssertBehaviorResults(owner, expected);

            //   R E M O V AL
            collectionChangeArgs = ChangeArgs
                                   .ItemsRemoved(VMCollectionStub.Build(), new[] { firstNewItem })
                                   .PrependViewModel(owner);

            owner.CallHandleChangeWith(collectionChangeArgs);

            expected.Descenants = secondNewItem.ValidationResult;
            AssertBehaviorResults(owner, expected);
        }
示例#5
0
        public void HandleChange_WithItemsAddedOrRemovedFromDescendantCollection_DoesNotUpdateCachedResults()
        {
            var owner = new TestVM();

            var newItem = new ViewModelStub {
                ValidationResult = CreateValidationResult("Irrelevant item error")
            };

            var collectionChangeArgs = ChangeArgs
                                       .ItemsAdded(VMCollectionStub.Build(), new[] { newItem })
                                       .PrependViewModel(ViewModelStub.Build())
                                       .PrependViewModel(owner);

            owner.CallHandleChangeWith(collectionChangeArgs);

            AssertBehaviorResults(owner, ExpectedResults.AllValid);
        }
示例#6
0
        public void HandleChange_WithItemsAddedToOwnCollection_UpdatesBehaviorOfParentViewModel()
        {
            var parent = new TestVM();
            var owner  = new TestVM();

            parent.MakePropertiesAndViewModelInvalid();
            owner.Kernel.Parents.Add(parent);

            var newItem = new ViewModelStub {
                ValidationResult = CreateValidationResult("New item error")
            };

            var collectionChangeArgs = ChangeArgs
                                       .ItemsAdded(VMCollectionStub.Build(), new[] { newItem })
                                       .PrependViewModel(owner);

            owner.CallHandleChangeWith(collectionChangeArgs);

            var expectedParentResult = parent.GetCurrentlySetupResults();

            expectedParentResult.Descenants = newItem.ValidationResult;
            AssertBehaviorResults(parent, expectedParentResult);
        }
示例#7
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);
        }