public void GetCommand_Should_Success(int surfaceRowsCount, int surfaceColumnsCount, int robotPositionRow, int robotPositionColumn, SurfaceDirection surfaceDirection,
                                              string commandsString, int expectedPositionRow, int expectedPositionColumn, SurfaceDirection expectedDirection, bool expectedIsLost)
        {
            SurfaceGrid _marsSurface = new SurfaceGrid(surfaceRowsCount + 1, surfaceColumnsCount + 1);
            MarsInvasionControlCenter controlCenter = new MarsInvasionControlCenter(_marsSurface);

            var position = new SurfacePosition(robotPositionRow, robotPositionColumn);
            var newRobot = controlCenter.AddNewRobot(position, surfaceDirection);

            if (!newRobot.IsLost)
            {
                var commandSet = RobotCommandSet.Create(_commandsFactory, commandsString);
                newRobot.ExecuteCommands(commandSet);
                PrintPosition(newRobot);
            }
            else
            {
                PrintPosition(newRobot);
            }

            Assert.AreEqual(expectedPositionRow, newRobot.Position.Row);
            Assert.AreEqual(expectedPositionColumn, newRobot.Position.Column);
            Assert.AreEqual(expectedDirection, newRobot.Direction);
            Assert.AreEqual(expectedIsLost, newRobot.IsLost);
        }
        public void Robot_Not_Move_If_Scent_Exist()
        {
            SurfaceGrid _marsSurface = new SurfaceGrid(2, 2);
            MarsInvasionControlCenter controlCenter = new MarsInvasionControlCenter(_marsSurface);

            //First robot is being lost
            var position = new SurfacePosition(1, 1);
            var newRobot = controlCenter.AddNewRobot(position, SurfaceDirection.Up);

            var commandSet = RobotCommandSet.Create(_commandsFactory, "F");

            newRobot.ExecuteCommands(commandSet);

            Assert.IsTrue(newRobot.IsLost);

            //Second robot is not lost
            newRobot = controlCenter.AddNewRobot(position, SurfaceDirection.Up);
            newRobot.ExecuteCommands(commandSet);

            Assert.IsFalse(newRobot.IsLost);
            Assert.AreEqual(1, newRobot.Position.Row);
            Assert.AreEqual(1, newRobot.Position.Column);
        }