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 org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import java.io.IOException; 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 DiyanetDataTest { @Parameterized.Parameters(name= "{index}: diyanet({0}-{1}-{2})={3} /month-length={4}") public static Iterable<Object[]> data() { return Arrays.asList( new Object[][]{ {1318, 1, 1, "1900-05-01", 30}, {1436, 11, 30, "2015-09-14", 30}, {1436, 12, 1, "2015-09-15", 29}, {1444, 5, 29, "2022-12-23", 29}, } ); } private static final CalendarSystem<HijriCalendar> CALSYS; static { try { CALSYS = new AstronomicalHijriData(HijriCalendar.VARIANT_DIYANET); } catch (IOException e) { throw new IllegalStateException(e); } } private HijriCalendar diyanet; private long epoch; private int mlen; public DiyanetDataTest( int year, int month, int dom, String iso, int mlen ) throws ParseException { super(); this.diyanet = HijriCalendar.of(HijriCalendar.VARIANT_DIYANET, year, month, dom); this.epoch = Iso8601Format.EXTENDED_CALENDAR_DATE.parse(iso).get(EpochDays.UTC); this.mlen = mlen; } @Test public void fromHijri() { assertThat( CALSYS.transform(this.diyanet), is(this.epoch)); } @Test public void toHijri() { assertThat( CALSYS.transform(this.epoch), is(this.diyanet)); } @Test public void weekday() { assertThat( this.diyanet.getDayOfWeek(), is(PlainDate.of(this.epoch, EpochDays.UTC).get(PlainDate.DAY_OF_WEEK))); } @Test public void yearday() { assertThat( this.diyanet.getDayOfYear(), is(this.diyanet.get(HijriCalendar.DAY_OF_YEAR).intValue())); } @Test public void unixDays() { assertThat( this.diyanet.get(EpochDays.UNIX), is(this.epoch + 2 * 365)); } @Test public void lengthOfMonth() { assertThat( this.diyanet.lengthOfMonth(), is(this.mlen) ); } }