public async Task CanInspectSecureDelegate() { using (var scope = await HeapAnalysisScope.Create()) { var delegateObj = scope.Subject.GetFieldValue(nameof(HeapAnalysisTarget.Program.SecureDelegate)).CastAs <IClrCompositeObject>(); var details = new DelegateInspector().Inspect(delegateObj); Assert.That(details.Kind.HasFlag(DelegateKind.Secure7)); } }
public async Task CanInspectInstanceOpenVirtualDelegate() { using (var scope = await HeapAnalysisScope.Create()) { var delegateObj = scope.Subject.GetFieldValue(nameof(HeapAnalysisTarget.Program.InstanceOpenVirtualDelegate)).CastAs <IClrCompositeObject>(); var details = new DelegateInspector().Inspect(delegateObj); Assert.That(details.Kind.HasFlag(DelegateKind.InstanceOpenVirtual3)); Assert.That(details.TargetOrFirstArg, Is.Null); Assert.That(details.Method, Is.EqualTo(scope.FindClrType <HeapAnalysisTarget.Program.InstanceDelegateContainer>().FindMethodByName("VirtualMethod")).Using(new ClrMethodEqualityComparer())); } }
public async Task CanInspectInstanceClosedDelegate() { using (var scope = await HeapAnalysisScope.Create()) { var delegateObj = scope.Subject.GetFieldValue(nameof(HeapAnalysisTarget.Program.InstanceClosedDelegate)).CastAs <IClrCompositeObject>(); var details = new DelegateInspector().Inspect(delegateObj); Assert.That(details.Kind.HasFlag(DelegateKind.InstanceClosed1)); var targetInstance = details.TargetOrFirstArg.CastAs <ClrClassObject>(); Assert.That(targetInstance.Type.CanBeAssignedTo <HeapAnalysisTarget.Program.InstanceDelegateContainer>()); Assert.That(targetInstance.GetFieldValue <string>("instanceId"), Is.EqualTo("Instance1")); Assert.That(details.Method, Is.EqualTo(targetInstance.Type.FindMethodByName("Method")).Using(new ClrMethodEqualityComparer())); } }