public void ActionDisposeT1NoAction() { int cntDisposed = 0; int cntFinalized = 0; var tdc = new TracedDisposableControl(); tdc.SetTraceEnabledForAll(true); tdc.CurrentReportFinalized = (rfi) => { cntFinalized++; }; var sut = new ActionDispose <int>(null, 0, tdc); sut.Dispose(); // no error Assert.Equal(0, cntDisposed); Assert.Equal(0, cntFinalized); }
public void ActionDisposeActionIsCalledOnDispose() { int cntDisposed = 0; int cntFinalized = 0; var tdc = new TracedDisposableControl(); tdc.SetTraceEnabledForAll(true); tdc.CurrentReportFinalized = (rfi) => { cntFinalized++; }; var sut = new ActionDispose(() => { cntDisposed++; }, tdc); sut.Dispose(); Assert.Equal(1, cntDisposed); Assert.Equal(0, cntFinalized); }
public void ActionDisposeActionWithException() { int cntDisposed = 0; int cntFinalized = 0; var tdc = new TracedDisposableControl(); tdc.SetTraceEnabledForAll(true); tdc.CurrentReportFinalized = (rfi) => { cntFinalized++; }; var sut = new ActionDispose(() => { cntDisposed++; throw new ArgumentException("HUGO"); }, tdc); try { Assert.Throws <ArgumentException>(() => sut.Dispose()); } catch { } sut.Dispose(); // no error again Assert.Equal(1, cntDisposed); }
public void ActionDisposeActionIsCalledOnFinalizer() { int cntDisposed = 0; int cntFinalized = 0; var tdc = new TracedDisposableControl(); tdc.SetTraceEnabledForAll(true); tdc.CurrentReportFinalized = (rfi) => { cntFinalized++; }; for (int idx = 0; idx < 100; idx++) { var sut = new ActionDispose(() => { cntDisposed++; }, tdc); // NO sut.Dispose(); sut = null; } System.GC.Collect(); System.GC.WaitForPendingFinalizers(); System.GC.Collect(); Assert.True(cntDisposed == cntFinalized, $"{cntDisposed} == {cntFinalized}"); Assert.True(cntDisposed > 90, $"!({cntDisposed}>90)"); Assert.True(cntFinalized > 90, $"!({cntFinalized}>90)"); }