public void UnregisterTrackedTypeStopsTracking() { DisposableTracker.RegisterTrackedType(typeof(TestDisposable)); DisposableTracker.RegisterTrackedType(typeof(ReferenceCounted)); using (var t = new TestDisposable()) using (var t2 = new ReferenceCounted()) { //Confirm both items tracked int trackedItems = 0; DisposableTracker.EnumerateTrackedInstances((td) => trackedItems++); Assert.AreEqual(2, trackedItems); trackedItems = 0; //Remove one type, and check only one instance being tracked DisposableTracker.UnregisterTrackedType(typeof(TestDisposable)); DisposableTracker.EnumerateTrackedInstances((td) => trackedItems++); Assert.AreEqual(1, trackedItems); trackedItems = 0; //Create another instance of the type NOT being tracked //and ensure still only one tracked instance. using (var t3 = new TestDisposable()) { DisposableTracker.EnumerateTrackedInstances((td) => trackedItems++); Assert.AreEqual(1, trackedItems); } } }
public void TracksOnlyRegisteredTypes() { DisposableTracker.RegisterTrackedType(typeof(TestDisposable)); using (var t = new TestDisposable()) using (var t2 = new ReferenceCounted()) { int trackedItems = 0; DisposableTracker.EnumerateTrackedInstances((td) => trackedItems++); Assert.AreEqual(1, trackedItems); } }
public void OutputsStackTraceWhenCaptured() { DisposableTracker.Enabled = false; DisposableTracker.Enabled = true; DisposableTracker.CaptureStackTraceAtCreation = true; var disposable = new TestDisposable(); var sb = new StringBuilder(); DisposableTracker.EnumerateTrackedInstances((td) => sb.Append(td.CreationStackTrace)); Assert.IsTrue(sb.Length > 0); System.Diagnostics.Trace.WriteLine(sb.ToString()); }
public void OutputsUndisposedObject() { DisposableTracker.Enabled = false; DisposableTracker.Enabled = true; DisposableTracker.CaptureStackTraceAtCreation = false; var disposable = new TestDisposable(); var sb = new StringBuilder(); DisposableTracker.EnumerateTrackedInstances((td) => sb.Append(td.InstanceType.FullName + " created at " + td.CreationStackTrace + " Alive = " + td.IsAlive)); Assert.IsTrue(sb.Length > 0); System.Diagnostics.Trace.WriteLine(sb.ToString()); }
public void OutputsDoesNotOutputUnregisteredObject() { DisposableTracker.Enabled = false; DisposableTracker.Enabled = true; var sb = new StringBuilder(); //DisposableTracker.CaptureStackTraceAtCreation = true; var disposable = new TestDisposable(); disposable.Dispose(); DisposableTracker.EnumerateTrackedInstances((str) => sb.Append(str)); System.Diagnostics.Trace.WriteLine(sb.ToString()); Assert.IsTrue(sb.Length == 0); }
public void OutputsFinalizedUndisposedObject() { DisposableTracker.Enabled = false; DisposableTracker.Enabled = true; var sb = new StringBuilder(); //DisposableTracker.CaptureStackTraceAtCreation = true; var disposable = new TestDisposable(); disposable = null; GC.Collect(); GC.WaitForPendingFinalizers(); DisposableTracker.EnumerateTrackedInstances((td) => sb.Append(td.InstanceType.FullName + " " + (td.IsAlive ? "Alive" : "Dead"))); System.Diagnostics.Trace.WriteLine(sb.ToString()); Assert.IsTrue(sb.Length > 0); Assert.IsTrue(sb.ToString().Contains("Dead")); }