예제 #1
0
        protected override Result Execute()
        {
            var step = 1;
            BidimensionalPoint newPosition;

            switch (Item.Direction)
            {
            case Direction.North:
                newPosition = new BidimensionalPoint(Item.Position.Latitude, Item.Position.Longitude + step);
                break;

            case Direction.South:
                newPosition = new BidimensionalPoint(Item.Position.Latitude, Item.Position.Longitude - step);
                break;

            case Direction.East:
                newPosition = new BidimensionalPoint(Item.Position.Latitude + step, Item.Position.Longitude);
                break;

            case Direction.West:
                newPosition = new BidimensionalPoint(Item.Position.Latitude - step, Item.Position.Longitude);
                break;

            case Direction.None:
            default:
                throw new ArgumentException(string.Format("No action move found for '{0}' direction", Item.Direction));
            }

            Item.Position = newPosition;
            return(new Result(true));
        }
예제 #2
0
        public override IAction CreateAction(IRobot item, IMapDataProvider mapDataProvider, string actionParameters)
        {
            var parameters = actionParameters.Split(',');

            parameters.ToList().ForEach(p => p.Trim());
            if (parameters.Length != 3)
            {
                return(null);
            }

            int latitude;

            if (!int.TryParse(parameters[0], out latitude))
            {
                return(null);
            }

            int longitude;

            if (!int.TryParse(parameters[1], out longitude))
            {
                return(null);
            }

            Direction?direction = parameters[2].ToEnum <Direction>();

            if (direction == null)
            {
                return(null);
            }

            var position = new BidimensionalPoint(latitude, longitude);

            return(new PlaceAction(item, mapDataProvider, position, (Direction)direction));
        }
예제 #3
0
        public void Run_ShouldkeepPreviousPositionOrDirection_IfNotValid()
        {
            var position = new BidimensionalPoint(1, 3);

            _robot.Position  = position;
            _robot.Direction = Direction.East;
            _mapProviderMock.Setup(mapProvider => mapProvider.IsPositionAvailable(It.IsAny <IPosition>())).Returns(false);
            var action = new PlaceAction(_robot, _mapProviderMock.Object, new BidimensionalPoint(2, 1), Direction.West);

            action.Run();

            Assert.Equal(position, _robot.Position);
            Assert.Equal(Direction.East, _robot.Direction);
        }