public void AddEvents_UsingBuiltinImplementation_Standard() { // create the type ClassDefinition classDefinition = new ClassDefinition("MyClass"); classDefinition.AddModule(new TestModule_AddEvent_UsingBuiltinImplementation_Standard()); Type classType = CodeGenEngine.CreateClass(classDefinition); Assert.NotNull(classType); Assert.Equal(typeof(object), classType.BaseType); Assert.Equal("MyClass", classType.Name); // instantiate the type dynamic obj = Activator.CreateInstance(classType); Assert.NotNull(obj); // event type: System.EventHandler EventHandler handler1 = (sender, e) => { Assert.Same(obj, sender); Assert.Same(EventArgs.Empty, e); }; obj.NonGeneric += handler1; obj.OnNonGeneric(); obj.NonGeneric -= handler1; // event type: System.EventHandler<T> with T == System.EventArgs EventHandler <EventArgs> handler2 = (sender, e) => { Assert.Same(obj, sender); Assert.Same(EventArgs.Empty, e); }; obj.GenericBasic += handler2; obj.OnGenericBasic(); obj.GenericBasic -= handler2; // event type: System.EventHandler<T> with T derived from System.EventArgs SpecializedEventArgs e3 = new SpecializedEventArgs(); EventHandler <SpecializedEventArgs> handler3 = (sender, e) => { Assert.Same(obj, sender); Assert.Same(e3, e); }; obj.GenericSpecialized += handler3; obj.OnGenericSpecialized(e3); obj.GenericSpecialized -= handler3; // event type: custom delegate type SpecialDelegateEventHandler handler4 = (s, x) => { Assert.Equal("test", s); Assert.Equal(42, x); }; obj.Special += handler4; obj.OnSpecial("test", 42); obj.Special -= handler4; }
public void AddStaticEvent_UsingBuiltinImplementation_Standard() { // create the type ClassDefinition classDefinition = new ClassDefinition("MyClass"); classDefinition.AddModule(new TestModule_AddStaticEvent_UsingBuiltinImplementation_Standard()); Type classType = CodeGenEngine.CreateClass(classDefinition); Assert.NotNull(classType); Assert.Equal(typeof(object), classType.BaseType); Assert.Equal("MyClass", classType.Name); // event type: System.EventHandler // ---------------------------------------------------------------------------------- EventHandler handler1 = (sender, e) => { Assert.Null(sender); Assert.Same(EventArgs.Empty, e); }; EventInfo eventInfo1 = classType.GetEvent("NonGeneric"); eventInfo1.AddEventHandler(null, handler1); MethodInfo eventRaiser1 = classType.GetMethod("OnNonGeneric"); eventRaiser1.Invoke(null, Type.EmptyTypes); eventInfo1.RemoveEventHandler(null, handler1); // event type: System.EventHandler<T> with T == System.EventArgs // ---------------------------------------------------------------------------------- EventHandler <EventArgs> handler2 = (sender, e) => { Assert.Null(sender); Assert.Same(EventArgs.Empty, e); }; EventInfo eventInfo2 = classType.GetEvent("GenericBasic"); eventInfo2.AddEventHandler(null, handler2); MethodInfo eventRaiser2 = classType.GetMethod("OnGenericBasic"); eventRaiser2.Invoke(null, Type.EmptyTypes); eventInfo2.RemoveEventHandler(null, handler2); // event type: System.EventHandler<T> with T derived from System.EventArgs // ---------------------------------------------------------------------------------- SpecializedEventArgs e3 = new SpecializedEventArgs(); EventHandler <SpecializedEventArgs> handler3 = (sender, e) => { Assert.Null(sender); Assert.Same(e3, e); }; EventInfo eventInfo3 = classType.GetEvent("GenericSpecialized"); eventInfo3.AddEventHandler(null, handler3); MethodInfo eventRaiser3 = classType.GetMethod("OnGenericSpecialized"); eventRaiser3.Invoke(null, new object[] { e3 }); eventInfo3.RemoveEventHandler(null, handler3); // event type: custom delegate type // ---------------------------------------------------------------------------------- SpecialDelegateEventHandler handler4 = (s, x) => { Assert.Equal("test", s); Assert.Equal(42, x); }; EventInfo eventInfo4 = classType.GetEvent("Special"); eventInfo4.AddEventHandler(null, handler4); MethodInfo eventRaiser4 = classType.GetMethod("OnSpecial"); eventRaiser4.Invoke(null, new object[] { "test", 42 }); eventInfo4.RemoveEventHandler(null, handler4); }