public async ValueTask DisposerAsyncDisposesContainedInstances_InReverseOfOrderAdded() { var disposeOrder = new List <object>(); var asyncInstance1 = new AsyncDisposeTracker(); asyncInstance1.Disposing += (s, e) => disposeOrder.Add(asyncInstance1); var asyncOnlyInstance2 = new AsyncOnlyDisposeTracker(); asyncOnlyInstance2.Disposing += (s, e) => disposeOrder.Add(asyncOnlyInstance2); var syncInstance3 = new DisposeTracker(); syncInstance3.Disposing += (s, e) => disposeOrder.Add(syncInstance3); var syncInstance4 = new DisposeTracker(); syncInstance4.Disposing += (s, e) => disposeOrder.Add(syncInstance4); var disposer = new Disposer(); disposer.AddInstanceForDisposal(asyncInstance1); disposer.AddInstanceForDisposal(syncInstance3); disposer.AddInstanceForDisposal(syncInstance4); disposer.AddInstanceForAsyncDisposal(asyncOnlyInstance2); await disposer.DisposeAsync(); Assert.Collection( disposeOrder, o1 => Assert.Same(asyncOnlyInstance2, o1), o2 => Assert.Same(syncInstance4, o2), o3 => Assert.Same(syncInstance3, o3), o4 => Assert.Same(asyncInstance1, o4)); }
public void SyncDisposalOnObjectWithNoIDisposableThrows() { var instance = new AsyncOnlyDisposeTracker(); var disposer = new Disposer(); disposer.AddInstanceForAsyncDisposal(instance); Assert.Throws <InvalidOperationException>(() => { disposer.Dispose(); }); }