public void CanTrackSetPropertyChanges()
        {
            C c = TrackableObjectFactory.CreateFrom(new C());

            IObjectChangeTracker Ctracking = c.GetChangeTracker();
            IReadOnlyChangeTrackableCollection trackableCollection = (IReadOnlyChangeTrackableCollection)c.Dogs;

            c.Dogs.Add(new Dog {
                Name = "Rex"
            });

            Assert.AreEqual(1, Ctracking.ChangedProperties.Count);
        }
        public void CanClearCollectionChanges()
        {
            A a = TrackableObjectFactory.CreateOf <A>();

            a.Items.Add("a");
            a.Items.Add("b");

            a.Items.ClearChanges();

            IReadOnlyChangeTrackableCollection trackableCollection
                = (IReadOnlyChangeTrackableCollection)a.Items;

            Assert.AreEqual(0, trackableCollection.AddedItems.Count);
            Assert.AreEqual(0, trackableCollection.RemovedItems.Count);
        }
        public void CanTrackSetIntersections()
        {
            C c = TrackableObjectFactory.CreateFrom(new C());

            c.Dogs.Add(new Dog {
                Name = "Rex"
            });

            IReadOnlyChangeTrackableCollection trackableCollection = (IReadOnlyChangeTrackableCollection)c.Dogs;

            c.Dogs.IntersectWith(new[] { new Dog {
                                             Name = "Rex"
                                         } });

            Assert.AreEqual(1, c.Dogs.Count);
            Assert.AreEqual(2, trackableCollection.RemovedItems.Count);
            Assert.AreEqual(1, trackableCollection.AddedItems.Count);
        }