public void Given_SetStartPosition_Is_Not_Valid_Then_Throw_ArgumentExcpetion()
        {
            // ARRANGE
            var arena = new RectangleArena();
            arena.SetArenaSize(1, 1);

            var robot = new Robot(arena);

            // ACT
            robot.SetStartPosition(new Position(3, 4, Orientation.East));
        }
        public void Given_Invalid_Command_Throw_Argument_Exception()
        {
            // ARRANGE
            var command = "L R M X";

            var arena = new RectangleArena();
            arena.SetArenaSize(5, 5);

            var robot = new Robot(arena);
            robot.SetStartPosition(new Position(0, 0, Orientation.North));

            // ACT
            new MoveCommand(robot).Perform(command);
        }
        public void Given_SetStartPosition_Is_Valid_Then_Position_Returns_InitialValue()
        {
            // ARRANGE
            var arena = new RectangleArena();
            arena.SetArenaSize(3, 4);

            var robot = new Robot(arena);

            // ACT
            robot.SetStartPosition(new Position(2, 3, Orientation.East));

            // ASSERT
            Assert.AreEqual(2, robot.Position.XCoordinate);
            Assert.AreEqual(3, robot.Position.YCoordinate);
            Assert.AreEqual(Orientation.East, robot.Position.Orientation);
        }
        public void Given_Valid_Command_Then_Robot_Should_Have_Correct_Position()
        {
            // ARRANGE
            var command = "LRMM";

            var arena = new RectangleArena();
            arena.SetArenaSize(5, 5);

            var robot = new Robot(arena);
            robot.SetStartPosition(new Position(0, 0, Orientation.North));

            // ACT
            new MoveCommand(robot).Perform(command); 

            // ASSERT
            Assert.AreEqual(0, robot.Position.XCoordinate);
            Assert.AreEqual(2, robot.Position.YCoordinate);
            Assert.AreEqual(Orientation.North, robot.Position.Orientation);
        }
        public void Given_Move_Is_Not_Valid_For_StartPosition_Then_Throw_InvalidOperationException()
        {
            // ARRANGE
            var arena = new RectangleArena();
            arena.SetArenaSize(1, 1);

            var robot = new Robot(arena);
            robot.SetStartPosition(new Position(1, 1, Orientation.North));

            // ACT
            robot.Move(Motion.Forward);
        }