/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.awt.Color;
import java.util.ArrayList;
import junit.framework.TestCase;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

/**
 *
 * @author iglesias
 */
public class PartidaTest extends TestCase{

    public PartidaTest(String testName) {
        super(testName);
    }
    /**
     * Test of comprobarObjetivoCumplido method, of class Partida.
     */
    @Test
    public void testcomprobarObjetivoMision() 
    {        
        
    }
    @Test
    public void continentePerteneceJugador() {
        Partida p = new Partida();
        
        Continente C1 = new Continente("Asia");
        Continente C2 = new Continente("America del Sur");
        
        Territorio T1 = new Territorio ("Territorio C1: 1");
        Territorio T2 = new Territorio ("Territorio C1: 2");
        Territorio T3 = new Territorio ("Territorio C2: 3");
        Territorio T4 = new Territorio ("Territorio C2: 4");
        
        Jugador j = new  Jugador("JTest");
        j.setTerritorio(T1);
        j.setTerritorio(T2);
        j.setTerritorio(T3);
        j.setTerritorio(T4);
        
        T1.setJugador(j);
        T2.setJugador(j);
        T3.setJugador(j);
        T4.setJugador(j);
        
        C1.setTerritorio(T1);
        C1.setTerritorio(T2);
        C2.setTerritorio(T3);
        C2.setTerritorio(T4);
                
        assertEquals(true, p.continentePerteneceJugador(C1, j));
        assertEquals(true, p.continentePerteneceJugador(C2, j));
    }
    
    /**
     * Test of getJugador method, of class Partida.
     */
    @Test
    public void testGetJugador() {
    }

    /**
     * Test of setJugador method, of class Partida.
     */
    @Test
    public void testSetJugador() {
    }

    /**
     * Test of getTablero method, of class Partida.
     */
    @Test
    public void testGetTablero() {
    }

    /**
     * Test of setTablero method, of class Partida.
     */
    @Test
    public void testSetTablero() {
    }

    /**
     * Test of getTurno method, of class Partida.
     */
    @Test
    public void testGetTurno() {
    }

    /**
     * Test of setTurno method, of class Partida.
     */
    @Test
    public void testSetTurno() {
    }

    /**
     * Test of inicializarMapa method, of class Partida.
     */
    @Test
    public void testInicializarMapa() {
    }

    /**
     * Test of jugar method, of class Partida.
     */
    @Test
    public void testJugar() {
    }

    /**
     * Test of mover method, of class Partida.
     */
    @Test
    public void testMover() {
    }

    /**
     * Test of buscarTerritorioPorId method, of class Partida.
     */
    @Test
    public void testBuscarTerritorioPorId() {
    }

    /**
     * Test of asignarEjercitos method, of class Partida.
     */
    @Test
    public void testAsignarEjercitos() {
    }

    /**
     * Test of porTerritorioConquistado method, of class Partida.
     */
    @Test
    public void testPorTerritorioConquistado() {
    }

    /**
     * Test of porContinenteConquistado method, of class Partida.
     */
    @Test
    public void testPorContinenteConquistado() {
        
        Partida p = new Partida();
        Jugador jugador = new Jugador("Jugador Continene Conquistado");
        p.setJActivo(jugador);
        
        Continente C1 = new Continente("Asia");
        C1.setArmadasPorSerConquistado(7);
        Continente C2 = new Continente("América del Sur");
        C2.setArmadasPorSerConquistado(2);
        
        ArrayList<Continente> arrayC = new ArrayList<Continente>();
        arrayC.add(C1);
        arrayC.add(C2);
        Tablero t = new Tablero(arrayC);
        p.setTablero(t);
        
        Territorio T1 = new Territorio ("Territorio C1: 1");
        Territorio T2 = new Territorio ("Territorio C1: 2");
        Territorio T3 = new Territorio ("Territorio C2: 3");
        Territorio T4 = new Territorio ("Territorio C2: 4");                
        
        /*La prueba se realiza quitando las relaciones entre jugadores y territorios*/
        jugador.setTerritorio(T1);
        jugador.setTerritorio(T2);
        jugador.setTerritorio(T3);
        jugador.setTerritorio(T4);
        
        
        T1.setJugador(jugador);
        //T2.setJugador(jugador);
        T3.setJugador(jugador);
        T4.setJugador(jugador);
        /*****************************************************************************/
        
        C1.setTerritorio(T1);
        C1.setTerritorio(T2);
        C2.setTerritorio(T3);
        C2.setTerritorio(T4);                                
        
        assertEquals(2, p.porContinenteConquistado(jugador));   
    }

    /**
     * Test of porCambioDeCartas method, of class Partida.
     */
    @Test
    public void testPorCambioDeCartas() {
    }

    /**
     * Test of comprobarCombinaciones method, of class Partida.
     */
    @Test
    public void testComprobarCombinaciones() {
    }

    /**
     * Test of cambiarCartasPorEjercitos method, of class Partida.
     */
    @Test
    public void testCambiarCartasPorEjercitos() {
    }

    /**
     * Test of eliminarCartasDelJugador method, of class Partida.
     */
    @Test
    public void testEliminarCartasDelJugador() {
    }

    /**
     * Test of devolverNumeroArmadas method, of class Partida.
     */
    @Test
    public void testDevolverNumeroArmadas() {
    }

    /**
     * Test of porCartaTerritorioPoseido method, of class Partida.
     */
    @Test
    public void testPorCartaTerritorioPoseido() {
    }

    /**
     * Test of obtenerCarta method, of class Partida.
     */
    @Test
    public void testObtenerCarta() 
    {
        /*El único problema que puede presentar este metodo es que el array de cartas este vacio
         por tanto, lo vamos a probar bajo esa restricción*/
                
        Tablero t = new Tablero();                                        
        t.setMCartasTerritorio(new ArrayList<CartaDeTerritorio>());                
        
        assertEquals(null, t.devolverCarta());
        
        //Si añadimos una carta al array anterior, deve dovolver esta nueva carta
        CartaDeTerritorio c = new CartaDeTerritorio(new Territorio("Terri1"), "Artilleria");        
        t.setMCartasTerritorio(c);
               
        assertEquals(c, t.devolverCarta());
        
    }

    /**
     * Test of comprobarObjetivoCumplido method, of class Partida.
     */
    @Test
    public void testComprobarObjetivoCumplido() {
    }

    /**
     * Test of comprobarObjetivoConquista method, of class Partida.
     */
    @Test
    public void testComprobarObjetivoConquista() {
        Partida p = new Partida();
        Tablero t = new Tablero();                
        
        Territorio T1 = new Territorio ("Territorio C1: 1");
        Territorio T2 = new Territorio ("Territorio C1: 2");
        Territorio T3 = new Territorio ("Territorio C2: 3");
        Territorio T4 = new Territorio ("Territorio C2: 4");
        
        Jugador j = new  Jugador("JugadorObjetivoConquista");
        
        j.setTerritorio(T1);
        j.setTerritorio(T2);
        j.setTerritorio(T3);
        j.setTerritorio(T4);
        
        T1.setJugador(j);
        T2.setJugador(j);
        T3.setJugador(j);
        T4.setJugador(j);
        
        ArrayList<Territorio> arrayT = new ArrayList<Territorio>();
        
        arrayT.add(T1);
        arrayT.add(T2);
        arrayT.add(T3);
        arrayT.add(T4);        
        
        t.setTerritorio(arrayT);        
        p.setTablero(t);
        
        assertEquals(true, p.comprobarObjetivoConquista(j));
        
        /*Le quito un territorio al jugador pero no al tablero*/
        arrayT.remove(0);
        
        assertEquals(false, p.comprobarObjetivoConquista(j));

    }

    /**
     * Test of comprobarObjetivoCapital method, of class Partida.
     */
    @Test
    public void testComprobarObjetivoCapital() {
        
        Partida p = new Partida();
        
        Jugador j1 = new Jugador("Jugandor1 Capitales");
        Jugador j2 = new Jugador("Jugandor2 Capitales");
        Jugador j3 = new Jugador("Jugandor3 Capitales");
        Jugador j4 = new Jugador("Jugandor4 Capitales");
        Jugador j5 = new Jugador("Jugandor4 Capitales");
        ArrayList<Jugador> arrayJugadores = new ArrayList<Jugador>();
        arrayJugadores.add (j1);arrayJugadores.add (j2);arrayJugadores.add (j3);
        arrayJugadores.add (j4);//arrayJugadores.add (j5);
        
        p.setJugador(arrayJugadores);
        
        Tablero t = new Tablero();
        
        Territorio T1 = new Territorio ("Territorio 1");
        Territorio T2 = new Territorio ("Territorio 2");
        Territorio T3 = new Territorio ("Territorio 3");
        Territorio T4 = new Territorio ("Territorio 4");
        Territorio T5 = new Territorio ("Territorio 5");
                
        
        j1.setTerritorio(T1);
        j1.setTerritorio(T2);
        j1.setTerritorio(T3);
        j1.setTerritorio(T4);
        j2.setTerritorio(T5);
        
        T1.setJugador(j1);
        T2.setJugador(j1);
        T3.setJugador(j1);
        T4.setJugador(j1);
        T5.setJugador(j2);
        
        j1.setMiCapital(T1);
        T1.setEsCapital(true);
        T2.setEsCapital(true);
        T3.setEsCapital(true);
        //T4.setEsCapital(true);
        
        ArrayList<Territorio> arrayT = new ArrayList<Territorio>();        
        arrayT.add(T1);
        arrayT.add(T2);
        arrayT.add(T3);
        arrayT.add(T4);        
        arrayT.add(T5);
        
        t.setTerritorio(arrayT);        
        p.setTablero(t);
        
        assertEquals(true, p.comprobarObjetivoCapital(j1));
        
                
    }

    /**
     * Test of comprobarObjetivoMision method, of class Partida.
     */
    @Test
    public void testComprobarObjetivoMision() {
        
        Partida p = new Partida();
        
        Jugador j = new Jugador("Jugador Test Mision");
        
        ArrayList<CartaMision> mCartasMision = new ArrayList<CartaMision>();
        mCartasMision.add(new CartaMision("24Territorios", "Ocupar"));
        mCartasMision.add(new CartaMision("18Territorios", "Ocupar"));        
        mCartasMision.add(new CartaMision("Asia-America del Sur", "ConquistarContinentes"));
        mCartasMision.add(new CartaMision("Asia-Africa", "ConquistarContinentes"));
        mCartasMision.add(new CartaMision("AmericaNorte-Africa", "ConquistarContinentes"));
        mCartasMision.add(new CartaMision("AmericaNorte-Australasia", "ConquistarContinentes"));
        mCartasMision.add(new CartaMision(Color.RED.toString(), "Destruir"));
        mCartasMision.add(new CartaMision(Color.BLUE.toString(), "Destruir"));
        mCartasMision.add(new CartaMision(Color.GREEN.toString(), "Destruir"));
        mCartasMision.add(new CartaMision(Color.ORANGE.toString(), "Destruir"));
        mCartasMision.add(new CartaMision(Color.YELLOW.toString(), "Destruir"));
        mCartasMision.add(new CartaMision(Color.PINK.toString(), "Destruir"));
        
        /*Prueba para la primera mision*/
        j.setCartaMision(mCartasMision.get(0));
        
        ArrayList<Territorio> mTerritorios = new ArrayList<Territorio>();
        for (int i=0; i<24; i++)
        {
            Territorio t = new Territorio("Territorio "+i);
            t.setNumEjercitos(1);
            mTerritorios.add(t);
        }        
        j.setTerritorio(mTerritorios);                        
        assertEquals(true, p.comprobarObjetivoMision(j));
        
        
        /*Prueba para la segunda mision*/
        j.setCartaMision(mCartasMision.get(1));        
        
        mTerritorios = new ArrayList<Territorio>();
        for (int i=0; i<18; i++)
        {
            Territorio t = new Territorio("Territorio "+i);
            t.setNumEjercitos(3);
            mTerritorios.add(t);
        }        
        j.setTerritorio(mTerritorios);        
        assertEquals(true, p.comprobarObjetivoMision(j));
        
        mTerritorios = new ArrayList<Territorio>();
        for (int i=0; i<18; i++)
        {
            Territorio t = new Territorio("Territorio "+i);
            t.setNumEjercitos(1);
            mTerritorios.add(t);
        }        
        j.setTerritorio(mTerritorios);
        assertEquals(false, p.comprobarObjetivoMision(j));
        
        
        /*Comprobando las cartas de conquista de Continentes*/       
        ArrayList <Continente> C = new ArrayList<Continente>();
        Continente C1 = new Continente("Asia");
        Continente C2 = new Continente("America del Sur");                                
        
        Territorio T1 = new Territorio ("Territorio C1: 1");
        Territorio T2 = new Territorio ("Territorio C1: 2");
        Territorio T3 = new Territorio ("Territorio C2: 3");
        Territorio T4 = new Territorio ("Territorio C2: 4");
        
        j.setTerritorio(T1);
        j.setTerritorio(T2);
        j.setTerritorio(T3);
        j.setTerritorio(T4);
        
        T1.setJugador(j);
        T2.setJugador(j);
        T3.setJugador(j);
        T4.setJugador(j);
        
        C1.setTerritorio(T1);
        C1.setTerritorio(T2);
        C2.setTerritorio(T3);
        C2.setTerritorio(T4);
        
        C.add(C1);C.add(C2);
        
        p.setTablero(new Tablero(C));        
        j.setCartaMision(mCartasMision.get(2));
        assertEquals(true, p.comprobarObjetivoMision(j));
     
        
        /*Comprobando la mision destruir*/
        j.setCartaMision(mCartasMision.get(6));
                
        
        Jugador j2 = new Jugador("Jugador2 Test Mision");
        ArrayList<Territorio> arrayTerri = new ArrayList<Territorio>();        
        j2.setTerritorio(arrayTerri);
        j2.setColor(Color.RED);
        
        ArrayList<Jugador> arrayJugadores = new ArrayList<Jugador>();        
        j.setColor(Color.BLUE);
        arrayJugadores.add(j); 
        arrayJugadores.add(j2);        
        p.setJugador(arrayJugadores);
        
        /*Porbando sin ningun territorio debe ser cierto el objetivo cumplido*/
        assertEquals(true, p.comprobarObjetivoMision(j));        
        
        /*Pruebo ahora con un territorio*/
        arrayTerri.add(new Territorio());
        j2.setTerritorio(arrayTerri);
        
        assertEquals(false, p.comprobarObjetivoMision(j));
        
    }

    /**
     * Test of continentePerteneceJugador method, of class Partida.
     */
    @Test
    public void testContinentePerteneceJugador() {
    }

    /**
     * Test of buscarJugadorPorColor method, of class Partida.
     */
    @Test
    public void testBuscarJugadorPorColor() {
    }

    /**
     * Test of guardarPartida method, of class Partida.
     */
    @Test
    public void testGuardarPartida() {
    }
}