import unittest

from dungeonbattle.display.texturepack import TexturePack
from dungeonbattle.interfaces import Map, Tile


class TestInterfaces(unittest.TestCase):
    def test_map(self) -> None:
        """
        Create a map and check that it is well parsed.
        """
        m = Map.load_from_string(".#\n#.\n")
        self.assertEqual(m.width, 2)
        self.assertEqual(m.height, 2)
        self.assertEqual(m.draw_string(TexturePack.ASCII_PACK), ".#\n#.")

    def test_load_map(self) -> None:
        """
        Try to load a map from a file.
        """
        m = Map.load("example_map.txt")
        self.assertEqual(m.width, 52)
        self.assertEqual(m.height, 17)

    def test_tiles(self) -> None:
        """
        Test some things about tiles.
        """
        self.assertFalse(Tile.FLOOR.is_wall())
        self.assertTrue(Tile.WALL.is_wall())
        self.assertFalse(Tile.EMPTY.is_wall())
        self.assertTrue(Tile.FLOOR.can_walk())
        self.assertFalse(Tile.WALL.can_walk())
        self.assertTrue(Tile.EMPTY.can_walk())
        self.assertRaises(ValueError, Tile.from_ascii_char, 'unknown')