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 IClrObjectWrapperTypeIsNotEqualToAnother(string fieldA, string fieldB)
 {
     if (fieldA == fieldB)
     {
         return;                   // Handled by the other test.
     }
     using (var scope = await HeapAnalysisScope.Create())
     {
         var wrapperA = scope.Subject.GetFieldValue <IClrObject>(fieldA);
         var wrapperB = scope.Subject.GetFieldValue <IClrObject>(fieldB);
         Assert.That(wrapperA, Is.Not.EqualTo(wrapperB));
     }
 }
Exemple #3
0
 public async Task CanReadStructType()
 {
     using (var scope = await HeapAnalysisScope.Create())
     {
         // Field type is Object, but the value is a boxed struct. We will get a ClrStructObject even
         // though, statically, the field should yield a ClrReferenceObject.
         var value = scope.Subject.GetFieldValue <IClrObject>("StructTypeAsObjectField");
         Assert.That(value.Type.CanBeAssignedTo <HeapAnalysisTarget.Program.StructType>());
         var actual = value.CastAs <ClrStructObject>();
         Assert.That(actual.GetFieldValue <string>("StringField"), Is.EqualTo("StructTypeAsObjectField.StringField"));
         Assert.That(actual.GetFieldValue <int>("IntegerField"), Is.EqualTo(42));
     }
 }
        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()));
            }
        }
Exemple #5
0
        public async Task CanReadStructArray()
        {
            using (var scope = await HeapAnalysisScope.Create())
            {
                var array = scope.Subject.GetFieldValue <ClrArrayObject>("StructArray");
                Assert.That(array.Length, Is.EqualTo(2));
                var elements = array.AsEnumerable <ClrStructObject>().Select(Composite.ReadFrom);

                Assert.That(elements, Is.EqualTo(new [] {
                    new Composite {
                        StringField = "StructArray.One", IntegerField = 10
                    },
                    new Composite {
                        StringField = "StructArray.Two", IntegerField = 20
                    }
                }));
            }
        }