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へ登録が失敗した時は例外を投げるようにしてください"); }
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!!"); }