public void EventNameIsChangedOnInterfaceImplementation() { var classEmitter = new CustomClassEmitter(Scope, "EventNameIsChangedOnInterfaceImplementation", typeof(object), new[] { typeof(IInterfaceWithEvent) }, TypeAttributes.Public | TypeAttributes.Class, false); CustomEventEmitter eventEmitter = classEmitter.CreateInterfaceEventImplementation( typeof(IInterfaceWithEvent).GetEvent("Event", _declaredInstanceBindingFlags)); eventEmitter.AddMethod = classEmitter.CreateInterfaceMethodImplementation( typeof(IInterfaceWithEvent).GetMethod("add_Event", _declaredInstanceBindingFlags)); eventEmitter.AddMethod.AddStatement(new ReturnStatement()); eventEmitter.RemoveMethod = classEmitter.CreateInterfaceMethodImplementation( typeof(IInterfaceWithEvent).GetMethod("remove_Event", _declaredInstanceBindingFlags)); eventEmitter.RemoveMethod.AddStatement(new ReturnStatement()); Type builtType = classEmitter.BuildType(); Assert.That(builtType.GetEvent("Event"), Is.Null); Assert.That(builtType.GetEvent(typeof(IInterfaceWithEvent).FullName + ".Event", _declaredInstanceBindingFlags), Is.Not.Null); }
public void ImplementingSimpleMembersOfOpenGenericInterface() { CustomClassEmitter classEmitter = new CustomClassEmitter( Scope, "ImplementingSimpleMembersOfOpenGenericInterface", typeof(object), new Type[] { typeof(GenericInterfaceWithAllKindsOfMembers <int>) }, TypeAttributes.Public | TypeAttributes.Class, false); MethodInfo baseMethod = typeof(GenericInterfaceWithAllKindsOfMembers <int>).GetMethod("Method"); var overriddenMethod = classEmitter.CreateInterfaceMethodImplementation(baseMethod); overriddenMethod.AddStatement(new ReturnStatement()); PropertyInfo baseProperty = typeof(GenericInterfaceWithAllKindsOfMembers <int>).GetProperty("Property"); CustomPropertyEmitter overriddenProperty = classEmitter.CreateInterfacePropertyImplementation(baseProperty); overriddenProperty.GetMethod = classEmitter.CreateInterfaceMethodImplementation(baseProperty.GetGetMethod()); overriddenProperty.GetMethod.AddStatement(new ReturnStatement(new ConstReference(13))); EventInfo baseEvent = typeof(GenericInterfaceWithAllKindsOfMembers <int>).GetEvent("Event"); CustomEventEmitter overriddenEvent = classEmitter.CreateInterfaceEventImplementation(baseEvent); overriddenEvent.AddMethod = classEmitter.CreateInterfaceMethodImplementation(baseEvent.GetAddMethod()); overriddenEvent.AddMethod.AddStatement(new ReturnStatement()); overriddenEvent.RemoveMethod = classEmitter.CreateInterfaceMethodImplementation(baseEvent.GetRemoveMethod()); overriddenEvent.RemoveMethod.AddStatement(new ReturnStatement()); Type builtType = classEmitter.BuildType(); GenericInterfaceWithAllKindsOfMembers <int> instance = (GenericInterfaceWithAllKindsOfMembers <int>)Activator.CreateInstance(builtType); instance.Method(7); Assert.That(instance.Property, Is.EqualTo(13)); instance.Event += delegate { return(0); }; instance.Event -= delegate { return(0); }; }
public void CreateInterfaceEventImplementation() { var classEmitter = new CustomClassEmitter(Scope, "CreateInterfaceEventImplementation", typeof(object), new[] { typeof(IInterfaceWithEvent) }, TypeAttributes.Public | TypeAttributes.Class, false); CustomEventEmitter eventEmitter = classEmitter.CreateInterfaceEventImplementation( typeof(IInterfaceWithEvent).GetEvent("Event", _declaredInstanceBindingFlags)); eventEmitter.AddMethod = classEmitter.CreateInterfaceMethodImplementation( typeof(IInterfaceWithEvent).GetMethod("add_Event", _declaredInstanceBindingFlags)); eventEmitter.AddMethod.AddStatement(new ReturnStatement()); eventEmitter.RemoveMethod = classEmitter.CreateInterfaceMethodImplementation( typeof(IInterfaceWithEvent).GetMethod("remove_Event", _declaredInstanceBindingFlags)); eventEmitter.RemoveMethod.AddStatement(new ReturnStatement()); Type builtType = classEmitter.BuildType(); var instance = (IInterfaceWithEvent)Activator.CreateInstance(builtType); EventHandler eventHandler = delegate { }; instance.Event += eventHandler; instance.Event -= eventHandler; }