public async Task ReturnFromTaskOnlyAfterAllEventsComplete() { var manager = new EventManager(); var super = new SuperClass1(); var firingOrder = new List <string>(); var tcs1 = new TaskCompletionSource <object>(); manager.Register <SuperClass1>(c => { firingOrder.Add("callback1"); return(tcs1.Task); }); manager.Register <SuperClass1>(c => { firingOrder.Add("callback2"); return(tcs1.Task); }); var t1 = manager.TriggerEvent(super).ContinueWith(t => firingOrder.Add("continue")); tcs1.SetResult(true); await t1; Assert.Equal(new[] { "callback1", "callback2", "continue" }, firingOrder); }
public void VirtualInheritedDeeplyBound() { BaseClass1 simple = new SuperClass1(); var lambda = LambdaCompiler.Compile(simple, "foo()", true); var result = lambda(); Assert.AreEqual(77, result); }
public async Task TriggerBaseClassRegistrationsFromSuperClass() { var manager = new EventManager(); var super = new SuperClass1(); bool callbackFired = false; manager.Register <BaseClass>(c => { callbackFired = true; Assert.Equal(super, c); return(Task.CompletedTask); }); await manager.TriggerEvent(super); Assert.True(callbackFired, $"Callback for {nameof(BaseClass)} never called"); }
public async Task CallingDisposeRemovesCallback() { var manager = new EventManager(); var super = new SuperClass1(); bool callbackFired = false; var disposable = manager.Register <BaseClass>(c => { callbackFired = true; Assert.Equal(super, c); return(Task.CompletedTask); }); disposable.Dispose(); await manager.TriggerEvent(super); Assert.False(callbackFired, $"Callback for {nameof(BaseClass)} called incorrectly"); }