public void GetEmittableMethod_MethodBuilder() { var method = ReflectionObjectMother.GetSomeMethod(); var emittableMethod = ReflectionEmitObjectMother.CreateMethodBuilder(); Assert.That(emittableMethod.GetGenericArguments(), Is.Null); _innerMock.Stub(stub => stub.GetEmittableMethod(method)).Return(emittableMethod); _typeAnalyzerMock.Stub(stub => stub.IsStrongNamed(emittableMethod.DeclaringType)).Return(true); Assert.That(() => _decorator.GetEmittableMethod(method), Throws.Nothing); }
public void GetEmittableMethod_MethodBuilder() { var method = ReflectionObjectMother.GetSomeMethod(); var emittableMethod = ReflectionEmitObjectMother.CreateMethodBuilder(); #if NETFRAMEWORK // MethodBuilder in .NET Framework returns null for non-generic types. // MethodInfo returns empty, same as MethodInfo and MethodBuilder do in .NET 5. Assert.That(emittableMethod.GetGenericArguments(), Is.Null); #else Assert.That(emittableMethod.GetGenericArguments(), Is.Empty); #endif _innerMock.Setup(stub => stub.GetEmittableMethod(method)).Returns(emittableMethod); _typeAnalyzerMock.Setup(stub => stub.IsStrongNamed(emittableMethod.DeclaringType)).Returns(true); Assert.That(() => _decorator.GetEmittableMethod(method), Throws.Nothing); }
public void GetEmittableXXX_MembersFromTypeInstantiation() { var instantiation = typeof(List <>).MakeTypePipeGenericType(_mutableType); var field = instantiation.GetField("_size", BindingFlags.NonPublic | BindingFlags.Instance); var ctor = instantiation.GetConstructor(Type.EmptyTypes); var method = instantiation.GetMethod("Add"); var emittableType = ReflectionEmitObjectMother.GetSomeTypeBuilder(); _provider.AddMapping(_mutableType, emittableType); var emittableField = _provider.GetEmittableField(field); var emittableCtor = _provider.GetEmittableConstructor(ctor); var emittableMethod = _provider.GetEmittableMethod(method); CheckEmittableMemberInstantiation(emittableField, emittableType); CheckEmittableMemberInstantiation(emittableCtor, emittableType); CheckEmittableMemberInstantiation(emittableMethod, emittableType); }