def setUp(self):
     self.v = Barco()
     self.v1 = Lancha()
     self.m = Mapa()
     self.s = Sector("mar", self.m)
     self.coor = [(1, 2), (2, 2), (3, 2)]
     self.coor1 = [(1, 2), (1, 3), (1, 4)]
     self.coor2 = [(5, 5)]
     self.coor3 = [(1, 2), (1, 3), (2, 2), (2, 3)]
 def setUp(self):
     self.v = Barco()
     self.v1 = Lancha()
     self.m = Mapa()
     self.s = Sector("mar", self.m)
     self.coor = [(1, 2), (2, 2), (3, 2)]
     self.coor1 = [(1, 2), (1, 3), (1, 4)]
     self.coor2 = [(5, 5)]
     self.coor3 = [(1, 2), (1, 3), (2, 2), (2, 3)]
class TestSector(unittest.TestCase):

    def setUp(self):
        self.v = Barco()
        self.v1 = Lancha()
        self.m = Mapa()
        self.s = Sector("mar", self.m)
        self.coor = [(1, 2), (2, 2), (3, 2)]
        self.coor1 = [(1, 2), (1, 3), (1, 4)]
        self.coor2 = [(5, 5)]
        self.coor3 = [(1, 2), (1, 3), (2, 2), (2, 3)]

    def test_revisar_around_coor(self):
        lista = [(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)]
        assert self.s.revisar_around_coor((2,5)) == lista
        self.s.grilla[2][3] = Barco()
        assert self.s.revisar_around_coor((2,5)) == lista
        self.s.grilla[2][4] = Barco()
        string = "Alguna parte del exp en cas ocupada por Barco Pequeño"
        string1 = "Alguna parte del exp se sale de los bordes"
        assert self.s.revisar_around_coor((2,5)) == string
        assert self.s.revisar_around_coor((0,1)) == string1
        assert self.s.revisar_around_coor((1,0)) == string1
        assert self.s.revisar_around_coor((11,11)) == string1
        assert self.s.revisar_around_coor((7,11)) == string1
        assert self.s.revisar_around_coor((11,5)) == string1


    def test_is_vacia(self):
        assert self.s.is_vacia((2,4))
        self.s.grilla[2][4] = Barco()
        assert not self.s.is_vacia((2,4))

    def test_mover_vehiculo_simple(self):
        self.s.grilla[5][5] = self.v
        self.s.mover_vehiculo(self.v,"Arriba")
        assert self.s.grilla[5][5] == None
        assert self.s.grilla[4][5] == self.v
        self.s.mover_vehiculo(self.v,"Abajo")
        assert self.s.grilla[5][5] == self.v
        assert self.s.grilla[4][5] == None
        self.s.mover_vehiculo(self.v,"Derecha")
        assert self.s.grilla[5][6] == self.v
        assert self.s.grilla[5][5] == None
        self.s.mover_vehiculo(self.v,"Izquierda")
        assert self.s.grilla[5][5] == self.v
        assert self.s.grilla[5][6] == None

    def test_mover_vehiculo_complejo(self):
        for i in range(3):
            self.s.grilla[i+1][1] = self.v
            self.s.grilla[i+1][2] = self.v
        self.s.mover_vehiculo(self.v,"Arriba")
        for i in range(3):
            assert self.s.grilla[i][1] == self.v
            assert self.s.grilla[i][2] == self.v
        assert self.s.grilla[3][1] == None
        assert self.s.grilla[3][2] == None
        self.s.mover_vehiculo(self.v,"Abajo")
        for i in range(3):
            assert self.s.grilla[i+1][1] == self.v
            assert self.s.grilla[i+1][2] == self.v
        assert self.s.grilla[0][1] == None
        assert self.s.grilla[0][2] == None
        self.s.mover_vehiculo(self.v,"Derecha")
        for i in range(3):
            assert self.s.grilla[i+1][2] == self.v
            assert self.s.grilla[i+1][3] == self.v
            assert self.s.grilla[i+1][1] == None
        self.s.mover_vehiculo(self.v,"Izquierda")
        for i in range(3):
            assert self.s.grilla[i+1][1] == self.v
            assert self.s.grilla[i+1][2] == self.v
            assert self.s.grilla[i+1][3] == None


    def test_mov_disp(self):
        self.s.grilla[5][5] = self.v
        assert self.s.mov_disp(self.v) == ["Arriba","Abajo","Izquierda","Derecha"]
        self.s.grilla[11][1] = self.v1
        assert self.s.mov_disp(self.v1) == ["Arriba","Izquierda","Derecha"]
        self.s.grilla[5][6] = self.v1
        assert self.s.mov_disp(self.v) == ["Arriba","Abajo","Izquierda"]
        self.s.grilla[6][5] = self.v1
        assert self.s.mov_disp(self.v) == ["Arriba","Izquierda"]
        self.s.grilla[4][5] = self.v1
        assert self.s.mov_disp(self.v) == ["Izquierda"]
        self.s.grilla[5][4] = self.v1
        assert not self.s.mov_disp(self.v)

    def test_se_puede_mover(self):
        assert self.s.se_puede_mover(self.coor1, "Arriba")
        self.s.grilla[0][3] = Barco()
        assert not self.s.se_puede_mover(self.coor1, "Arriba")
        assert not self.s.se_puede_mover([(0, 3), (0, 4)], "Arriba")
        assert self.s.se_puede_mover(self.coor2, "Izquierda")
        assert not self.s.se_puede_mover([(0, 4)], "Izquierda")
        assert not self.s.se_puede_mover([(2, 0), (1, 0)], "Izquierda")
        assert not self.s.se_puede_mover([(2, 11)], "Derecha")
        assert self.s.se_puede_mover([(0, 4)], "Derecha")
        self.s.grilla[3][5] = Barco()
        self.s.grilla[3][7] = Barco()
        self.s.grilla[4][6] = Barco()
        self.s.grilla[2][6] = Barco()
        assert not self.s.se_puede_mover([(3, 6)], "Derecha")
        assert not self.s.se_puede_mover([(3, 6)], "Izquierda")
        assert not self.s.se_puede_mover([(3, 6)], "Abajo")
        assert not self.s.se_puede_mover([(3, 6)], "Arriba")
        self.s.grilla[4][6] = None
        assert self.s.se_puede_mover([(3, 6)], "Abajo")

    def test_get_coor_der(self):
        assert self.s.get_coor_der(self.coor) == self.coor
        assert self.s.get_coor_der(self.coor1) == [(1, 4)]
        assert self.s.get_coor_der(self.coor2) == self.coor2
        assert self.s.get_coor_der(self.coor3) == [(1, 3), (2, 3)]

    def test_get_coor_abajo(self):
        assert self.s.get_coor_abajo(self.coor) == [(3, 2)]
        assert self.s.get_coor_abajo(self.coor1) == self.coor1
        assert self.s.get_coor_abajo(self.coor2) == self.coor2
        assert self.s.get_coor_abajo(self.coor3) == [(2, 2), (2, 3)]

    def test_get_coor_arriba(self):
        assert self.s.get_coor_arriba(self.coor) == [(1, 2)]
        assert self.s.get_coor_arriba(self.coor1) == self.coor1
        assert self.s.get_coor_arriba(self.coor2) == self.coor2
        assert self.s.get_coor_arriba(self.coor3) == [(1, 2), (1, 3)]

    def test_get_coor_izq(self):
        assert self.s.get_coor_izq(self.coor) == self.coor
        assert self.s.get_coor_izq(self.coor1) == [(1, 2)]
        assert self.s.get_coor_izq(self.coor2) == self.coor2
        assert self.s.get_coor_izq(self.coor3) == [(1, 2), (2, 2)]

    def test_encontrar_coordenadas(self):
        lista = set()
        assert not self.s.encontrar_coordenadas(self.v)
        for i in range(20):
            a = r.randint(0, 11)
            b = r.randint(0, 11)
            lista.add((a, b))
            self.s.grilla[a][b] = self.v
        assert set(self.s.encontrar_coordenadas(self.v)) == lista

    def test_eliminar_vehiculo(self):
        lista = set()
        grilla = [[None for i in range(12)] for i in range(12)]
        self.s.eliminar_vehiculo([])
        assert grilla == self.s.grilla
        for i in range(20):
            a = r.randint(0, 11)
            b = r.randint(0, 11)
            lista.add((a, b))
            self.s.grilla[a][b] = self.v
        assert not grilla == self.s.grilla
        self.s.eliminar_vehiculo(list(lista))
        assert grilla == self.s.grilla

    def test_evaluar_ataque(self):
        assert not self.s.evaluar_ataque([])
        assert not self.s.evaluar_ataque([(1, 3), (5, 3), (2, 3)])
        lista = [(i, i + 1) for i in range(9)]
        lista1 = [(i + 2, i) for i in range(5)]
        for i, j in lista:
            self.s.grilla[i][j] = self.v
        for i, j in lista1:
            self.s.grilla[i][j] = self.v1
        assert self.s.evaluar_ataque([lista[0]]) == [self.v]
        lista_aux = [lista[1], lista1[4], (11, 11)]
        assert self.s.evaluar_ataque(lista_aux) == [self.v, self.v1]
class TestSector(unittest.TestCase):
    def setUp(self):
        self.v = Barco()
        self.v1 = Lancha()
        self.m = Mapa()
        self.s = Sector("mar", self.m)
        self.coor = [(1, 2), (2, 2), (3, 2)]
        self.coor1 = [(1, 2), (1, 3), (1, 4)]
        self.coor2 = [(5, 5)]
        self.coor3 = [(1, 2), (1, 3), (2, 2), (2, 3)]

    def test_revisar_around_coor(self):
        lista = [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4),
                 (3, 5), (3, 6)]
        assert self.s.revisar_around_coor((2, 5)) == lista
        self.s.grilla[2][3] = Barco()
        assert self.s.revisar_around_coor((2, 5)) == lista
        self.s.grilla[2][4] = Barco()
        string = "Alguna parte del exp en cas ocupada por Barco Pequeño"
        string1 = "Alguna parte del exp se sale de los bordes"
        assert self.s.revisar_around_coor((2, 5)) == string
        assert self.s.revisar_around_coor((0, 1)) == string1
        assert self.s.revisar_around_coor((1, 0)) == string1
        assert self.s.revisar_around_coor((11, 11)) == string1
        assert self.s.revisar_around_coor((7, 11)) == string1
        assert self.s.revisar_around_coor((11, 5)) == string1

    def test_is_vacia(self):
        assert self.s.is_vacia((2, 4))
        self.s.grilla[2][4] = Barco()
        assert not self.s.is_vacia((2, 4))

    def test_mover_vehiculo_simple(self):
        self.s.grilla[5][5] = self.v
        self.s.mover_vehiculo(self.v, "Arriba")
        assert self.s.grilla[5][5] == None
        assert self.s.grilla[4][5] == self.v
        self.s.mover_vehiculo(self.v, "Abajo")
        assert self.s.grilla[5][5] == self.v
        assert self.s.grilla[4][5] == None
        self.s.mover_vehiculo(self.v, "Derecha")
        assert self.s.grilla[5][6] == self.v
        assert self.s.grilla[5][5] == None
        self.s.mover_vehiculo(self.v, "Izquierda")
        assert self.s.grilla[5][5] == self.v
        assert self.s.grilla[5][6] == None

    def test_mover_vehiculo_complejo(self):
        for i in range(3):
            self.s.grilla[i + 1][1] = self.v
            self.s.grilla[i + 1][2] = self.v
        self.s.mover_vehiculo(self.v, "Arriba")
        for i in range(3):
            assert self.s.grilla[i][1] == self.v
            assert self.s.grilla[i][2] == self.v
        assert self.s.grilla[3][1] == None
        assert self.s.grilla[3][2] == None
        self.s.mover_vehiculo(self.v, "Abajo")
        for i in range(3):
            assert self.s.grilla[i + 1][1] == self.v
            assert self.s.grilla[i + 1][2] == self.v
        assert self.s.grilla[0][1] == None
        assert self.s.grilla[0][2] == None
        self.s.mover_vehiculo(self.v, "Derecha")
        for i in range(3):
            assert self.s.grilla[i + 1][2] == self.v
            assert self.s.grilla[i + 1][3] == self.v
            assert self.s.grilla[i + 1][1] == None
        self.s.mover_vehiculo(self.v, "Izquierda")
        for i in range(3):
            assert self.s.grilla[i + 1][1] == self.v
            assert self.s.grilla[i + 1][2] == self.v
            assert self.s.grilla[i + 1][3] == None

    def test_mov_disp(self):
        self.s.grilla[5][5] = self.v
        assert self.s.mov_disp(
            self.v) == ["Arriba", "Abajo", "Izquierda", "Derecha"]
        self.s.grilla[11][1] = self.v1
        assert self.s.mov_disp(self.v1) == ["Arriba", "Izquierda", "Derecha"]
        self.s.grilla[5][6] = self.v1
        assert self.s.mov_disp(self.v) == ["Arriba", "Abajo", "Izquierda"]
        self.s.grilla[6][5] = self.v1
        assert self.s.mov_disp(self.v) == ["Arriba", "Izquierda"]
        self.s.grilla[4][5] = self.v1
        assert self.s.mov_disp(self.v) == ["Izquierda"]
        self.s.grilla[5][4] = self.v1
        assert not self.s.mov_disp(self.v)

    def test_se_puede_mover(self):
        assert self.s.se_puede_mover(self.coor1, "Arriba")
        self.s.grilla[0][3] = Barco()
        assert not self.s.se_puede_mover(self.coor1, "Arriba")
        assert not self.s.se_puede_mover([(0, 3), (0, 4)], "Arriba")
        assert self.s.se_puede_mover(self.coor2, "Izquierda")
        assert not self.s.se_puede_mover([(0, 4)], "Izquierda")
        assert not self.s.se_puede_mover([(2, 0), (1, 0)], "Izquierda")
        assert not self.s.se_puede_mover([(2, 11)], "Derecha")
        assert self.s.se_puede_mover([(0, 4)], "Derecha")
        self.s.grilla[3][5] = Barco()
        self.s.grilla[3][7] = Barco()
        self.s.grilla[4][6] = Barco()
        self.s.grilla[2][6] = Barco()
        assert not self.s.se_puede_mover([(3, 6)], "Derecha")
        assert not self.s.se_puede_mover([(3, 6)], "Izquierda")
        assert not self.s.se_puede_mover([(3, 6)], "Abajo")
        assert not self.s.se_puede_mover([(3, 6)], "Arriba")
        self.s.grilla[4][6] = None
        assert self.s.se_puede_mover([(3, 6)], "Abajo")

    def test_get_coor_der(self):
        assert self.s.get_coor_der(self.coor) == self.coor
        assert self.s.get_coor_der(self.coor1) == [(1, 4)]
        assert self.s.get_coor_der(self.coor2) == self.coor2
        assert self.s.get_coor_der(self.coor3) == [(1, 3), (2, 3)]

    def test_get_coor_abajo(self):
        assert self.s.get_coor_abajo(self.coor) == [(3, 2)]
        assert self.s.get_coor_abajo(self.coor1) == self.coor1
        assert self.s.get_coor_abajo(self.coor2) == self.coor2
        assert self.s.get_coor_abajo(self.coor3) == [(2, 2), (2, 3)]

    def test_get_coor_arriba(self):
        assert self.s.get_coor_arriba(self.coor) == [(1, 2)]
        assert self.s.get_coor_arriba(self.coor1) == self.coor1
        assert self.s.get_coor_arriba(self.coor2) == self.coor2
        assert self.s.get_coor_arriba(self.coor3) == [(1, 2), (1, 3)]

    def test_get_coor_izq(self):
        assert self.s.get_coor_izq(self.coor) == self.coor
        assert self.s.get_coor_izq(self.coor1) == [(1, 2)]
        assert self.s.get_coor_izq(self.coor2) == self.coor2
        assert self.s.get_coor_izq(self.coor3) == [(1, 2), (2, 2)]

    def test_encontrar_coordenadas(self):
        lista = set()
        assert not self.s.encontrar_coordenadas(self.v)
        for i in range(20):
            a = r.randint(0, 11)
            b = r.randint(0, 11)
            lista.add((a, b))
            self.s.grilla[a][b] = self.v
        assert set(self.s.encontrar_coordenadas(self.v)) == lista

    def test_eliminar_vehiculo(self):
        lista = set()
        grilla = [[None for i in range(12)] for i in range(12)]
        self.s.eliminar_vehiculo([])
        assert grilla == self.s.grilla
        for i in range(20):
            a = r.randint(0, 11)
            b = r.randint(0, 11)
            lista.add((a, b))
            self.s.grilla[a][b] = self.v
        assert not grilla == self.s.grilla
        self.s.eliminar_vehiculo(list(lista))
        assert grilla == self.s.grilla

    def test_evaluar_ataque(self):
        assert not self.s.evaluar_ataque([])
        assert not self.s.evaluar_ataque([(1, 3), (5, 3), (2, 3)])
        lista = [(i, i + 1) for i in range(9)]
        lista1 = [(i + 2, i) for i in range(5)]
        for i, j in lista:
            self.s.grilla[i][j] = self.v
        for i, j in lista1:
            self.s.grilla[i][j] = self.v1
        assert self.s.evaluar_ataque([lista[0]]) == [self.v]
        lista_aux = [lista[1], lista1[4], (11, 11)]
        assert self.s.evaluar_ataque(lista_aux) == [self.v, self.v1]