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)); }
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)); }
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); }