예제 #1
0
        public void RaiseTest_1()
        {
            // Setup and constants
            String name = "event0";
            IEvent ev   = new Event(name);

            Boolean           activated1  = false;
            ActivatorCallback onactivate1 = (self, signal) =>
            {
                activated1 = true;
            };
            Boolean           activated2  = false;
            ActivatorCallback onactivate2 = (self, signal) =>
            {
                activated2 = true;
            };

            // Test proper
            IActivator sub1 = ev.Subscribe(onactivate1);
            IActivator sub2 = ev.Subscribe(onactivate2);

            sub1.SelfActivate = true;
            sub1.Raise();

            // Assertions
            Assert.NotEqual(sub1.Name, sub2.Name);
            Assert.True(activated1);
            Assert.True(activated2);
        }
예제 #2
0
        public void SubscriptionTest_1()
        {
            // Setup and constants
            String name = "event0"; // no relation to the video game
            IEvent ev   = new Event(name);

            Boolean           activated1  = false;
            Boolean           disposed1   = false;
            ActivatorCallback onactivate1 = (self, signal) =>
            {
                activated1 = true;
            };
            Action <IActivator> onunsub1 = (self) =>
            {
                disposed1 = true;
            };

            // Test proper
            IActivator sub1 = ev.Subscribe(onactivate1);

            sub1.SelfActivate  = true;
            sub1.OnUnsubscribe = onunsub1;
            sub1.Raise();
            sub1.Unsubscribe();

            // Assertions
            Assert.True(activated1);
            Assert.True(disposed1);
        }
예제 #3
0
        public void BlockTest_1()
        {
            // Setup and constants
            String name = "event0";
            IEvent ev   = new Event(name);

            Boolean           activated1  = false;
            ActivatorCallback onactivate1 = (self, signal) =>
            {
                activated1 = self.Blocking;
            };
            Boolean           activated2  = false;
            ActivatorCallback onactivate2 = (self, signal) =>
            {
                activated2 = true;
            };

            // Test proper
            IActivator sub1 = ev.Subscribe(onactivate1);
            IActivator sub2 = ev.Subscribe(onactivate2);

            sub1.SelfActivate = false; // sub1 blocking should always make sub1 get the signal.
            sub1.Block();
            sub1.Raise();

            // Assertions
            Assert.NotEqual(sub1.Name, sub2.Name);
            Assert.True(activated1);
            Assert.False(activated2);
        }
예제 #4
0
        public IActivator Subscribe(ActivatorCallback callback)
        {
            var config = new SubscriptionConfiguration()
            {
                OnActivate = callback,
            };

            return(this.Subscribe(config));
        }
예제 #5
0
        public IActivator Intercept(ActivatorCallback callback)
        {
            ActivatorCallback cb = (self, signal) =>
            {
                if (self.Blocking)
                {
                    self.Unblock();
                }
                else
                {
                    self.Block();
                    callback.Invoke(self, signal);
                }
            };
            var activator = this.Subscribe(cb);

            return(activator);
        }
예제 #6
0
        public IActivator Intercept(EventScope scope, String callNext, ActivatorCallback callback)
        {
            ActivatorCallback cb = (self, signal) =>
            {
                if (self.Blocking)
                {
                    self.Unblock();
                }
                else
                {
                    self.Block();
                    callback.Invoke(self, signal);
                    scope.Raise(callNext);
                }
            };
            var activator = this.Subscribe(cb);

            return(activator);
        }
예제 #7
0
        public void RaiseTest_2()
        {
            // Setup and constants
            String name = "event0";
            IEvent ev   = new Event(name);

            String         message_name    = "message";
            Boolean        message_content = true;
            IDataContainer data            = new DataContainer();

            data.Set(message_name, message_content);

            Boolean           activated1  = false;
            ActivatorCallback onactivate1 = (self, signal) =>
            {
                activated1 = true;
            };
            Boolean           activated2  = false;
            ActivatorCallback onactivate2 = (self, signal) =>
            {
                signal.AssertData <Boolean>(message_name);

                activated2 = signal.GetData <Boolean>(message_name).Value;
            };

            // Test proper
            IActivator sub1 = ev.Subscribe(onactivate1);
            IActivator sub2 = ev.Subscribe(onactivate2);

            sub1.SelfActivate = true;
            sub1.Raise(data);

            // Assertions
            Assert.NotEqual(sub1.Name, sub2.Name);
            Assert.True(activated1);
            Assert.True(activated2);
        }