public void CollectionChangedTest()
        {
            var originalCollection = new ObservableCollection <MyModel>()
            {
                new MyModel()
            };
            var synchronizingCollection = new SynchronizingCollection <MyDataModel, MyModel>(originalCollection, m => new MyDataModel(m));

            AssertHelper.SequenceEqual(originalCollection, synchronizingCollection.Select(dm => dm.Model));

            // Check add operation with collection changed event.
            bool handlerCalled = false;
            NotifyCollectionChangedEventHandler handler = (sender, e) =>
            {
                handlerCalled = true;
                Assert.AreEqual(synchronizingCollection, sender);
                Assert.AreEqual(NotifyCollectionChangedAction.Add, e.Action);
                Assert.AreEqual(1, e.NewStartingIndex);
                Assert.AreEqual(originalCollection.Last(), e.NewItems.Cast <MyDataModel>().Single().Model);
            };

            synchronizingCollection.CollectionChanged += handler;
            originalCollection.Add(new MyModel());
            Assert.IsTrue(handlerCalled);

            // After dispose the collection does not synchronize anymore
            handlerCalled = false;
            synchronizingCollection.Dispose();
            originalCollection.Add(new MyModel());
            Assert.IsFalse(handlerCalled);
            synchronizingCollection.CollectionChanged -= handler;
        }
Ejemplo n.º 2
0
        public void ObservableCollectionTest()
        {
            var originalCollection = new ObservableCollection<MyModel>() { new MyModel() };
            var synchronizingCollection = new SynchronizingCollection<MyDataModel, MyModel>(originalCollection, m => new MyDataModel(m));
            Assert.IsTrue(originalCollection.SequenceEqual(synchronizingCollection.Select(dm => dm.Model)));

            // Check add operation with collection changed event.
            bool handlerCalled = false;
            NotifyCollectionChangedEventHandler handler = (sender, e) =>
            {
                handlerCalled = true;
                Assert.AreEqual(synchronizingCollection, sender);
                Assert.AreEqual(NotifyCollectionChangedAction.Add, e.Action);
                Assert.AreEqual(1, e.NewStartingIndex);
                Assert.AreEqual(originalCollection.Last(), e.NewItems.Cast<MyDataModel>().Single().Model);
            };
            synchronizingCollection.CollectionChanged += handler;
            originalCollection.Add(new MyModel());
            Assert.IsTrue(handlerCalled);

            // After dispose the collection does not synchronize anymore
            handlerCalled = false;
            synchronizingCollection.Dispose();
            originalCollection.Add(new MyModel());
            Assert.IsFalse(handlerCalled);
            synchronizingCollection.CollectionChanged -= handler;
        }
        public void DisposeTest()
        {
            var  originalCollection      = new ObservableCollection <MyModel>();
            bool factoryCalled           = false;
            var  synchronizingCollection = new SynchronizingCollection <MyDataModel, MyModel>(originalCollection, m =>
            {
                factoryCalled = true;
                return(new MyDataModel(m));
            });

            originalCollection.Add(new MyModel());
            Assert.IsTrue(factoryCalled);

            // Calling dispose twice must not throw an exception.
            synchronizingCollection.Dispose();
            synchronizingCollection.Dispose();
            factoryCalled = false;
            originalCollection.Add(new MyModel());
            Assert.IsFalse(factoryCalled);
        }