コード例 #1
0
        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);
        }
コード例 #2
0
        public void VirtualInheritedDeeplyBound()
        {
            BaseClass1 simple = new SuperClass1();
            var        lambda = LambdaCompiler.Compile(simple, "foo()", true);
            var        result = lambda();

            Assert.AreEqual(77, result);
        }
コード例 #3
0
        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");
        }
コード例 #4
0
        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");
        }