-
Bug
-
Resolution: Not an Issue
-
P4
-
None
-
17
-
generic
-
generic
A DESCRIPTION OF THE PROBLEM :
A bug exists in the Calendar class (specifically in GregorianCalendar) where it fails to properly validate date field combinations in non-lenient mode after individual fields are modified.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
junit
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
all testcase passed
ACTUAL -
"bug" failed
---------- BEGIN SOURCE ----------
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);
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");
}
}
---------- END SOURCE ----------
A bug exists in the Calendar class (specifically in GregorianCalendar) where it fails to properly validate date field combinations in non-lenient mode after individual fields are modified.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
junit
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
all testcase passed
ACTUAL -
"bug" failed
---------- BEGIN SOURCE ----------
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);
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");
}
}
---------- END SOURCE ----------