public void MoveRight_WhenDirectionEast_ThenDirectionSouth()
        {
            var marsSurface   = new MarsSurfaceStub(5, 3, true);
            var startPosition = new Vector2(1, 1);
            var robot         = new MartianRobotStub(marsSurface, startPosition, Direction.East);

            _testee.Move(marsSurface, robot, MoveAction.TurnRight);

            Assert.AreEqual(Direction.South, robot.Direction);
            Assert.AreEqual(MarsRobotState.Active, robot.State);
            Assert.AreEqual(
                startPosition,
                robot.Position);
        }
        public void MoveForward_WhenDirectionEastAndRobotOnBoarder_ThenLost()
        {
            var marsSurface   = new MarsSurfaceStub(5, 3, false);
            var startPosition = new Vector2(4, 1);
            var robot         = new MartianRobotStub(marsSurface, startPosition, Direction.East);

            _testee.Move(marsSurface, robot, MoveAction.Forward);

            Assert.AreEqual(Direction.East, robot.Direction);
            Assert.AreEqual(startPosition, robot.Position);
            Assert.AreEqual(MarsRobotState.Lost, robot.State);
            Assert.AreEqual(MarsSurfacePointState.WithScent,
                            marsSurface.Surface[4, 1]);
        }
        public void MoveLeft_WhenDirectionNorth_ThenDirectionWest()
        {
            var marsSurface   = new MarsSurfaceStub(5, 3, true);
            var startPosition = new Vector2(1, 1);
            var robot         = new MartianRobotStub(marsSurface, startPosition, Direction.North);

            _testee.Move(marsSurface, robot, MoveAction.TurnLeft);

            Assert.AreEqual(Direction.West, robot.Direction);
            Assert.AreEqual(MarsRobotState.Active, robot.State);
            Assert.AreEqual(
                startPosition,
                robot.Position);
        }
        public void MoveForward_WhenDirectionNorth_ThenMoveForward()
        {
            var marsSurface   = new MarsSurfaceStub(5, 3, true);
            var startPosition = new Vector2(1, 1);
            var robot         = new MartianRobotStub(marsSurface, startPosition, Direction.North);

            _testee.Move(marsSurface, robot, MoveAction.Forward);

            Assert.AreEqual(Direction.North, robot.Direction);
            Assert.AreEqual(MarsRobotState.Active, robot.State);
            Assert.AreEqual(
                new Vector2(startPosition.X, startPosition.Y + 1),
                robot.Position);
        }
        public void MoveForward_WhenDirectionNorthAndRobotOnBoarderButSurfaceWithScent_ThenDoNotMove()
        {
            var marsSurface = new MarsSurfaceStub(5, 3, false);

            marsSurface.Surface[0, 2] = MarsSurfacePointState.WithScent;
            var startPosition = new Vector2(0, 2);
            var robot         = new MartianRobotStub(marsSurface, startPosition, Direction.North);

            _testee.Move(marsSurface, robot, MoveAction.Forward);

            Assert.AreEqual(Direction.North, robot.Direction);
            Assert.AreEqual(
                startPosition,
                robot.Position);
            Assert.AreEqual(MarsRobotState.Active, robot.State);
            Assert.AreEqual(MarsSurfacePointState.WithScent,
                            marsSurface.Surface[0, 2]);
        }