public string Segregate(string input)
        {
            try
            {
                _roverDetails = _initializor.InitializeRoverDetails(input.Trim());
                if (_orientationPattern.IsMatch(input))
                {
                    _roverDetails = _initializor.GetTheDestinationDetails(input.Trim());
                }
                else if (!_roverDetails.HasValidPattern)
                {
                    throw new InvalidInputException("Invalid Input");
                }
            }
            catch (InvalidInputException exception)
            {
                _roverDetails.ValidationResult = exception.Message;
            }
            catch (InvalidCoordinateException exception)
            {
                _roverDetails.ValidationResult = exception.Message;
            }

            return(_roverDetails.Output);
        }
 public void Validate(RoverDetails roverDetails, bool validateCurrentPosition)
 {
     if (roverDetails.MaximumCoordinates == null)
     {
         throw new InvalidInputException("Enter Maximum Coordinates");
     }
 }
Esempio n. 3
0
        public void Validate(RoverDetails roverDetails, bool validateCurrentPosition)
        {
            if (validateCurrentPosition)
            {
                if (roverDetails.CurrentPosition.XCoordinate > roverDetails.MaximumCoordinates.XCoordinate || roverDetails.CurrentPosition.XCoordinate < 0)
                {
                    _errMsgBuilder.Append(ErrMsgXCoordinate);
                }

                if (roverDetails.CurrentPosition.YCoordinate > roverDetails.MaximumCoordinates.YCoordinate || roverDetails.CurrentPosition.YCoordinate < 0)
                {
                    _errMsgBuilder.Append(ErrMsgYCoordinate);
                }
            }
            else
            {
                if (roverDetails.FinalPosition.XCoordinate > roverDetails.MaximumCoordinates.XCoordinate || roverDetails.FinalPosition.XCoordinate < 0)
                {
                    _errMsgBuilder.Append(ErrMsgXCoordinate);
                }

                if (roverDetails.FinalPosition.YCoordinate > roverDetails.MaximumCoordinates.YCoordinate || roverDetails.FinalPosition.YCoordinate < 0)
                {
                    _errMsgBuilder.Append(ErrMsgYCoordinate);
                }
            }

            if (_errMsgBuilder.Length > 1)
            {
                throw new InvalidCoordinateException(_errMsgBuilder.ToString());
            }
        }
        public RoverDetails GetTheDestination(RoverDetails roverDetails)
        {
            _rover = roverDetails.CurrentPosition;
            foreach (var command in roverDetails.RoverInstruction)
            {
                if (ValidOrientation.Contains(command.ToString()))
                {
                    ChangeOrientation(command);
                }
                else
                {
                    MoveForward();
                }
            }

            roverDetails.FinalPosition = _rover;
            return(roverDetails);
        }
        public void ShouldValidateInvalidFinalPosition()
        {
            var roverDetails = new RoverDetails
            {
                MaximumCoordinates = new Rover()
                {
                    XCoordinate = 5, YCoordinate = 5
                },
                FinalPosition =
                    new Rover()
                {
                    XCoordinate      = 6,
                    YCoordinate      = 7,
                    CompassDirection = OrientationDetails.CompassDirection.N
                }
            };

            _validate.Validate(roverDetails, false);
        }
        public void GetTheDestination2()
        {
            var roverDetails = new RoverDetails()
            {
                MaximumCoordinates = new Rover()
                {
                    XCoordinate = 5, YCoordinate = 5
                },
                CurrentPosition = new Rover()
                {
                    XCoordinate = 3, YCoordinate = 3, CompassDirection = OrientationDetails.CompassDirection.E
                },
                RoverInstruction = "MMRMMRMRRM"
            };
            var result = _processor.GetTheDestination(roverDetails);

            Assert.AreEqual(result.FinalPosition, new Rover()
            {
                XCoordinate = 5, YCoordinate = 1, CompassDirection = OrientationDetails.CompassDirection.E
            });
        }
 public Segregator(RoverDetails roverDetails)
 {
     _roverDetails = roverDetails;
 }
 public Initialize(ValidationProvider validationProvider, RoverDetails roverDetails)
 {
     _roverDetails = roverDetails;
     _validators   = validationProvider.GetValidators();
 }