Esempio n. 1
0
        public void NewInputModalityEvent(ModalityEvent modalityAction)
        {
            Actions.Add(modalityAction);

            List<EffectTrigger> matchingTriggers = SearchTriggers(modalityAction);
            TriggerEffects(matchingTriggers);
        }
Esempio n. 2
0
        public void HasEventTest()
        {
            EffectTrigger target = new EffectTrigger();

            ModalityEvent modalityEvent = new ModalityEvent();
            modalityEvent.Type = ActionType.HAND_SWIPE_LEFT;

            target.Triggers.Add(modalityEvent);
            
            ModalityEvent newModalityEvent = new ModalityEvent();
            newModalityEvent.Type = ActionType.HAND_SWIPE_LEFT;

            Assert.AreEqual(true, target.HasEvent(newModalityEvent));
        }
Esempio n. 3
0
        public List<EffectTrigger> SearchTriggers(ModalityEvent newModalityEvent)
        {
            List<EffectTrigger> results = new List<EffectTrigger>();

            foreach (var trigger in Triggers)
            {
                foreach (var modality in trigger.Triggers)
                {
                    if (trigger.HasEvent(modality))
                    {
                        trigger.SetNewEvent(newModalityEvent);

                        if(trigger.IsReadyToTrigger(ClockInstance.CurrentTimeInMillis()))
                        {
                            results.Add(trigger);
                        }
                    }
                }
            }

            return results;
        }
Esempio n. 4
0
        public void SetThreeEventsTriggerWithTimeWindowAndIsAbleToTriggerIncorrectTimeTest()
        {
            EffectTrigger target = new EffectTrigger();

            ModalityEvent modalityEvent1 = new ModalityEvent();
            modalityEvent1.Type = ActionType.HAND_SWIPE_LEFT;
            ModalityEvent modalityEvent2 = new ModalityEvent();
            modalityEvent2.Type = ActionType.HAND_SWIPE_RIGHT;
            ModalityEvent modalityEvent3 = new ModalityEvent();
            modalityEvent3.Type = ActionType.POSTURE_DIRECTION_KINECT;
            target.Triggers.Add(modalityEvent1);
            target.Triggers.Add(modalityEvent2);
            target.Triggers.Add(modalityEvent3);
            //Set the time windows constraint
            target.TimeWindow = 1500;

            ModalityEvent newModalityEvent1 = new ModalityEvent();
            newModalityEvent1.Type = ActionType.HAND_SWIPE_LEFT;
            newModalityEvent1.EventTime = 1000;
            ModalityEvent newModalityEvent2 = new ModalityEvent();
            newModalityEvent2.Type = ActionType.HAND_SWIPE_RIGHT;
            newModalityEvent2.EventTime = 1500;
            ModalityEvent newModalityEvent3 = new ModalityEvent();
            newModalityEvent3.Type = ActionType.POSTURE_DIRECTION_KINECT;
            newModalityEvent3.EventTime = 3000;

            Assert.AreEqual(true, target.HasEvent(newModalityEvent1));
            Assert.AreEqual(true, target.HasEvent(newModalityEvent2));
            Assert.AreEqual(true, target.HasEvent(newModalityEvent3));

            target.SetNewEvent(newModalityEvent1);
            Assert.AreEqual(false, target.IsReadyToTrigger(1001));

            target.SetNewEvent(newModalityEvent2);
            Assert.AreEqual(false, target.IsReadyToTrigger(1550));

            target.SetNewEvent(newModalityEvent3);
            Assert.AreEqual(false, target.IsReadyToTrigger(3001));
        }
Esempio n. 5
0
        public void NewEventUpdateTimeAndStateTest()
        {
            EffectTrigger target = new EffectTrigger();

            ModalityEvent modalityEvent = new ModalityEvent();
            modalityEvent.Type = ActionType.HAND_SWIPE_LEFT;
            target.Triggers.Add(modalityEvent);

            ModalityEvent newModalityEvent = new ModalityEvent();
            newModalityEvent.Type = ActionType.HAND_SWIPE_LEFT;
            newModalityEvent.EventTime = 1000;
            target.SetNewEvent(newModalityEvent);

            Assert.AreEqual(target.Triggers[0].EventTime, 1000);

            newModalityEvent = new ModalityEvent();
            newModalityEvent.Type = ActionType.HAND_SWIPE_LEFT;
            newModalityEvent.EventTime = 2500;
            target.SetNewEvent(newModalityEvent);

            Assert.AreEqual(target.Triggers[0].EventTime, 2500);
        }
Esempio n. 6
0
        public void SetTwoEventTriggerWithTimeWindowAndIsNotAbleToTriggerOnIncorrectTimeTest()
        {
            EffectTrigger target = new EffectTrigger();

            ModalityEvent modalityEvent1 = new ModalityEvent();
            modalityEvent1.Type = ActionType.HAND_SWIPE_LEFT;
            ModalityEvent modalityEvent2 = new ModalityEvent();
            modalityEvent2.Type = ActionType.HAND_SWIPE_RIGHT;
            target.Triggers.Add(modalityEvent1);
            target.Triggers.Add(modalityEvent2);
            //Set the time windows constraint
            target.TimeWindow = 2000;

            ModalityEvent newModalityEvent1 = new ModalityEvent();
            newModalityEvent1.Type = ActionType.HAND_SWIPE_LEFT;
            newModalityEvent1.EventTime = 1000;
            ModalityEvent newModalityEvent2 = new ModalityEvent();
            newModalityEvent2.Type = ActionType.HAND_SWIPE_RIGHT;
            newModalityEvent2.EventTime = 3001;

            Assert.AreEqual(true, target.HasEvent(newModalityEvent1));
            Assert.AreEqual(true, target.HasEvent(newModalityEvent2));

            target.SetNewEvent(newModalityEvent1);
            Assert.AreEqual(false, target.IsReadyToTrigger(1001));

            target.SetNewEvent(newModalityEvent2);
            Assert.AreEqual(false, target.IsReadyToTrigger(3002));
        }
Esempio n. 7
0
        public void SetTwoEventsTriggerAndIsNotAbleToTrigger()
        {
            EffectTrigger target = new EffectTrigger();

            ModalityEvent modalityEvent1 = new ModalityEvent();
            modalityEvent1.Type = ActionType.HAND_SWIPE_LEFT;
            ModalityEvent modalityEvent2 = new ModalityEvent();
            modalityEvent2.Type = ActionType.HAND_SWIPE_RIGHT;
            target.Triggers.Add(modalityEvent1);
            target.Triggers.Add(modalityEvent2);

            ModalityEvent newModalityEvent1 = new ModalityEvent();
            newModalityEvent1.Type = ActionType.HAND_SWIPE_LEFT;
            ModalityEvent newModalityEvent2 = new ModalityEvent();
            newModalityEvent2.Type = ActionType.SPEECH_NEXT;

            Assert.AreEqual(true, target.HasEvent(newModalityEvent1));
            Assert.AreEqual(false, target.HasEvent(newModalityEvent2));

            target.SetNewEvent(newModalityEvent1);
            Assert.AreEqual(false, target.IsReadyToTrigger(0));

            target.SetNewEvent(newModalityEvent2);
            Assert.AreEqual(false, target.IsReadyToTrigger(0));
        }
Esempio n. 8
0
        public void SetOneEventTriggerAndIsNotAbleToTrigger()
        {
            EffectTrigger target = new EffectTrigger();

            ModalityEvent modalityEvent = new ModalityEvent();
            modalityEvent.Type = ActionType.HAND_SWIPE_LEFT;

            target.Triggers.Add(modalityEvent);

            ModalityEvent newModalityEvent = new ModalityEvent();
            newModalityEvent.Type = ActionType.HAND_SWIPE_RIGHT;

            Assert.AreEqual(false, target.HasEvent(newModalityEvent));
            target.SetNewEvent(newModalityEvent);

            Assert.AreEqual(false, target.IsReadyToTrigger(0));
        }
Esempio n. 9
0
        public void AddOneEffectTriggerAndTriggerIt()
        {
            MultimodalEngine target = new MultimodalEngine();

            ModalityEvent modalityEvent = new ModalityEvent();
            modalityEvent.Type = ActionType.HAND_SWIPE_LEFT;

            var effect = new Mock<IEffect>();

            //Define trigger with one input modality event that triggers one effect
            EffectTrigger effectTrigger = new EffectTrigger();
            effectTrigger.Effects.Add(effect.Object);
            effectTrigger.Triggers.Add(modalityEvent);

            target.addNewTrigger(effectTrigger);

            //Prepare future event
            ModalityEvent action = new ModalityEvent();
            action.Type = ActionType.HAND_SWIPE_LEFT;
            
            //trigger it
            target.NewInputModalityEvent(action);

            //Verify triggering
            effect.Verify(foo => foo.execute());
        }
Esempio n. 10
0
        public void AVoiceCommandShouldNotTriggerWithoutPostureDirectionTest()
        {
            var mock = new Mock<Clock>();
            var timeInMilliseconds = 0;
            mock.Setup(foo => foo.CurrentTimeInMillis())
                .Returns(() => timeInMilliseconds);

            MultimodalEngine target = new MultimodalEngine();
            target.ClockInstance = mock.Object;

            ModalityEvent modalityEvent1 = new ModalityEvent();
            modalityEvent1.Type = ActionType.POSTURE_DIRECTION_KINECT;

            ModalityEvent modalityEvent2 = new ModalityEvent();
            modalityEvent2.Type = ActionType.SPEECH_NEXT;

            var effect = new Mock<IEffect>();

            //Define trigger with one input modality event that triggers one effect
            EffectTrigger effectTrigger = new EffectTrigger();
            effectTrigger.Effects.Add(effect.Object);
            effectTrigger.Triggers.Add(modalityEvent1);
            effectTrigger.Triggers.Add(modalityEvent2);
            effectTrigger.TimeWindow = 1000;

            target.addNewTrigger(effectTrigger);

            ModalityEvent action2 = new ModalityEvent();
            action2.Type = ActionType.SPEECH_NEXT;
            action2.EventTime = 1500;

            timeInMilliseconds = 1600;
            target.NewInputModalityEvent(action2);

            effect.Verify(foo => foo.execute(), Times.Never());
        }
Esempio n. 11
0
        public void AddComposedTriggerEffectAndDontTriggerItWithTimeContrainst()
        {
            var mock = new Mock<Clock>();
            var timeInMilliseconds = 0;
            mock.Setup(foo => foo.CurrentTimeInMillis())
                .Returns(() => timeInMilliseconds);

            MultimodalEngine target = new MultimodalEngine();
            target.ClockInstance = mock.Object;

            ModalityEvent modalityEvent1 = new ModalityEvent();
            modalityEvent1.Type = ActionType.HAND_SWIPE_LEFT;

            ModalityEvent modalityEvent2 = new ModalityEvent();
            modalityEvent2.Type = ActionType.HAND_SWIPE_RIGHT;

            var effect = new Mock<IEffect>();

            //Define trigger with one input modality event that triggers one effect
            EffectTrigger effectTrigger = new EffectTrigger();
            effectTrigger.Effects.Add(effect.Object);
            effectTrigger.Triggers.Add(modalityEvent1);
            effectTrigger.Triggers.Add(modalityEvent2);
            effectTrigger.TimeWindow = 1000;

            target.addNewTrigger(effectTrigger);

            //Prepare future event1
            ModalityEvent action1 = new ModalityEvent();
            action1.Type = ActionType.HAND_SWIPE_LEFT;
            action1.EventTime = 1000;

            timeInMilliseconds = 1001;
            target.NewInputModalityEvent(action1);

            //Was not trigger yet
            effect.Verify(foo => foo.execute(), Times.Never());

            //Prepare future event2
            ModalityEvent action2 = new ModalityEvent();
            action2.Type = ActionType.HAND_SWIPE_RIGHT;
            action2.EventTime = 3001;

            timeInMilliseconds = 3001;
            target.NewInputModalityEvent(action2);

            effect.Verify(foo => foo.execute(), Times.Never());
        }
Esempio n. 12
0
        public void AddOneEffectTriggerAndDontTriggerItTimeHasPassed()
        {
            var mock = new Mock<Clock>();
            var timeInMilliseconds = 0;
            mock.Setup(foo => foo.CurrentTimeInMillis())
                .Returns(() => timeInMilliseconds);

            MultimodalEngine target = new MultimodalEngine();
            target.ClockInstance = mock.Object;

            ModalityEvent modalityEvent = new ModalityEvent();
            modalityEvent.Type = ActionType.HAND_SWIPE_LEFT;

            var effect = new Mock<IEffect>();

            //Define trigger with one input modality event that triggers one effect
            EffectTrigger effectTrigger = new EffectTrigger();
            effectTrigger.Effects.Add(effect.Object);
            effectTrigger.Triggers.Add(modalityEvent);
            effectTrigger.TimeWindow = 1000;

            target.addNewTrigger(effectTrigger);

            //Prepare future event
            ModalityEvent action = new ModalityEvent();
            action.Type = ActionType.HAND_SWIPE_LEFT;
            action.EventTime = 1000;

            //trigger it
            timeInMilliseconds = 3000;
            target.NewInputModalityEvent(action);

            //Verify triggering
            effect.Verify(foo => foo.execute(), Times.Never());
        }
Esempio n. 13
0
        public void AddOneTriggerAndTriggersOnCorrectTimePassed()
        {            
            MultimodalEngine target = new MultimodalEngine();
            
            ModalityEvent modalityEvent = new ModalityEvent();
            modalityEvent.Type = ActionType.HAND_SWIPE_LEFT;

            var effect = new Mock<IEffect>();

            //Define trigger with one input modality event that triggers one effect
            EffectTrigger effectTrigger = new EffectTrigger();
            effectTrigger.Effects.Add(effect.Object);
            effectTrigger.Triggers.Add(modalityEvent);

            target.addNewTrigger(effectTrigger);

            //Prepare future event
            ModalityEvent action = new ModalityEvent();
            action.Type = ActionType.HAND_SWIPE_RIGHT;

            //add event
            target.NewInputModalityEvent(action);
        }
Esempio n. 14
0
        public void AddComposedTriggerEffectAndTriggerIt()
        {
            MultimodalEngine target = new MultimodalEngine();

            ModalityEvent modalityEvent1 = new ModalityEvent();
            modalityEvent1.Type = ActionType.HAND_SWIPE_LEFT;

            ModalityEvent modalityEvent2 = new ModalityEvent();
            modalityEvent2.Type = ActionType.HAND_SWIPE_RIGHT;

            var effect = new Mock<IEffect>();

            //Define trigger with one input modality event that triggers one effect
            EffectTrigger effectTrigger = new EffectTrigger();
            effectTrigger.Effects.Add(effect.Object);
            effectTrigger.Triggers.Add(modalityEvent1);
            effectTrigger.Triggers.Add(modalityEvent2);

            target.addNewTrigger(effectTrigger);

            //Prepare future event1
            ModalityEvent action1 = new ModalityEvent();
            action1.Type = ActionType.HAND_SWIPE_LEFT;
            action1.EventTime = 1000;

            target.NewInputModalityEvent(action1);

            //Was not trigger yet
            effect.Verify(foo => foo.execute(), Times.Never());

            //Prepare future event2
            ModalityEvent action2 = new ModalityEvent();
            action2.Type = ActionType.HAND_SWIPE_RIGHT;

            target.NewInputModalityEvent(action2);

            effect.Verify(foo => foo.execute());
        }