package net.time4j.calendar; import net.time4j.PlainDate; import net.time4j.engine.CalendarSystem; import net.time4j.engine.EpochDays; import net.time4j.format.expert.Iso8601Format; import net.time4j.history.HistoricEra; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import java.text.ParseException; import java.util.Arrays; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @RunWith(Parameterized.class) public class JulianCalendarTest { @Parameterized.Parameters(name= "{index}: julian({0}-{1}-{2}-{3})={4} (leap:{5})") public static Iterable<Object[]> data() { return Arrays.asList( new Object[][] { {HistoricEra.AD, 1756, 1, 1, "1756-01-12", true}, {HistoricEra.AD, 1755, 1, 1, "1755-01-12", false}, {HistoricEra.AD, 1754, 1, 1, "1754-01-12", false}, {HistoricEra.AD, 1753, 1, 1, "1753-01-12", false}, {HistoricEra.AD, 1752, 9, 3, "1752-09-14", true}, {HistoricEra.AD, 1752, 9, 2, "1752-09-13", true}, {HistoricEra.AD, 1700, 3, 1, "1700-03-12", true}, {HistoricEra.AD, 1700, 1, 1, "1700-01-11", true}, {HistoricEra.AD, 1600, 1, 1, "1600-01-11", true}, {HistoricEra.AD, 1582, 10, 15, "1582-10-25", false}, {HistoricEra.AD, 1582, 10, 5, "1582-10-15", false}, {HistoricEra.AD, 1582, 10, 4, "1582-10-14", false}, {HistoricEra.AD, 8, 1, 3, "0008-01-01", true}, {HistoricEra.AD, 4, 1, 1, "0003-12-30", true}, {HistoricEra.AD, 1, 1, 1, "0000-12-30", false}, {HistoricEra.BC, 1, 12, 31, "0000-12-29", true}, {HistoricEra.BC, 1, 1, 1, "-0001-12-30", true}, {HistoricEra.BC, 2, 1, 1, "-0002-12-30", false}, } ); } private static final CalendarSystem<JulianCalendar> CALSYS = JulianCalendar.axis().getCalendarSystem(); private JulianCalendar julian; private long epoch; private boolean leap; public JulianCalendarTest( HistoricEra era, int year, int month, int dom, String iso, boolean leap ) throws ParseException { super(); this.julian = JulianCalendar.of(era, year, month, dom); this.epoch = Iso8601Format.EXTENDED_CALENDAR_DATE.parse(iso).get(EpochDays.UTC); this.leap = leap; } @Test public void fromJulian() { assertThat( CALSYS.transform(this.julian), is(this.epoch)); } @Test public void toJulian() { assertThat( CALSYS.transform(this.epoch), is(this.julian)); } @Test public void weekday() { assertThat( this.julian.getDayOfWeek(), is(PlainDate.of(this.epoch, EpochDays.UTC).get(PlainDate.DAY_OF_WEEK))); } @Test public void yearday() { assertThat( this.julian.getDayOfYear(), is(this.julian.get(JulianCalendar.DAY_OF_YEAR).intValue())); } @Test public void isLeapYear() { assertThat( this.julian.isLeapYear(), is(this.leap)); } @Test public void lengthOfMonth() { assertThat( this.julian.lengthOfMonth(), is(this.julian.getMaximum(JulianCalendar.DAY_OF_MONTH)) ); } @Test public void unixDays() { assertThat( this.julian.get(EpochDays.UNIX), is(this.epoch + 2 * 365)); } }