public void DispatchWithValidCommandSetShouldTransmitCorrectData()
        {
            var establishGrid   = new EstablishGridCommand("5 5");
            var confirmPosition = new ConfirmPositionCommand("1 2 N");
            var move            = new MoveCommand("LMRM");

            var commandSet = new CommandSet(establishGrid, confirmPosition, move);

            var guidance = new MockRoverGuidance(cs =>
            {
                Assert.IsNotNull(commandSet);
                Assert.AreEqual(establishGrid.Instructions, commandSet.EstablishGrid.Instructions);
                Assert.AreEqual(establishGrid.Grid.Width, commandSet.EstablishGrid.Grid.Width);
                Assert.AreEqual(establishGrid.Grid.Height, commandSet.EstablishGrid.Grid.Height);
                Assert.AreEqual(confirmPosition.Instructions, commandSet.ConfirmPosition.Instructions);
                Assert.AreEqual(confirmPosition.Coordinates.X, commandSet.ConfirmPosition.Coordinates.X);
                Assert.AreEqual(confirmPosition.Coordinates.Y, commandSet.ConfirmPosition.Coordinates.Y);
                Assert.AreEqual(confirmPosition.Heading, commandSet.ConfirmPosition.Heading);
                Assert.AreEqual(move.Instructions, commandSet.Move.Instructions);
                Assert.AreEqual(move.Moves.Count, commandSet.Move.Moves.Count);
                Assert.AreEqual(move.Moves[0], commandSet.Move.Moves[0]);
                Assert.AreEqual(move.Moves[1], commandSet.Move.Moves[1]);
                Assert.AreEqual(move.Moves[2], commandSet.Move.Moves[2]);
                Assert.AreEqual(move.Moves[3], commandSet.Move.Moves[3]);
            }, p => new Point(2, 1), h => Heading.North);

            var listener = new MockCommandSetListener(m =>
            {
                Assert.AreEqual("2 1 N", m);
            });

            var dispatcher = new LocalCommandSetDispatcher(guidance, listener);

            dispatcher.Dispatch(commandSet);
        }
        public void InstructionsWithNegativeYValueShouldThrowException()
        {
            var instructions = "4 -5 N";

            Assert.ThrowsException <ArgumentException>(() =>
            {
                var command = new ConfirmPositionCommand(instructions);
            });
        }
        public void InstructionsWithIncorrectlyFormattedHeadingValueShouldThrowException()
        {
            var instructions = "4 5 6";

            Assert.ThrowsException <ArgumentException>(() =>
            {
                var command = new ConfirmPositionCommand(instructions);
            });
        }
        public void InstructionsWithFourValuesShouldThrowException()
        {
            var instructions = "4 5 N E";

            Assert.ThrowsException <ArgumentException>(() =>
            {
                var command = new ConfirmPositionCommand(instructions);
            });
        }
        public void InstructionsWithNullValueShouldThrowException()
        {
            string instructions = null;

            Assert.ThrowsException <ArgumentException>(() =>
            {
                var command = new ConfirmPositionCommand(instructions);
            });
        }
        public void NullMoveShouldThrowException()
        {
            var establishGrid   = new EstablishGridCommand("5 5");
            var confirmPosition = new ConfirmPositionCommand("1 2 N");

            Assert.ThrowsException <ArgumentNullException>(() =>
            {
                var commandSet = new CommandSet(establishGrid, confirmPosition, null);
            });
        }
        public void NullEstablishGridShouldThrowException()
        {
            var confirmPosition = new ConfirmPositionCommand("1 2 N");
            var move            = new MoveCommand("LMRM");

            Assert.ThrowsException <ArgumentNullException>(() =>
            {
                var commandSet = new CommandSet(null, confirmPosition, move);
            });
        }
        public void PositionAtOriginShouldCreateObjectSuccessfully()
        {
            var instructions = "0 0 S";

            var command = new ConfirmPositionCommand(instructions);

            Assert.IsNotNull(command);
            Assert.AreEqual(instructions, command.Instructions);
            Assert.AreEqual(0, command.Coordinates.X);
            Assert.AreEqual(0, command.Coordinates.Y);
            Assert.AreEqual(Heading.South, command.Heading);
        }
        public void CorrectInstructionsShouldCreateObjectSuccessfully()
        {
            var instructions = "4 5 N";

            var command = new ConfirmPositionCommand(instructions);

            Assert.IsNotNull(command);
            Assert.AreEqual(instructions, command.Instructions);
            Assert.AreEqual(4, command.Coordinates.X);
            Assert.AreEqual(5, command.Coordinates.Y);
            Assert.AreEqual(Heading.North, command.Heading);
        }
        public void MoveWithMoveCommandGoingPastYMaximumShouldThrowException()
        {
            var establishGrid   = new EstablishGridCommand("5 5");
            var confirmPosition = new ConfirmPositionCommand("1 2 N");
            var move            = new MoveCommand("MMMMM");

            var commandSet = new CommandSet(establishGrid, confirmPosition, move);

            var guidance = new LocalRoverGuidance();

            Assert.ThrowsException <ArgumentOutOfRangeException>(() =>
            {
                guidance.Move(commandSet);
            });
        }
        public void MoveWithNoMovesShouldHaveCorrectPositionAndHeading()
        {
            var establishGrid   = new EstablishGridCommand("5 5");
            var confirmPosition = new ConfirmPositionCommand("1 2 N");
            var move            = new MoveCommand("");

            var commandSet = new CommandSet(establishGrid, confirmPosition, move);

            var guidance = new LocalRoverGuidance();

            guidance.Move(commandSet);

            Assert.AreEqual(1, guidance.Coordinates.X);
            Assert.AreEqual(2, guidance.Coordinates.Y);
            Assert.AreEqual(Heading.North, guidance.Heading);
        }
        public void CorrectArgumentsShouldCreateObjectSuccessfully()
        {
            var establishGrid   = new EstablishGridCommand("5 5");
            var confirmPosition = new ConfirmPositionCommand("1 2 N");
            var move            = new MoveCommand("LMRM");

            var commandSet = new CommandSet(establishGrid, confirmPosition, move);

            Assert.IsNotNull(commandSet);
            Assert.AreEqual(establishGrid.Instructions, commandSet.EstablishGrid.Instructions);
            Assert.AreEqual(establishGrid.Grid.Width, commandSet.EstablishGrid.Grid.Width);
            Assert.AreEqual(establishGrid.Grid.Height, commandSet.EstablishGrid.Grid.Height);
            Assert.AreEqual(confirmPosition.Instructions, commandSet.ConfirmPosition.Instructions);
            Assert.AreEqual(confirmPosition.Coordinates.X, commandSet.ConfirmPosition.Coordinates.X);
            Assert.AreEqual(confirmPosition.Coordinates.Y, commandSet.ConfirmPosition.Coordinates.Y);
            Assert.AreEqual(confirmPosition.Heading, commandSet.ConfirmPosition.Heading);
            Assert.AreEqual(move.Instructions, commandSet.Move.Instructions);
            Assert.AreEqual(move.Moves.Count, commandSet.Move.Moves.Count);
            Assert.AreEqual(move.Moves[0], commandSet.Move.Moves[0]);
            Assert.AreEqual(move.Moves[1], commandSet.Move.Moves[1]);
            Assert.AreEqual(move.Moves[2], commandSet.Move.Moves[2]);
            Assert.AreEqual(move.Moves[3], commandSet.Move.Moves[3]);
        }