package packTest;

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;

public class HorlogeTest
{
	private Horloge monHorloge;

	@Before
	public void setUp() throws Exception
	{
		// Ce code est exécuté avant chaque test.
		monHorloge = new Horloge();
	}

	@After
	public void tearDown() throws Exception
	{
		// Ce code est exécuté après chaque test
		monHorloge = null;
	}
	
	// Nous allons tester l'angle de phase de la lune à différentes dates.
	@Test
	public final void testPleineLune()
	{
		monHorloge.set (1985, 4, 4);
		monHorloge.setTimeInMillis(monHorloge.getTimeInMillis()); //Force l'appel à la méthode fille
		assertTrue (Math.cos(monHorloge.getPhase()) < -0.98);
	}

	@Test
	public final void debarquementNormandie()
	{
		// Pleine lune du 6 juin 1944, utile pour bâtir un port en pleine nuit.
		monHorloge.set (1944, 5, 6); // Attention, janvier = 0 ... décembre = 11 !
		monHorloge.setTimeInMillis(monHorloge.getTimeInMillis());
		assertTrue (Math.cos(monHorloge.getPhase()) < -0.98);
	}
	
	@Test
	public final void testPremierQuartier()
	{
		monHorloge.set (1990, 1, 2);
		monHorloge.setTimeInMillis(monHorloge.getTimeInMillis());
		assertTrue (Math.sin(monHorloge.getPhase()) > 0.98);
	}

	@Test
	public final void testDernierQuartier()
	{
		monHorloge.set (2053, 4, 10);
		monHorloge.setTimeInMillis(monHorloge.getTimeInMillis());
		assertTrue (Math.sin(monHorloge.getPhase()) < -0.98);
	}

	@Test
	@Ignore
	public final void testRate()
	{
		// Le premier novembre 2005 est une nouvelle lune.
		monHorloge.set (2005, 10, 1);
		monHorloge.setTimeInMillis(monHorloge.getTimeInMillis());
		// Test de nouvelle lune
		//assertTrue (Math.cos(monHorloge.getPhase()) > 0.98);
		
		//Test de premier quartier (il échoue)
		assertTrue (Math.sin(monHorloge.getPhase()) > 0.98);
	}
}
