public void DisposeTest()
        {
            // Calling dispose twice must not throw an exception.
            var  originalCollection      = new ObservableCollection <MyModel>();
            bool factoryCalled           = false;
            var  synchronizingCollection = new SynchronizingCollectionCore <MyDataModel, MyModel>(originalCollection, m =>
            {
                factoryCalled = true;
                return(new MyDataModel(m));
            });

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

            synchronizingCollection.Dispose();
            synchronizingCollection.Dispose();
            factoryCalled = false;
            originalCollection.Add(new MyModel());
            Assert.IsFalse(factoryCalled);

            // Check that no memory leak occurs
            synchronizingCollection = new SynchronizingCollectionCore <MyDataModel, MyModel>(originalCollection, m => new MyDataModel(m));
            var weakSynchronizingCollection = new WeakReference(synchronizingCollection);

            originalCollection.Add(new MyModel());
            Assert.IsTrue(weakSynchronizingCollection.IsAlive);

            synchronizingCollection.Dispose();
            synchronizingCollection = null;
            GC.Collect();
            Assert.IsNotNull(originalCollection);
#if !NETCOREAPP2_1 || !DEBUG
            Assert.IsFalse(weakSynchronizingCollection.IsAlive);
#endif
        }
Ejemplo n.º 2
0
        public void DisposeTest()
        {
            // Calling dispose twice must not throw an exception.
            var  originalCollection      = new ObservableCollection <MyModel>();
            bool factoryCalled           = false;
            var  synchronizingCollection = new SynchronizingCollectionCore <MyDataModel, MyModel>(originalCollection, m =>
            {
                factoryCalled = true;
                return(new MyDataModel(m));
            });

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

            synchronizingCollection.Dispose();
            synchronizingCollection.Dispose();
            factoryCalled = false;
            originalCollection.Add(new MyModel());
            Assert.IsFalse(factoryCalled);

            // Check that no memory leak occurs
            var weakSynchronizingCollection = WeakTest(originalCollection);

            GC.Collect();
            Assert.IsFalse(weakSynchronizingCollection.IsAlive);
Ejemplo n.º 3
0
            static WeakReference WeakTest(ObservableCollection <MyModel> originalCollection)
            {
                var synchronizingCollection     = new SynchronizingCollectionCore <MyDataModel, MyModel>(originalCollection, m => new MyDataModel(m));
                var weakSynchronizingCollection = new WeakReference(synchronizingCollection);

                originalCollection.Add(new MyModel());
                Assert.IsTrue(weakSynchronizingCollection.IsAlive);
                synchronizingCollection.Dispose();
                return(weakSynchronizingCollection);
            }
        public void DisposeTest()
        {
            // Calling dispose twice must not throw an exception.
            var originalCollection      = new ObservableCollection <MyModel>();
            var synchronizingCollection = new SynchronizingCollectionCore <MyDataModel, MyModel>(originalCollection, m => new MyDataModel(m));

            synchronizingCollection.Dispose();
            synchronizingCollection.Dispose();

            synchronizingCollection = new SynchronizingCollectionCore <MyDataModel, MyModel>(originalCollection, m => new MyDataModel(m));
            WeakReference weakSynchronizingCollection = new WeakReference(synchronizingCollection);

            originalCollection.Add(new MyModel());
            Assert.IsTrue(weakSynchronizingCollection.IsAlive);

            synchronizingCollection.Dispose();
            synchronizingCollection = null;
            GC.Collect();
            Assert.IsNotNull(originalCollection);
            Assert.IsFalse(weakSynchronizingCollection.IsAlive);
        }