public void InvalidCommand_ThrowsException(string invalidInstruction)
        {
            // arrange
            var commandMarshaller = new RobotCommandMarshaller(new Mock<IRobot>().Object);

            // act
            commandMarshaller.ExecuteInstructions(invalidInstruction);
        }
        public void ParseInstructionRight_InvokesCommandRight()
        {
            // arrange
            string instructions = "R";
            Mock<IRobot> robot = new Mock<IRobot>();
            robot
                .Setup(r => r.CommandRight())
                .Verifiable();
            IRobotCommandMarshaller commandMarshaller = new RobotCommandMarshaller(robot.Object);

            // act
            commandMarshaller.ExecuteInstructions(instructions);

            // assert
            robot.Verify(r => r.CommandRight(), Times.Once());
        }
        public void ParseInstructions_GivenASequenceOfInstructions_ParsesEachInstructionInSequence()
        {
            // arrange
            string instructions = "llmmmrmm";
            var robot = new Mock<IRobot>();
            robot
                .Setup(r=>r.CommandLeft())
                .Verifiable();
            robot
                .Setup(r => r.CommandRight())
                .Verifiable();
            robot
                .Setup(r => r.CommandMove())
                .Verifiable();
            var commandMarshaller = new RobotCommandMarshaller(robot.Object);

            // act
            commandMarshaller.ExecuteInstructions(instructions);

            // assert
            robot.Verify(r=>r.CommandLeft(), Times.Exactly(2));
            robot.Verify(r => r.CommandRight(), Times.Exactly(1));
            robot.Verify(r => r.CommandMove(), Times.Exactly(5));
        }