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 MinguoCalendarTest {
@Parameterized.Parameters(name= "{index}: minguo({0}-{1}-{2}-{3})={4} (leap:{5})")
public static Iterable<Object[]> data() {
return Arrays.asList(
new Object[][] {
{MinguoEra.BEFORE_ROC, 12, 2, 28, "1900-02-28", false},
{MinguoEra.BEFORE_ROC, 1, 1, 1, "1911-01-01", false},
{MinguoEra.BEFORE_ROC, 1, 12, 31, "1911-12-31", false},
{MinguoEra.ROC, 1, 1, 1, "1912-01-01", true},
{MinguoEra.ROC, 89, 2, 29, "2000-02-29", true},
{MinguoEra.ROC, 104, 2, 15, "2015-02-15", false},
}
);
}
private static final CalendarSystem<MinguoCalendar> CALSYS = MinguoCalendar.axis().getCalendarSystem();
private MinguoCalendar minguo;
private long epoch;
private boolean leap;
public MinguoCalendarTest(
MinguoEra era,
int year,
int month,
int dom,
String iso,
boolean leap
) throws ParseException {
super();
this.minguo = MinguoCalendar.of(era, year, month, dom);
this.epoch = Iso8601Format.EXTENDED_CALENDAR_DATE.parse(iso).get(EpochDays.UTC);
this.leap = leap;
}
@Test
public void fromMinguo() {
assertThat(
CALSYS.transform(this.minguo),
is(this.epoch));
}
@Test
public void toMinguo() {
assertThat(
CALSYS.transform(this.epoch),
is(this.minguo));
}
@Test
public void weekday() {
assertThat(
this.minguo.getDayOfWeek(),
is(PlainDate.of(this.epoch, EpochDays.UTC).get(PlainDate.DAY_OF_WEEK)));
}
@Test
public void yearday() {
assertThat(
this.minguo.getDayOfYear(),
is(this.minguo.get(MinguoCalendar.DAY_OF_YEAR).intValue()));
}
@Test
public void isLeapYear() {
assertThat(
this.minguo.isLeapYear(),
is(this.leap));
}
@Test
public void unixDays() {
assertThat(
this.minguo.get(EpochDays.UNIX),
is(this.epoch + 2 * 365));
}
}