Пример #1
0
        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);
        }