from mars_rover.domain.commands import MoveForward, TurnLeft, TurnRight
from mars_rover.domain.heading import Heading
from mars_rover.domain.plateau import Plateau
from mars_rover.domain.rover import Rover
def test_turn_left_changes_heading():
rover = Rover(0, 0, Heading.N)
TurnLeft()(rover)
assert rover.heading == Heading.W
def test_turn_left_does_not_move():
rover = Rover(2, 3, Heading.N)
TurnLeft()(rover)
assert rover.x == 2 and rover.y == 3
def test_turn_right_changes_heading():
rover = Rover(0, 0, Heading.N)
TurnRight()(rover)
assert rover.heading == Heading.E
def test_turn_right_does_not_move():
rover = Rover(2, 3, Heading.N)
TurnRight()(rover)
assert rover.x == 2 and rover.y == 3
def test_move_forward_north():
plateau = Plateau(5, 5)
rover = Rover(1, 2, Heading.N)
MoveForward(plateau)(rover)
assert rover.x == 1 and rover.y == 3
def test_move_forward_east():
plateau = Plateau(5, 5)
rover = Rover(1, 2, Heading.E)
MoveForward(plateau)(rover)
assert rover.x == 2 and rover.y == 2
def _run(rover, commands, plateau):
mapping = {"L": TurnLeft(), "R": TurnRight(), "M": MoveForward(plateau)}
for ch in commands:
rover.execute(mapping[ch])
return rover
def test_kata_example_1():
plateau = Plateau(5, 5)
rover = Rover(1, 2, Heading.N)
result = _run(rover, "LMLMLMLMM", plateau)
assert result.x == 1 and result.y == 3 and result.heading == Heading.N
def test_kata_example_2():
plateau = Plateau(5, 5)
rover = Rover(3, 3, Heading.E)
result = _run(rover, "MMRMMRMRRM", plateau)
assert result.x == 5 and result.y == 1 and result.heading == Heading.E