package pokusy;

/*******************************************************************************
 * Testovací třída SDědičností slouží ke komplexnímu otestování pokusných
 * tříd Mataka - Dcera - Vnučka po zavedení vztahů dědičnosti.
 *
 * @author    Rudolf Pecinovský
 * @version   1.00,  05.2004
 */
public class SDědičností extends junit.framework.TestCase
{
    private Matka  matka;
    private Dcera  dcera;
    private Vnučka 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();
        
        Dcera.zpráva("\nInstance dcera" );
        dcera.dcera();
        
        Vnučka.zpráva("\nInstance 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.
     */
    public void testMatkaMatkaMatka()
    {
        Matka.zpráva("\nInstance matka" );
        matka.matka();
        
        Dcera.zpráva("\nInstance dcera" );
        dcera.matka();
        
        Vnučka.zpráva("\nInstance vnučka" );
        vnučka.matka();
    }


    /***************************************************************************
     * Demonstruje vliv volání rodičovských verzí překrytých metod
     * na způsob jejich provedení.     
     */
    public void testSuper()
    {
        System.out.println("\nVolám dcera.rodiče\n");
        dcera.rodiče();
        System.out.println("\nVolám vnučka.rodiče\n");
        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.zprávy();
        dcera.zprávy();
        vnučka.zprávy();
    }
}
//public class SDědičností extends junit.framework.TestCase

