package junit.samples;

import junit.framework.*;

import java.io.*;

/**
 * Some simple tests.
 *
 */
public class KontoTest1 extends TestCase {

	private Konto k1;
	private Konto k2;
	private Konto k3;
	private Konto k4;


	public void testAdd() {
		// 100 + 20 = 120
		k1.add(20);
		assertEquals(k1.getBetrag(), 120.0, 0.0001);
	}

	public void testPrint() {
		assertEquals("[ Name: Müller   Betrag: 100.0 ]", k1.toString());
	}


	public void testSub1() {
		// 100 - 20 = 80}
		k1.sub(20);
		assertEquals(k1.getBetrag(), 80.0,0.0);
	}

	public void testSub2() {
		// 100 - 20 = 80}
		k1.sub(20);
		assertEquals(k1.getBetrag(), 80.0 , 0.0001);
	}

	public void testSievers() {
		// 100 - 20 = 120
    double d1,d2;
    d1 = k1.getBetrag();
    k1.sub(20);
		assertEquals(k1.getBetrag(), d1-20.0 , 0.0);
	}

	public void testNumerik() {
		// 0.1+0.1+0.1   = 0.3
    k1.setBetrag(0.0);
    k1.add(0.1);
    k1.add(0.1);
    k1.add(0.1);
		assertEquals(k1.getBetrag(),
     0.3 , 0.000000000000001);
	}

  public void testSummen() {
    double s1, s2;
    s1 = k1.getBetrag() + k2.getBetrag() + k3.getBetrag() + k4.getBetrag();
      k1.add(20.0);
      k2.sub(20.0);

      k1.add(60.0);
      k4.sub(60.0);

      k3.add(25.0);
      k2.sub(24.0);

      s2 = k1.getBetrag() + k2.getBetrag() + k3.getBetrag() + k4.getBetrag();
      assertEquals(s1, s2, 0.0001);
  } // testSummen


   // Wird jeweils pro Test neu aufgerufen !!
  protected void setUp() {
    k1 = new Konto(100.0, "Müller");
    k2 = new Konto(200.0, "Schmidt");
    k3 = new Konto(300.0, "Meyer");
    k4 = new Konto(400.0, "Schulze");
  }

    // Wird jeweils pro Test am Ende aufgerufen !!
  protected void tearDown() {

  }

	public static Test suite() {
		return new TestSuite(KontoTest1.class);
	}

	public static void main (String[] args) {
      // starte alle public test*()
		junit.textui.TestRunner.run( suite() );
		junit.swingui.TestRunner.run( KontoTest1.class );
    pause();
	}

   private static void pause() {
    try {
      System.in.read();
    }
    catch (IOException e) {
    }
  }  // pause


}

class Konto {
	private double _betrag;
	private String _name;

	public Konto(double betrag, String name) {
		 _betrag = betrag;
		 _name = name;
	}
	public void add (double betrag) {
		_betrag += betrag;
	}
	public void sub (double betrag) {
		_betrag -= betrag;
	}


	public double getBetrag() {
		return _betrag;
	}
	public void setBetrag(double betrag) {
		_betrag  = betrag;
	}

	public String getName() {
		return _name;
	}

	public String toString() {
		return new String( "[ Name: "+getName()+
                    "   Betrag: "+getBetrag()+" ]");
	}
}
