class TestGameInterpreter(unittest.TestCase):
  def setUp(self):
    self.game_string = """\
      ██████████
      ██① ☐ ☐ ██
      ██↓ ☐ ▲ ██
      ██☐ ☐ ② ██
      ██████████"""

    self.game_string = self.game_string.replace("      ", "")
    self.interpreted_game = GameInterpreter(self.game_string).do()

  def test_width(self):
    self.assertEqual(
      self.interpreted_game.arena.get_width(), 3
    )

  def test_length(self):
    self.assertEqual(
      self.interpreted_game.arena.get_length(), 3
    )

  def test_player1_position(self):
    self.assertEqual(
      self.interpreted_game.player1.position, (1, 2)
    )

  def test_player1_direction(self):
    self.assertEqual(
      self.interpreted_game.player1.direction, DIRECTIONS.south
    )

  def test_player2_position(self):
    self.assertEqual(
      self.interpreted_game.player2.position, (3, 2)
    )

  def test_player2_direction(self):
    self.assertEqual(
      self.interpreted_game.player2.direction, DIRECTIONS.north
    )

  def test_player1_trail(self):
    self.assertTrue(
      self.interpreted_game.get_owner((1, 1))
        is self.interpreted_game.player1
    )

  def test_player2_trail(self):
    self.assertTrue(
      self.interpreted_game.get_owner((3, 3))
        is self.interpreted_game.player2
    )
  def setUp(self):
    self.game_string = """\
      ████████
      ██↓ ② ██
      ██☐ ▼ ██
      ████████"""

    self.game_string = self.game_string.replace("      ", "")
    self.interpreted_game = GameInterpreter(self.game_string).do()
  def setUp(self):
    self.game_string = """\
      ████████
      ██① ☐ ██
      ██↓ ▲ ██
      ██☐ ████
      ████████"""

    self.game_string = self.game_string.replace("      ", "")
    self.interpreted_game = GameInterpreter(self.game_string).do()
    self.interpreted_game.player1.position = (2, 3)
class TestOwnershipRegression(unittest.TestCase):
  def setUp(self):
    self.game_string = """\
      ████████
      ██↓ ② ██
      ██☐ ▼ ██
      ████████"""

    self.game_string = self.game_string.replace("      ", "")
    self.interpreted_game = GameInterpreter(self.game_string).do()

  def test_player2_trail(self):
    self.assertTrue(
      self.interpreted_game.get_owner((2, 1))
        is self.interpreted_game.player2
    )
class TestBoundsRegression(unittest.TestCase):
  def setUp(self):
    self.game_string = """\
      ████████
      ██① ☐ ██
      ██↓ ▲ ██
      ██☐ ████
      ████████"""

    self.game_string = self.game_string.replace("      ", "")
    self.interpreted_game = GameInterpreter(self.game_string).do()
    self.interpreted_game.player1.position = (2, 3)

  def test_position_two_three(self):
    self.assertTrue(
      self.interpreted_game.player_is_out_of_bounds(
        self.interpreted_game.player1
      )
    )