public void Add_A_Blocking_Object_Only_Once() { // arrange var dumpThread = new DumpThread(); var blockingObject = new DumpBlockingObject(); // act dumpThread.AddBlockingObject(blockingObject); dumpThread.AddBlockingObject(blockingObject); // assert dumpThread.BlockingObjects.Should().HaveCount(1); }
public void Exhibit_Entity_Equality() { // arrange var a = new DumpBlockingObject() { Address = 0 }; var b = new DumpBlockingObject() { Address = 0 }; var c = new DumpBlockingObject() { Address = 1 }; // act // assert a.GetHashCode().Should().Be(b.GetHashCode()); a.GetHashCode().Should().NotBe(c.GetHashCode()); a.Equals(a).Should().BeTrue(); a.Equals(b).Should().BeTrue(); a.Equals(c).Should().BeFalse(); a.Equals(null).Should().BeFalse(); a.Equals("").Should().BeFalse(); a.CompareTo(a).Should().Be(0); a.CompareTo(b).Should().Be(0); a.CompareTo(c).Should().Be(-1); a.CompareTo(null).Should().Be(1); a.Equals((object)a).Should().BeTrue(); a.Equals((object)b).Should().BeTrue(); a.Equals((object)c).Should().BeFalse(); a.Equals((object)null).Should().BeFalse(); a.CompareTo((object)a).Should().Be(0); a.CompareTo((object)b).Should().Be(0); a.CompareTo((object)c).Should().Be(-1); a.CompareTo((object)null).Should().Be(1); (a < b).Should().BeFalse(); (a <= b).Should().BeTrue(); (c > a).Should().BeTrue(); (c >= a).Should().BeTrue(); Action throws = () => a.CompareTo(""); throws.Should().Throw <ArgumentException>(); }
/// <summary> /// Creates the blocking objects. /// </summary> public void CreateBlockingObjects() { BlockingObjects = new Dictionary <ulong, DumpBlockingObject>(); BlockingObjectToThreadMapping = new Dictionary <ulong, IList <uint> >(); foreach (var blockingObject in Runtime.Heap.EnumerateBlockingObjects()) { var dumpBlockingObject = new DumpBlockingObject { Address = blockingObject.Object, BlockingReason = blockingObject.Reason, IsLocked = blockingObject.Taken, RecursionCount = blockingObject.RecursionCount }; if (!BlockingObjects.ContainsKey(dumpBlockingObject.Address)) { BlockingObjects.Add(dumpBlockingObject.Address, dumpBlockingObject); } if (BlockingObjectToThreadMapping.ContainsKey(blockingObject.Object)) { continue; } var owners = new List <uint>(); if (blockingObject.Owner != null) { owners.Add(blockingObject.Owner.OSThreadId); } if (blockingObject.Owners != null) { owners.AddRange(blockingObject.Owners.Where(x => x != null).Select(x => x.OSThreadId)); } BlockingObjectToThreadMapping.Add(blockingObject.Object, owners); } }