private static WeakReference AttachToManager(Dummy.EventManager manager, EventHandler <Dummy.TestObjectEvtWithIntEventArgs> cb) { var obj = new Dummy.TestObject(); manager.SetEmitter(obj); obj.EvtWithIntEvent += cb; return(new WeakReference(obj)); }
public static void test_event_from_c_owned_wrapper() { // Set upon object instantiation WeakReference wref = null; // Checks in the callback called bool callbackCalled = false; int received = -1; // attach to evt with int EventHandler <Dummy.TestObjectEvtWithIntEventArgs> cb = (object sender, Dummy.TestObjectEvtWithIntEventArgs args) => { callbackCalled = true; received = args.Arg; Test.Assert(Object.ReferenceEquals(sender, wref.Target)); }; Dummy.EventManager manager = new Dummy.EventManager(); wref = AttachToManager(manager, cb); Test.CollectAndIterate(); manager.EmitWithInt(42); Test.CollectAndIterate(); Test.Assert(callbackCalled, "Callback must have been called."); Test.AssertEquals(42, received, "Wrong value received."); // Cleanup checks manager.Release(); // Make sure the released wrapper is collected and release the Eo object Test.CollectAndIterate(); Test.AssertNull(wref.Target); manager.Dispose(); }