import java.util.Calendar;
import java.util.GregorianCalendar;

import static java.util.GregorianCalendar.DATE;
import static java.util.GregorianCalendar.FEBRUARY;
import static java.util.GregorianCalendar.MONTH;
import static java.util.GregorianCalendar.YEAR;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertThrows;

public class TestCase {

    @Test
    public void bug() {
        GregorianCalendar gc = new GregorianCalendar();
        gc.setLenient(false);
        gc.set(YEAR, 2000);
        gc.set(MONTH, FEBRUARY);
        gc.set(DATE, 29);
        assertDoesNotThrow(()->{
            gc.get(Calendar.DAY_OF_MONTH);
        }, "Should not throw IllegalArgumentException when accessing fields after setting a valid date");
        gc.set(YEAR, 2001);
        System.out.println(gc);
        assertThrows(IllegalArgumentException.class, () -> {
            gc.get(Calendar.DAY_OF_MONTH);
        }, "Should throw IllegalArgumentException when accessing fields after setting an invalid date");
    }

    @Test
    public void rightBehaviour() {
        GregorianCalendar gc = new GregorianCalendar();
        gc.setLenient(false);
        gc.set(YEAR, 2001);
        gc.set(MONTH, FEBRUARY);
        gc.set(DATE, 29);
        assertThrows(IllegalArgumentException.class, () -> {
            gc.get(Calendar.DAY_OF_MONTH);
        }, "Should throw IllegalArgumentException when accessing fields after setting an invalid date");
    }
} 