public SetRoverStateCommand Translate(Entities.Rover rover, RoverActionCommand roverActionCommand) { var result = new SetRoverStateCommand { XCoordinate = rover.GridPosition.X, YCoordinate = rover.GridPosition.Y }; switch (roverActionCommand.RoverAction) { case RoverAction.TurnLeft: result.FacingDirection = _roverActionToDirection.GetDirection(rover.RoverFacingDirection, roverActionCommand.RoverAction); break; case RoverAction.TurnRight: result.FacingDirection = _roverActionToDirection.GetDirection(rover.RoverFacingDirection, roverActionCommand.RoverAction); break; case RoverAction.MoveForwardInTheDirectionRoverIsFacing: switch (rover.RoverFacingDirection) { case Direction.North: result.YCoordinate--; break; case Direction.South: result.YCoordinate++; break; case Direction.East: result.XCoordinate++; break; case Direction.West: result.XCoordinate--; break; } result.FacingDirection = rover.RoverFacingDirection; break; } return(result); }
public void ShouldMoveRoverAlongXAccessIfFacingWest() { var rover = _fixture.Build <Rover.Core.Entities.Rover>() .With(x => x.RoverFacingDirection, Direction.West) .Create(); var roverActionCommand = new RoverActionCommand() { RoverAction = RoverAction.MoveForwardInTheDirectionRoverIsFacing, ActionExecutionOrder = 1 }; _roverActonToCoordinateTranslationService = new RoverActonToCoordinateTranslationService(new RoverActionToDirection()); var result = _roverActonToCoordinateTranslationService.Translate(rover, roverActionCommand); Assert.AreEqual(Direction.West, result.FacingDirection); Assert.AreEqual(rover.GridPosition.X - 1, result.XCoordinate); Assert.AreEqual(rover.GridPosition.Y, result.YCoordinate); }
public void ShouldReturnCommandForRoverToPointEastIfFacingNorthAndTurningRight() { var rover = _fixture.Build <Rover.Core.Entities.Rover>() .With(x => x.RoverFacingDirection, Direction.North) .Create(); var roverActionCommand = new RoverActionCommand() { RoverAction = RoverAction.TurnRight, ActionExecutionOrder = 1 }; _roverActonToCoordinateTranslationService = new RoverActonToCoordinateTranslationService(new RoverActionToDirection()); var result = _roverActonToCoordinateTranslationService.Translate(rover, roverActionCommand); Assert.AreEqual(Direction.East, result.FacingDirection); Assert.AreEqual(rover.GridPosition.X, result.XCoordinate); Assert.AreEqual(rover.GridPosition.Y, result.YCoordinate); }