示例#1
0
        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);
                    }
                }
        }
示例#2
0
        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);
                }
        }
示例#3
0
        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());
        }
示例#4
0
        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());
        }
示例#5
0
        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);
        }
示例#6
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"));
        }