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 }
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);
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); }