package mnohotvar;

import rup.česky.tvary.AktivníPlátno;
import rup.česky.tvary.Čtverec;
import rup.česky.tvary.Přesouvač;

import rup.česky.společně.P;

/*******************************************************************************
 * Testovací třída Sbl_MinJUnitTest slouží ke komplexnímu otestování třídy
 * Sbl_MinJUnit 
 *
 * @author    Rudolf Pecinovský
 * @author    jméno autora
 * @version   0.00.000,  0.0.2004
 */
public class Mnohotvar_13cTest extends junit.framework.TestCase
{
    private AktivníPlátno AP = AktivníPlátno.getPlátno();
    private Mnohotvar_13c pětka;
    private Čtverec ccc, csv, csz, cjz, cjv, cc;
    
    
//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří test se zadaným názvem.
     *  
     * @param název  Název konstruovaného testu
     */
    public Mnohotvar_13cTest(String název)
    {
        super( název );
    }



//== PŘÍPRAVA A ÚKLID PŘÍPRAVKU ================================================

    /***************************************************************************
     * Vytvoření přípravku (fixture), tj. sady objektů, s nimiž budou všechny
     * testy pracovat a která se proto vytvoří před spuštěním každého testu.         
     */
    protected void setUp()
    {
        AP.odstraňVše();
        AP.setKrokRozměr( 50, 6, 6 );
        AP.setMřížka( true );
        pětka = new Mnohotvar_13c( "Pětka" );
    }


    /***************************************************************************
     * Úklid po testu - tato metoda se spustí po vykonání každého testu.
     */
    protected void tearDown()
    {
    }


//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
    
    private int čekání = 500;
    
    private void ověřOblast( String počText, Mnohotvar_13c tvar, 
                             int x, int y, int šířka, int výška )
    {
        P.čekej( čekání );    //Aby byl čas si výsledek akce prohlédnout 
        String pt = "\n" + počText + ", špatná ";
        assertEquals( pt + "x-ová souřadnice", x, tvar.getX() );
        assertEquals( pt + "y-ová souřadnice", y, tvar.getY() );
        assertEquals( pt + "šířka", šířka, tvar.getŠířka() );
        assertEquals( pt + "výška", výška, tvar.getVýška() );
    }
//== VLASTNÍ TESTY =============================================================

    /***************************************************************************
     * 
     */
    public void testPrázdný()
    {
        AP.přidej( pětka );
        ověřOblast( "Prázdný tvar", pětka, 0, 0, 0, 0 );
        assertEquals( "Název neodpovídá", "Pětka", pětka.getNázev() );
    }

    
    /***************************************************************************
     * 
     */
    public void testPětka()
    {
        AP.přidej( pětka );
        pětka.přidej( ccc = new Čtverec( 100, 100, 50 ) );
        ověřOblast( "Střed", pětka, 100, 100, 50, 50 );
        pětka.přidej( csz = new Čtverec( 50, 50, 50 ) );
        ověřOblast( "SZ", pětka, 50, 50, 100, 100 );
        pětka.přidej( cjz = new Čtverec( 50, 150, 50 ) );
        ověřOblast( "JZ", pětka, 50, 50, 100, 150 );
        pětka.přidej( cjv = new Čtverec( 150, 150, 50 ) );
        ověřOblast( "JV", pětka, 50, 50, 150, 150 );
        pětka.přidej( csv = new Čtverec( 150, 50, 50 ) );
        ověřOblast( "SV", pětka, 50, 50, 150, 150 );
    }
    
    
    /***************************************************************************
     * 
     */
    public void testPosuny()
    {
        čekání = 0;
        testPětka();
        čekání = 500;
        pětka.posunVpravo();
        ověřOblast( "Posun vpravo", pětka, 100, 50, 150, 150 );
        pětka.posunDolů();
        ověřOblast( "Posun dolů", pětka, 100, 100, 150, 150 );
        pětka.posunVlevo();
        ověřOblast( "Posun vlevo", pětka, 50, 100, 150, 150 );
        pětka.posunVzhůru();
        ověřOblast( "Posun vzhůru", pětka, 50, 50, 150, 150 );
        pětka.setPozice( 0, 0 );
        ověřOblast( "Pozice[0;0]", pětka, 0, 0, 150, 150 );
        Přesouvač p = new Přesouvač( 5 );
        p.přesunNa( pětka, 150, 150 );
        ověřOblast( "Pozice[0;0]", pětka, 150, 150, 150, 150 );
    }


    /***************************************************************************
     * 
     */
    public void testRozměry()
    {
        čekání = 0;
        testPětka();
        P.čekej( 1000 );
        čekání = 1000;
        pětka.setRozměr( 50, 50 );
        ověřOblast( "Rozměr 50×50", pětka, 50, 50, 50, 50 );
        pětka.setRozměr( 5, 5 );
        ověřOblast( "Rozměr 50×50", pětka, 50, 50, 5, 5 );
        pětka.setPozice( 0, 0 );
        pětka.setRozměr( 300, 300 );
        ověřOblast( "Rozměr 150×150", pětka, 0, 0, 300, 300 );
        čekání = 500;
    }

//
//    /***************************************************************************
//     * 
//     */
//    public void testPřidejPod()
//    {
//        čekání = 0;
//        testPětka();
//        pětka.přidejPod( ccc, cc = new Čtverec( 75, 75, 100, 
//                              rup.česky.tvary.Barva.AZUROVÁ ) );
//    }
//    

    /***************************************************************************
     * 
     * /
    public void testXXX()
    {
    }
    
/**/ 
}

