package pokusy;

/*******************************************************************************
 * Testovací třída BezDědičnosti slouží ke komplexnímu otestování pokusných 
 * tříd Mataka - Dcera - Vnučka nezávisle na zavedení vztahů dědičnosti.
 *
 * @author    Rudolf Pecinovský
 * @version   1.00,  05.2004
 */
public class BezDědičnosti extends junit.framework.TestCase
{
//  private Matka  matka;
//  private Dcera  dcera;
//  private Vnučka vnučka;

    private Object  matka;
    private Object  dcera;
    private Object  vnučka;



//##############################################################################
//== 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()
    {
        System.out.print( "\f" );
        matka  = new Matka("");
        dcera  = new Dcera();
        vnučka = new Vnučka();
    }


    /***************************************************************************
     * Úklid po testu - tato metoda se spustí po vykonání každé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 testXXX()
    {
    }
    
/**/ 

    /***************************************************************************
     * Otestuje parametrické verze konstruktorů všech tří testovaných tříd
     * a demonstruje na nich, jak dceřiný konstrukto zavolá pře začátkem 
     * své práce konstruktor rodičovského podobjektu.
     */
    public void testParametrickéKonstruktory()
    {
        matka  = new Matka ( "MATKA"  );
        dcera  = new Dcera ( "DCERA"  );
        vnučka = new Vnučka( "VNUČKA" );
    }


    /***************************************************************************
     * Spustí pro každou instanci metodu, která se jmenuje stejně jako
     * vlastní třída této instance a je v této třídě definována. 
     * Výstup je určen pro srovnání s výstupem testu MatkaMatkaMatka.
     */
    public void testMatkaDceraVnučka()
    {
        Matka.zpráva("\nInstance matka" );
        ((Matka)matka).matka();
        
        Dcera.zpráva("\nInstance dcera" );
        ((Dcera)dcera).dcera();
        
        Vnučka.zpráva("\nInstance vnučka" );
        ((Vnučka)vnučka).vnučka();
    }


    /***************************************************************************
     * Spustí pro každou instanci metodu matka() definovanou ve třídě Matka.
     * Pro dceru a vnučku se tak spustí zděděná metoda se všemi důsledky.     
     * Výstup je určen pro srovnání s výstupem testu MatkaDceraVnučka.
     * Ke svému spuštění již vyžaduje zavedení dědických vazeb.     
     */
    public void testMatkaMatkaMatka()
    {
        Matka.zpráva("\nInstance matka" );
        ((Matka)matka).matka();
        
        Dcera.zpráva("\nInstance dcera" );
        ((Matka)dcera).matka();
        
        Vnučka.zpráva("\nInstance vnučka" );
        ((Matka)vnučka).matka();
    }


    /***************************************************************************
     * Demonstruje vliv volání rodičovských verzí překrytých metod
     * na způsob jejich provedení.     
     * Ke svému spuštění již vyžaduje zavedení dědických vazeb.     
     */
    public void testSuper()
    {
        System.out.println("\nVolám dcera.rodiče\n");
        ((Dcera)dcera).rodiče();
        System.out.println("\nVolám vnučka.rodiče\n");
        ((Vnučka)vnučka).rodiče();
    }
    

    
    /***************************************************************************
     * Demonstruje nezávislost statických metod na definici stejnojmenné
     * statické metody v dceřiné třídě.
     */
    public void testZprávy()
    {
        ((Matka)matka).zprávy();
        ((Dcera)dcera).zprávy();
        ((Vnučka)vnučka).zprávy();
    }

}
//public class BezDědičnosti extends junit.framework.TestCase

