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.text.ParseException;
import java.util.Arrays;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
@RunWith(Parameterized.class)
public class CopticCalendarTest {
@Parameterized.Parameters(name= "{index}: coptic({0}-{1}-{2})={3} (leap:{4})")
public static Iterable<Object[]> data() {
return Arrays.asList(
new Object[][] {
{1, 1, 1, "0284-08-29", false},
{1720, 10, 2, "2004-06-09", false},
{1721, 10, 2, "2005-06-09", false},
{1722, 10, 2, "2006-06-09", false},
{1723, 10, 2, "2007-06-09", true},
{1723, 12, 2, "2007-08-08", true},
{1723, 13, 6, "2007-09-11", true},
{1724, 1, 1, "2007-09-12", false},
{1724, 6, 1, "2008-02-09", false},
{1724, 10, 2, "2008-06-09", false},
{9999, 13, 6, "+10283-11-12", true},
}
);
}
private static final CalendarSystem<CopticCalendar> CALSYS = CopticCalendar.axis().getCalendarSystem();
private CopticCalendar coptic;
private long epoch;
private boolean leap;
public CopticCalendarTest(
int year,
int month,
int dom,
String iso,
boolean leap
) throws ParseException {
super();
this.coptic = CopticCalendar.of(year, month, dom);
this.epoch = Iso8601Format.EXTENDED_CALENDAR_DATE.parse(iso).get(EpochDays.UTC);
this.leap = leap;
}
@Test
public void fromCoptic() {
assertThat(
CALSYS.transform(this.coptic),
is(this.epoch));
}
@Test
public void toCoptic() {
assertThat(
CALSYS.transform(this.epoch),
is(this.coptic));
}
@Test
public void weekday() {
assertThat(
this.coptic.getDayOfWeek(),
is(PlainDate.of(this.epoch, EpochDays.UTC).get(PlainDate.DAY_OF_WEEK)));
}
@Test
public void yearday() {
assertThat(
this.coptic.getDayOfYear(),
is(this.coptic.get(CopticCalendar.DAY_OF_YEAR).intValue()));
}
@Test
public void isLeapYear() {
assertThat(
this.coptic.isLeapYear(),
is(this.leap));
}
@Test
public void unixDays() {
assertThat(
this.coptic.get(EpochDays.UNIX),
is(this.epoch + 2 * 365));
}
}