public void RemoveHandlerOnSend()
        {
            var recorder  = new Recorder();
            var entity    = new TestEntity();
            var delegateA = new ESHandler <int>(i => { recorder.Record("A", i); });
            var delegateB = new ESHandler <TestEntity, char>((a, b) => {
                recorder.Record("B", a, b);
                Storage.On(a).Remove(delegateA);
            });

            Storage.On(entity).Add(delegateA);
            Storage.On(entity).Add(delegateB);
            Storage.On(entity).Send(1);
            Storage.On(entity).Send('t');
            recorder.Verify("A", 1);
            recorder.Verify("B", entity, 't');
            Assert.AreEqual(1, Storage.On(entity).Count);
        }
        public void ReceiverMethodReference()
        {
            var receiver  = new TestReceiver();
            var entity    = new TestEntity();
            var delegateA = new ESHandler <int>(receiver.IntReceive);
            var delegateB = new ESHandler <TestEntity, char>(receiver.CharReceive);

            Storage.On(entity).Add(delegateA);
            Storage.On(entity).Add(delegateB);
            Assert.AreEqual(2, Storage.On(entity).Count);

            Storage.On(entity).Send(1);
            Storage.On(entity).Send('t');
            receiver.Verify("IntReceive", 1);
            receiver.Verify("CharReceive", entity, 't');

            Storage.On(entity).Remove(delegateA);
            Storage.On(entity).Remove(delegateB);
            Assert.AreEqual(0, Storage.On(entity).Count);
        }
        public void DynamicAddHandlerOnSend()
        {
            var recorder  = new Recorder();
            var entity    = new TestEntity();
            var delegateA = new ESHandler <int>(i => { recorder.Record("A", i); });
            var delegateB = new ESHandler <TestEntity, char>((a, b) => {
                recorder.Record("B", a, b);
                Storage.On <TestEntity>().Add(delegateA);
            });

            Storage.On <TestEntity>().Add(delegateB);
            Storage.On(entity).Send(1);
            Storage.On(entity).Send('t');
            recorder.Never("A");
            recorder.Verify("B", entity, 't');
            Assert.AreEqual(2, Storage.On <TestEntity>().Count);

            Storage.On(entity).Send(42);
            recorder.Verify("A", 42);
        }
 public void Remove <TSignal>(ESHandler <TEntity, TSignal> signalHandler)
 {
     RemoveHandlers(signalHandler);
 }
 public void Add <TSignal>(ESHandler <TEntity, TSignal> signalHandler)
 {
     AddHandlers(new HandlerDelegate(typeof(TSignal), signalHandler.GetInvoker(), signalHandler));
 }