import java.util.Random;
import org.junit.Test;
import static org.junit.Assert.*;

/**
 * Se auto to unit test elegxoume gia to an oi duo klaseis Date kai MyNewDate douleuoun swsta
 *
 * NetBeans: Gia na dimiourgisete ena JUnit test patate deksi klik sto arxeio pou 8elete (p.x. Date.java)
 * kai meta Tools->Create JUnit Tests... Sto para8uro pou anoigei patate ok kai sas dimiourgei ena
 * neo arxeio me onoma DataTest.java kai arketes me8odous: mia gia ka8e me8odo tis basikis sas klasis
 *
 * Se auto to junit test elegxoume mono tis me8odous getDay, getMonth, setDay. Kanonika prepei na uparxoun
 * elegxoi gia oles tis me8ous. Dimiourgoume ena test (diladi public me8odo) ana me8odo tis basikis klasis.
 *
 * @author Vouzoukidou Nelly, email: vuzukid (at) csd (dot) uoc (dot) gr
 */
public class DateTest {

    public DateTest() {
    }

    /**
     * Test of getDay method, of class Date.
     */
    @Test
    public void testGetDay() {
        System.out.println("getDay");
        MyNewDate instance = new MyNewDate(14, 10, 2010);
        Date instance2 = new Date(14, 10, 2010);
        int a = instance.getDay();
        int b = instance2.getDay();

        // An to a != 14 8a petaksei la8os
        assertEquals(a, 14);
        // An to b != 14 8a petaksei la8os
        assertEquals(b, 14);

        // An perasoun ta parapanw apla tests kanoume pio sun8eta tests:
        // Bazoume gia 1000 epanalipseis na dokimasei 1000 fores na dimiourgisei imerominies me tuxaies (egkures)
        // meres.
        // To parakatw test 8a apotuxei kapoia stigmi: Mporeite na breite to la8os ston kwdika tis MyNewDate.java?
        Random r = new Random();
        int numberOfTest = 1000;
        for (int i = 0; i < numberOfTest; i++) {
            int day = r.nextInt(30) + 1; // tuxaio noumero apo 1-30
            int month = r.nextInt(12) + 1; // tuxaio noumero apo 1-12
            int year = r.nextInt(4000) + 1; // tuxaio noumero apo 1-4000
            MyNewDate randomDate1 = new MyNewDate(day, month, year);
            Date randomDate2 = new Date(day, month, year);

            assertEquals(randomDate2.getDay(), randomDate1.getDay());
        }
    }

    /**
     * Test of getMonth method, of class Date.
     */
    @Test
    public void testGetMonth() {
        System.out.println("getMonth");
        MyNewDate instance = new MyNewDate(14, 10, 2010);
        Date instance2 = new Date(14, 10, 2010);
        int a = instance.getMonth();
        int b = instance2.getMonth();
        assertEquals(a, b);
        assertEquals(a, 10);

    }

    @Test
    public void testSetDay() {
        Date date = new Date(14, 10, 2010);
        date.setDay(15);
        int a = date.getDay();
        assertEquals(a, 15);

        try {
            // Edw perimenoume na petaksei Exception
            date.setDay(32);
            // An den petaksei, tote mono 8a ftasei se auti ti grammi tou kwdika:
            // prepei na apotuxei auto to test:
            fail(); // i me8odos fail() kanei to test na apotuxei
        } catch (Exception e) {
            // swsto
            assertEquals(date.getDay(), 15);
        }
    }
}