/*******************************************************************************
 * Testovací třída UFOTest slouí ke komplexnímu otestování
 * třídy ...
 *
 * @author     Rudolf Pecinovský
 * @version    1.00, červen 2004
 */
public class UFOTest extends junit.framework.TestCase
{
    Dispečer dispečer;
    UFO      u1;

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

    /***************************************************************************
     * Vytvoření přípravku (fixture), tj. sady objektů, s nimi budou vechny
     * testy pracovat a která se proto vytvoří před sputěním kadého testu.         
     */
    protected void setUp()
    {
    }


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


//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== VLASTNÍ TESTY =============================================================

    /***************************************************************************
     * 
     */
    public void testUFO()
    {
        final int    TV   = Dispečer.TV;
        final double DTAH = UFO.DTAH;
        final int    f    = 4;  //frekvence

        double px=TV,  py=TV;   //Pozice
        double rx=0,   ry=0;    //rychlsot
        double tx=0,   ty=0;    //tah
        
        dispečer = Dispečer.getDispečer( 1, false );
        u1 = dispečer.přistavUFO();
        //----------------------------------------------------------------------
        assertEquals( "patně nastavená vodorovná počáteční souřadnice", 
                      px, u1.getX(), .01 );
        assertEquals( "patně nastavená svislá počáteční souřadnice", 
                      py, u1.getY(), .01 );
        assertEquals( "patně nastavená počáteční vodorovná rychlost", 
                      rx, u1.getXRychlost(), .01 );
        assertEquals( "patně nastavená počáteční svislá rychlost", 
                      ry, u1.getYRychlost(), .01 );
        assertEquals( "patně nastavený počáteční vodorovný tah", 
                      tx, u1.getXTah(), .01 );
        assertEquals( "patně nastavený počáteční svislý tah", 
                      ty, u1.getXTah(), .01 );
        //----------------------------------------------------------------------
        rx = 16;
        ry = 32;
        u1.setRychlost( rx, ry );
        assertEquals( "Metoda setRychlost patně nastavuje vodorovnou rychlost", 
                      rx, u1.getXRychlost(), .01 );
        assertEquals( "Metoda setRychlost patně nastavuje svislou rychlost", 
                      ry, u1.getYRychlost(), .01 );
        u1.popojeď( 1 );
        assertEquals( "Metoda Popojeď patně nastavuje vodorovnou souřadnici" +
                      " při nulovém tahu motorů a jednotkové frekvenci", 
                      px+=rx, u1.getX(), .01 );
        assertEquals( "Metoda Popojeď patně nastavuje svislou souřadnici" +
                      " při nulovém tahu motorů a jednotkové frekvenci", 
                      py+=ry, u1.getY(), .01 );
        //----------------------------------------------------------------------
        u1.vlevo();
        assertEquals( "Metoda vlevo patně nastavuje vodorovný tah", 
                      tx-=DTAH, u1.getXTah(), .01 );
        u1.vlevo();
        assertEquals( "Metoda vlevo patně nastavuje vodorovný tah", 
                      tx-=DTAH, u1.getXTah(), .01 );
        assertEquals( "Metoda vlevo patně nastavuje svislý tah", 
                      ty, u1.getYTah(), .01 );
        //----------------------------------------------------------------------
        u1.vzhůru();
        assertEquals( "Metoda vzhůru patně nastavuje svislý tah", 
                      ty-=DTAH, u1.getYTah(), .01 );
        u1.vzhůru();
        assertEquals( "Metoda vzhůru patně nastavuje svislý tah", 
                      ty-=DTAH, u1.getYTah(), .01 );
        assertEquals( "Metoda vzhůru patně nastavuje vodorovný tah", 
                      tx, u1.getXTah(), .01 );
        //----------------------------------------------------------------------
        u1.vypniMotory();
        assertEquals( "Metoda vypniMotory nevypíná vodorovný tah", 
                      tx=0, u1.getXTah(), .01 );
        assertEquals( "Metoda vypniMotory nevypíná svislý tah", 
                      ty=0, u1.getYTah(), .01 );
        //----------------------------------------------------------------------
        u1.vpravo();
        assertEquals( "Metoda vpravo patně nastavuje vodorovný tah", 
                      tx+=DTAH, u1.getXTah(), .01 );
        u1.vpravo();
        assertEquals( "Metoda vpravo patně nastavuje vodorovný tah", 
                      tx+=DTAH, u1.getXTah(), .01 );
        u1.vpravo();
        assertEquals( "Metoda vpravo patně nastavuje vodorovný tah", 
                      tx+=DTAH, u1.getXTah(), .01 );
        assertEquals( "Metoda vpravo patně nastavuje svislý tah", 
                      ty, u1.getYTah(), .01 );
        //----------------------------------------------------------------------
        u1.dolů();
        assertEquals( "Metoda dolů patně nastavuje svislý tah", 
                      ty+=DTAH, u1.getYTah(), .01 );
        u1.dolů();
        assertEquals( "Metoda dolů patně nastavuje svislý tah", 
                      ty+=DTAH, u1.getYTah(), .01 );
        assertEquals( "Metoda dolů patně nastavuje vodorovný tah", 
                      tx, u1.getXTah(), .01 );
        //----------------------------------------------------------------------
        u1.popojeď( 1 );
        assertEquals( "Metoda popojeď ovlivňuje vodorovný tah", 
                      tx, u1.getXTah(), .01 );
        assertEquals( "Metoda popojeď ovlivňuje svislý tah", 
                      ty, u1.getYTah(), .01 );
        assertEquals( "Metoda Popojeď patně nastavuje vodorovnou rychlost" +
                      " při NEnulovém tahu motorů a jednotkové frekvenci", 
                      rx+=tx, u1.getXRychlost(), .01 );
        assertEquals( "Metoda Popojeď patně nastavuje svislou rychlost" +
                      " při NEnulovém tahu motorů a jednotkové frekvenci", 
                      ry+=ty, u1.getYRychlost(), .01 );
        assertEquals( "Metoda Popojeď patně nastavuje vodorovnou souřadnici" +
                      " při NEnulovém tahu motorů a jednotkové frekvenci", 
                      px+=rx, u1.getX(), .01 );
        assertEquals( "Metoda Popojeď patně nastavuje svislou souřadnici" +
                      " při NEnulovém tahu motorů a jednotkové frekvenci", 
                      py+=ry, u1.getY(), .01 );
        //----------------------------------------------------------------------
        u1.popojeď( f );
        assertEquals( "Metoda Popojeď patně nastavuje vodorovnou rychlost" +
                      " při NEnulovém tahu motorů a NEjednotkové frekvenci", 
                      rx+=tx/f, u1.getXRychlost(), .01 );
        assertEquals( "Metoda Popojeď patně nastavuje svislou rychlost" +
                      " při NEnulovém tahu motorů a NEjednotkové frekvenci", 
                      ry+=ty/f, u1.getYRychlost(), .01 );
        assertEquals( "Metoda Popojeď patně nastavuje vodorovnou souřadnici" +
                      " při NEnulovém tahu motorů a NEjednotkové frekvenci", 
                      px+=rx/f, u1.getX(), .01 );
        assertEquals( "Metoda Popojeď patně nastavuje svislou souřadnici" +
                      " při NEnulovém tahu motorů a NEjednotkové frekvenci", 
                      py+=ry/f, u1.getY(), .01 );
    }
    


    /***************************************************************************
     * 
     */
    public void testRychlost()
    {
        Dispečer dispečer = Dispečer.getDispečer();
        UFO u1 = dispečer.přistavUFO();
            u1.setRychlost(10,10);
        UFO u2 = dispečer.přistavUFO();
            u2.setRychlost(8,12);
        UFO u3 = dispečer.přistavUFO();
            u3.setRychlost(6,12);
        UFO u4 = dispečer.přistavUFO();
            u4.setRychlost(4,15);
        UFO u5 = dispečer.přistavUFO();
            u5.setRychlost(0,20);
    }
    

    /***************************************************************************
     * Vytvoří standardnío dispečera a spustí tak hru.
     */
    public void testHra()
    {
        Dispečer dispečer = Dispečer.getDispečer();
    }
    

    /***************************************************************************
     * Vytvoří standardnío dispečera a spustí tak hru.
     */
    public void testHra_3a()
    {
        Dispečer dispečer = Dispečer.getDispečer();
        dispečer.pouijUFO_3a();
    }
    

    /***************************************************************************
     * Vytvoří standardnío dispečera a spustí tak hru.
     */
    public void testRychlost_3a()
    {
        Dispečer dispečer = Dispečer.getDispečer();
        dispečer.pouijUFO();
        testRychlost();
    }
    

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

