Ejemplo n.º 1
0
        public void TestOnStart()
        {
            _changeLedAsyncCount = 0;
            _changeLedCount      = 0;
            _bumpEventCount      = 0;

            Mock <IRobotMessenger> robotMessengerMock = new Mock <IRobotMessenger>();
            UnitTestExampleSkill   moqExampleSkill    = new UnitTestExampleSkill();

            IBumpSensorEvent bumpEvent1 = new BumpSensorEvent
            {
                EventId        = 1,
                IsContacted    = true,
                SensorPosition = BumpSensorPosition.FrontRight
            };

            IBumpSensorEvent bumpEvent2 = new BumpSensorEvent
            {
                EventId        = 1,
                IsContacted    = false,
                SensorPosition = BumpSensorPosition.FrontRight
            };

            IRobotCommandResponse successfulActionResponse = new RobotCommandResponse
            {
                ResponseType = MessageType.ActionResponse,
                Status       = ResponseStatus.Success
            };

            //Add Wait mocks
            robotMessengerMock.SetupSequence
            (
                x => x.Wait
                (
                    It.IsAny <int>()
                )
            ).Returns(() =>
            {
                Task.WaitAll(Task.Delay(2000));
                return(true);
            }).Returns(() =>
            {
                Task.WaitAll(Task.Delay(1500));
                return(true);
            });

            //Setup mock to ensure Change LED Async has been called the appropriate amount of times
            robotMessengerMock.Setup
            (
                x => x.ChangeLEDAsync
                (
                    It.IsAny <uint>(),
                    It.IsAny <uint>(),
                    It.IsAny <uint>()
                )
            ).Returns(Task.Factory.StartNew(() =>
            {
                ++_changeLedAsyncCount;
                return(successfulActionResponse);
            }).AsAsyncOperation());

            //Setup mock to ensure Change LED has been called the appropriate amount of times
            robotMessengerMock.Setup
            (
                x => x.ChangeLED
                (
                    It.IsAny <uint>(),
                    It.IsAny <uint>(),
                    It.IsAny <uint>(),
                    It.IsAny <ProcessCommandResponse>()
                )
            ).Callback(() =>
            {
                ++_changeLedCount;
                moqExampleSkill.OnResponse(successfulActionResponse);
            });

            //Setup mock to ensure bump event is registered and has a properly structured callback
            robotMessengerMock.Setup
            (
                x => x.RegisterBumpSensorEvent
                (
                    It.IsAny <ProcessBumpSensorEventResponse>(), It.IsAny <int>(), It.IsAny <bool>(), It.IsAny <IList <BumpSensorValidation> >(), It.IsAny <string>(), null
                )
            ).Callback(() =>
            {
                ++_bumpEventCount;
                moqExampleSkill.BumpCallback(bumpEvent1);
                ++_bumpEventCount;
                Task.WaitAll(Task.Delay(2000));
                moqExampleSkill.BumpCallback(bumpEvent2);
            }
                       );

            //Load mock messenger into skill
            moqExampleSkill.LoadRobotConnection(robotMessengerMock.Object);

            //OnStart will trigger the skill's action
            //RegisterBumpSensorEvent will cause two simulated bump events to be fired when called
            moqExampleSkill.OnStart(this, null);

            //If my skill looped forever and I wanted to check data at intervals I might do this...
            //_ = Task.Run(() => moqExampleSkill.OnStart(this, null));
            //Task.WaitAll(Task.Delay(5000));

            //Test
            Assert.IsTrue(_bumpEventCount == 2);
            Assert.IsTrue(_changeLedAsyncCount == 1);
            Assert.IsTrue(_changeLedCount == 2);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Callback when an event is registered so we can setup simulated events
        /// Under development
        /// </summary>
        /// <param name="eventDetails"></param>
        /// <param name="command"></param>
        private void HandleEventRegistered(object sender, RegisterEventDetails details)
        {
            //TODO Use the event details to multi real register with specific filters
            var eventDetails = details.EventDetails;

            switch (eventDetails.EventType)
            {
            //Based on the event that was registered, then setup an event to be triggered when the commands come in
            case EventType.LocomotionCommand:
                _locomotionCommandEventDetails = eventDetails;
                break;

            case EventType.HaltCommand:
                _haltCommandEventDetails = eventDetails;
                break;

            case EventType.AudioPlayComplete:
                _audioPlayCompleteCommandEventDetails = eventDetails;
                break;

            //Record event id we registered under for manually managed events so we can send events under that id
            case EventType.TouchSensor:
                if (_capTouchRegistered)
                {
                    return;
                }
                _capTouchRegistered = true;
                //Startup Cap Touch events...
                _ = Task.Run(async() =>
                {
                    await Task.Delay(8000);
                    MockedRobot.TriggerRobotEvent(CapTouchEvent.GetMockEvent(true, CapTouchPosition.Chin, eventDetails.EventId));
                    await Task.Delay(1000);
                    MockedRobot.TriggerRobotEvent(CapTouchEvent.GetMockEvent(false, CapTouchPosition.Chin, eventDetails.EventId));

                    await Task.Delay(3000);
                    MockedRobot.TriggerRobotEvent(CapTouchEvent.GetMockEvent(true, CapTouchPosition.Chin, eventDetails.EventId));
                    await Task.Delay(1000);
                    MockedRobot.TriggerRobotEvent(CapTouchEvent.GetMockEvent(false, CapTouchPosition.Chin, eventDetails.EventId));
                });
                break;

            case EventType.KeyPhraseRecognized:
                if (_keyPhraseRecRegistered)
                {
                    return;
                }
                _keyPhraseRecRegistered = true;
                _ = Task.Run(async() =>
                {
                    await Task.Delay(5000);
                    if (_keyPhraseRecRunning)
                    {
                        MockedRobot.TriggerRobotEvent(new KeyPhraseRecognizedEvent(50, eventDetails.EventId));
                    }
                    await Task.Delay(7000);
                    if (_keyPhraseRecRunning)
                    {
                        MockedRobot.TriggerRobotEvent(new KeyPhraseRecognizedEvent(70, eventDetails.EventId));
                    }
                    await Task.Delay(5000);
                    if (_keyPhraseRecRunning)
                    {
                        MockedRobot.TriggerRobotEvent(new KeyPhraseRecognizedEvent(80, eventDetails.EventId));
                    }
                    await Task.Delay(4000);
                    if (_keyPhraseRecRunning)
                    {
                        MockedRobot.TriggerRobotEvent(new KeyPhraseRecognizedEvent(70, eventDetails.EventId));
                    }
                });
                break;

            case EventType.BumpSensor:
                if (_bumpRegistered)
                {
                    return;
                }
                _bumpRegistered = true;
                _ = Task.Run(async() =>
                {
                    await Task.Delay(10000);
                    MockedRobot.TriggerRobotEvent(BumpSensorEvent.GetMockEvent(true, BumpSensorPosition.FrontLeft, eventDetails.EventId));
                    await Task.Delay(3000);
                    MockedRobot.TriggerRobotEvent(BumpSensorEvent.GetMockEvent(true, BumpSensorPosition.FrontRight, eventDetails.EventId));

                    await Task.Delay(5000);
                    MockedRobot.TriggerRobotEvent(BumpSensorEvent.GetMockEvent(false, BumpSensorPosition.FrontLeft, eventDetails.EventId));
                    await Task.Delay(1000);
                    MockedRobot.TriggerRobotEvent(BumpSensorEvent.GetMockEvent(false, BumpSensorPosition.FrontRight, eventDetails.EventId));
                });
                break;

            case EventType.FaceRecognition:
                if (_faceRecRegistered)
                {
                    return;
                }
                _faceRecRegistered = true;
                _ = Task.Run(async() =>
                {
                    await Task.Delay(5000);
                    if (_faceRecRunning || _faceDetectRunning)
                    {
                        MockedRobot.TriggerRobotEvent(new FaceRecognitionEvent(5, 1, 1, _faceRecRunning ? "brad" : "unknown_person", 2, eventDetails.EventId));
                    }
                    await Task.Delay(2000);
                    if (_faceRecRunning || _faceDetectRunning)
                    {
                        MockedRobot.TriggerRobotEvent(new FaceRecognitionEvent(5, 1, 1, _faceRecRunning ? "joe" : "unknown_person", 2, eventDetails.EventId));
                    }

                    await Task.Delay(4000);

                    if (_faceRecRunning || _faceDetectRunning)
                    {
                        MockedRobot.TriggerRobotEvent(new FaceRecognitionEvent(5, 1, 1, "unknown_person", 2, eventDetails.EventId));
                    }
                });
                break;
            }
        }