Пример #1
0
        public void DontMatchBinderFailed()
        {
            var         modelID            = "modelID";
            var         interruptModelName = "Interrupt";
            Model       senderModel        = null;
            IViewObject senderViewObject   = null;
            int         senderEventData    = 0;

            System.Type    recieverEventType    = null;
            ControllerInfo senderControllerInfo = null;
            var            eventInterrupter     = new EventInterrupter();

            var binderMap = new ModelViewBinderMap()
            {
                UseEventInterrupter = eventInterrupter
            };
            var binderInstanceMap = binderMap.CreateBinderInstaceMap();

            eventInterrupter.Add(new EventDispatchQuery(modelID, ""),
                                 (_binderInstanceMap, _interruptedData) =>
            {
                senderModel          = _interruptedData.SenderModel;
                senderViewObject     = _interruptedData.SenderViewObj;
                recieverEventType    = _interruptedData.EventType;
                senderEventData      = (int)_interruptedData.SendEventData;
                senderControllerInfo = _interruptedData.SenderControllerInfo;
                var interruptModel   = new Model()
                {
                    Name = interruptModelName
                };
                return(interruptModel, true);
            }
                                 );

            //run Test
            var interruptedData = EventInterruptedData.Create <ITestEventHandler>(
                new Model()
            {
                Name = modelID
            }
                , new EmptyViewObject()
            {
                UseBindInfo = new ModelViewBinder.BindInfo(typeof(EmptyViewObject))
            }
                , 100
                , new ControllerInfo(TestEventName.Test));

            Assert.Throws <UnityEngine.Assertions.AssertionException>(() =>
            {
                eventInterrupter.Interrupt(binderInstanceMap, interruptedData);
            }, "OnEventInterruptCallbackでModelを返した時、ModelViewBinderInstanceMapへ登録が失敗した時は例外を投げるようにしてください");
        }
Пример #2
0
        public void BasicPasses()
        {
            var         modelID            = "modelID";
            var         interruptModelName = "Interrupt";
            Model       senderModel        = null;
            IViewObject senderViewObject   = null;
            int         senderEventData    = 0;

            System.Type    recieverEventType    = null;
            ControllerInfo senderControllerInfo = null;
            var            eventInterrupter     = new EventInterrupter();

            var binderMap = new ModelViewBinderMap(null,
                                                   new ModelViewBinder("*", null))
            {
                UseEventInterrupter = eventInterrupter
            };
            var binderInstanceMap = binderMap.CreateBinderInstaceMap();

            eventInterrupter.Add(new EventDispatchQuery(modelID, ""),
                                 (_binderInstanceMap, _interruptedData) =>
            {
                senderModel          = _interruptedData.SenderModel;
                senderViewObject     = _interruptedData.SenderViewObj;
                recieverEventType    = _interruptedData.EventType;
                senderEventData      = (int)_interruptedData.SendEventData;
                senderControllerInfo = _interruptedData.SenderControllerInfo;
                var interruptModel   = new Model()
                {
                    Name = interruptModelName
                };
                return(interruptModel, false);
            }
                                 );

            //run Test
            var interruptedData = EventInterruptedData.Create <ITestEventHandler>(
                new Model()
            {
                Name = modelID
            }
                , new EmptyViewObject()
                , 100
                , new ControllerInfo(TestEventName.Test));

            interruptedData.SenderViewObj.Bind(interruptedData.SenderModel, new ModelViewBinder.BindInfo(typeof(EmptyViewObject)), null);

            Assert.IsTrue(eventInterrupter.DoMatch(interruptedData));
            var doSendImmediate = eventInterrupter.Interrupt(binderInstanceMap, interruptedData);

            Assert.IsFalse(doSendImmediate, $"設定したコールバックが返すdoSendImmediateと異なります");

            Debug.Log($"Success to EventInterrupter#Interrupt!!");

            {//設定したPredicateが実行されているか確認
                Assert.AreSame(interruptedData.SenderModel, senderModel);
                Assert.AreSame(interruptedData.SenderViewObj, senderViewObject);
                Assert.AreEqual(interruptedData.EventType, recieverEventType);
                Assert.AreEqual(interruptedData.SendEventData, senderEventData);
                Assert.AreSame(interruptedData.SenderControllerInfo, senderControllerInfo);
            }
            Debug.Log($"Success to Check EventInterrupter#Interrupt Callback!!");

            {//自動的にModelをModelViewBinderInstanceMapに登録しているか確認
                Assert.IsTrue(binderInstanceMap.BindInstances.Any(_b => _b.Value.Model.Name == interruptModelName));
                var interruptBinderInstace = binderInstanceMap.BindInstances.Values.First(_b => _b.Model.Name == interruptModelName);

                Assert.IsTrue(interruptBinderInstace.HasEventInterruptedData);
                var holdInterruptedData = interruptBinderInstace.HoldedEventInterruptedData;
                Assert.AreSame(interruptedData.SenderModel, holdInterruptedData.SenderModel);
                Assert.AreSame(interruptedData.SenderViewObj, holdInterruptedData.SenderViewObj);
                Assert.AreEqual(interruptedData.EventType, holdInterruptedData.EventType);
                Assert.AreEqual(interruptedData.SendEventData, holdInterruptedData.SendEventData);
                Assert.AreSame(interruptedData.SenderControllerInfo, holdInterruptedData.SenderControllerInfo);
            }

            Debug.Log($"Success to Add Created Model in Interrupt Callback to BinderInstanceMap!!");
        }