/*
 * Created on 05.01.2005
 *
 * $Id: PlayerTest.java,v 1.1 2005/06/24 13:56:06 boehm Exp $
 */
package casino;

import junit.framework.TestCase;

/**
 * @author <a href="mailto:boehm@javatux.de">oliver</a>
 * @since 05.01.2005
 * @version $revision$
 */
public class PlayerTest extends TestCase {

    public static void main(String[] args) {
        junit.textui.TestRunner.run(PlayerTest.class);
    }
    
    protected Player player = null;

    /**
     * @see TestCase#setUp()
     */
    protected void setUp() throws Exception {
        player = new Player("John Player");
    }

    /**
     * Hat der Spieler ueberhaupt etwas eingesetzt?
     * Und hat er die eingesetzten Chips vom Konto abgehoben?
     */
    public final void testGetEinsatz() {
        int kontostand = player.getKontostand();
        Einsatz einsatz = player.getEinsatz();
        assertNotNull(einsatz);
        int eingesetzt = einsatz.getBetrag();
        assertTrue(eingesetzt > 0);
        assertEquals(kontostand - eingesetzt, player.getKontostand());
    }

    /**
     * Wird der Gewinn auch ordnungsgemaess auf dem Konto verbucht?
     */
    public final void testSetGewinn() {
        Einsatz gewinn = new Einsatz();
        gewinn.setPair(100);
        int kontostand = player.getKontostand();
        player.setGewinn(gewinn);
        assertEquals(kontostand + gewinn.getBetrag(), player.getKontostand());
    }
    
    /**
     * Spielen bis zum Umfallen -- wie reagiert die Anwendung auf
     * eine Konto-Ueberziehung?
     */
    public final void testBankrott() {
        Croupier croupier = new Croupier();
        croupier.login(player);
        for (int i = 1; i < 1000; i++) {
            try {
                croupier.playOneGame();
            } catch (RuntimeException e) {
                System.err.println("nach " + i + " Spielen: " + e);
                fail("warum wurde die Exception nicht abgefangen?");
            }
        }
    }

}
