Пример #1
0
        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));
        }
Пример #2
0
        public void SyncDisposalOnObjectWithNoIDisposableThrows()
        {
            var instance = new AsyncOnlyDisposeTracker();

            var disposer = new Disposer();

            disposer.AddInstanceForAsyncDisposal(instance);

            Assert.Throws <InvalidOperationException>(() =>
            {
                disposer.Dispose();
            });
        }