Ejemplo n.º 1
0
        public void CanSubscribeAndUnsubscribeObserver()
        {
            TestState testObj = new TestState();

            TestState.EventSubscriberCB cb1 = (List <TestStateChangeEvent> changeEventList) =>
            {
            };

            TestState.EventSubscriberCB cb2 = (List <TestStateChangeEvent> changeEventList) =>
            {
            };

            // case 1 register
            testObj.Subscribe(cb1, TestStateChangeEvent.INT_EVT);
            testObj.Subscribe(cb2, TestStateChangeEvent.CON_EVT);
            Assert.True(testObj.IsObservingEventID(TestStateChangeEvent.INT_EVT));
            Assert.True(testObj.IsSubscribedCB(cb1));
            Assert.True(testObj.IsObservingEventID(TestStateChangeEvent.CON_EVT));
            Assert.True(testObj.IsSubscribedCB(cb2));

            // case 2 unregister alias with wrong cb
            testObj.Unsubscribe(cb2, TestStateChangeEvent.INT_EVT);
            Assert.True(testObj.IsObservingEventID(TestStateChangeEvent.INT_EVT));
            Assert.True(testObj.IsSubscribedCB(cb1));

            // case 3 unregister alias with wrong alias
            testObj.Unsubscribe(cb1, TestStateChangeEvent.WIS_EVT);
            Assert.True(testObj.IsObservingEventID(TestStateChangeEvent.INT_EVT));
            Assert.True(testObj.IsSubscribedCB(cb1));

            // case 4 unregister successfully
            testObj.Unsubscribe(cb1, TestStateChangeEvent.INT_EVT);
            Assert.False(testObj.IsObservingEventID(TestStateChangeEvent.INT_EVT));
            Assert.False(testObj.IsSubscribedCB(cb1));
        }
Ejemplo n.º 2
0
        public void CanObservePropertyChanges()
        {
            int numStrDexEventReceived = 0;

            TestState testObj = new TestState();

            // This subscriber only concerns itself with changes in STR and DEX.
            TestState.EventSubscriberCB strDexCb = (List <TestStateChangeEvent> changeEventList) =>
            {
                Assert.AreEqual(2, changeEventList.Count);
                AssertIsContainsEvent(changeEventList, TestStateChangeEvent.STR_EVT, 1);
                AssertIsContainsEvent(changeEventList, TestStateChangeEvent.DEX_EVT, 1);
                AssertIsContainsEvent(changeEventList, TestStateChangeEvent.INT_EVT, 0);
                AssertIsContainsEvent(changeEventList, TestStateChangeEvent.WIS_EVT, 0);
                AssertIsContainsEvent(changeEventList, TestStateChangeEvent.CON_EVT, 0);

                Assert.AreEqual(10, testObj.Strength);
                Assert.AreEqual(5, testObj.Dexterity);

                numStrDexEventReceived++;
            };

            testObj.Subscribe(strDexCb, TestStateChangeEvent.STR_EVT, TestStateChangeEvent.DEX_EVT);

            // This subscriber only conerns itself with changes in INT.
            int numIntEventReceived = 0;

            TestState.EventSubscriberCB intCb = (List <TestStateChangeEvent> changeEventList) =>
            {
                Assert.AreEqual(2, changeEventList.Count);
                AssertIsContainsEvent(changeEventList, TestStateChangeEvent.STR_EVT, 0);
                AssertIsContainsEvent(changeEventList, TestStateChangeEvent.DEX_EVT, 0);
                AssertIsContainsEvent(changeEventList, TestStateChangeEvent.INT_EVT, 2);
                AssertIsContainsEvent(changeEventList, TestStateChangeEvent.WIS_EVT, 0);
                AssertIsContainsEvent(changeEventList, TestStateChangeEvent.CON_EVT, 0);

                // only stable state is observed.
                Assert.AreEqual(10, testObj.Intelligence);

                numIntEventReceived++;
            };

            testObj.Subscribe(intCb, TestStateChangeEvent.INT_EVT);

            // This subscriber only concerns intself with changes in CON.
            int numConEventReceived = 0;

            TestState.EventSubscriberCB conCb = (List <TestStateChangeEvent> changeEventList) =>
            {
                numConEventReceived++;
            };
            testObj.Subscribe(conCb, TestStateChangeEvent.CON_EVT);

            // make the changes
            testObj.Strength      = 10;
            testObj.Dexterity     = 5;
            testObj.Intelligence  = 8;
            testObj.Intelligence += 2;

            Assert.IsTrue(testObj.HasUnpublishedChanges);
            testObj.Publish();

            // when a subscriber subscribes to more than 1 propertyAlias and both of them were triggered, only 1 event was received.
            Assert.AreEqual(1, numStrDexEventReceived);
            Assert.AreEqual(1, numIntEventReceived);
            // when a subscriber subscribes to a propertyAlias that was not triggered, no event was received.
            Assert.AreEqual(0, numConEventReceived);
            // All unpublished changes should be published.
            Assert.IsFalse(testObj.HasUnpublishedChanges);
        }