/// <summary>
        /// Actually polls the device
        /// </summary>
        /// <param name="serialNumber">The serial number</param>
        /// <param name="pollIntervals">The intervals to poll for</param>
        /// <returns>The populated commands</returns>
        private ICommandList?ExecutePoll(string serialNumber, IEnumerable <PollInterval> pollIntervals)
        {
            ICommandList commands = _commandListFactory.Create();

            foreach (PollInterval pollInterval in pollIntervals)
            {
                try
                {
                    commands.AddRange(_pollIntervals[pollInterval]);
                }
                catch (Exception e)
                {
                    _logger.LogCritical("Could not add poll intervals");
                }
            }

            commands.Prepare();

            try
            {
                _pmCommunicator.Send(serialNumber, commands);
                return(commands);
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Exception occurred while sending poll commands to serial number [{SerialNumber}]", serialNumber);
            }

            return(null);
        }
        public void Should_Throw_ArgumentOutOfRangeException_And_ReturnStartPosition_When_RoverGetsOutOfPlato()
        {
            IPosition startPosition = CurrentFactory.CreateInputObject <IPosition>();

            startPosition.X         = 3;
            startPosition.Y         = 3;
            startPosition.Direction = Direction.East;

            IDriver driver = new Driver.Driver(CurrentPlato, startPosition);

            ICommandList commandLists = CurrentFactory.CreateInputObject <ICommandList>();

            commandLists.AddRange("MMMMMM".Select(p => (CommandType)p).ToArray());

            Assert.Throws <ArgumentOutOfRangeException>(() => driver.Drive(commandLists));
            Assert.IsTrue(startPosition.Equals(driver.CurrentPosition));
        }
        public void Should_WorkFine_WhenEverythinkOk_Scenario_2()
        {
            IPosition startPosition = CurrentFactory.CreateInputObject <IPosition>();

            startPosition.X         = 3;
            startPosition.Y         = 3;
            startPosition.Direction = Direction.East;

            IDriver driver = new Driver.Driver(CurrentPlato, startPosition);

            ICommandList commandLists = CurrentFactory.CreateInputObject <ICommandList>();

            commandLists.AddRange("MMRMMRMRRM".Select(p => (CommandType)p).ToArray());


            IPosition lastPosition = driver.Drive(commandLists);

            Assert.AreEqual(lastPosition.X, 5);
            Assert.AreEqual(lastPosition.Y, 1);
            Assert.AreEqual(lastPosition.Direction, Direction.East);
        }