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 ThaiSolarCalendarTest {
@Parameterized.Parameters(name= "{index}: thai-solar({0}-{1}-{2}-{3})={4} (leap:{5})")
public static Iterable<Object[]> data() {
return Arrays.asList(
new Object[][] {
{ThaiSolarEra.BUDDHIST, 2430, 1, 1, "1888-01-01", true},
{ThaiSolarEra.RATTANAKOSIN, 106, 2, 29, "1888-02-29", true},
{ThaiSolarEra.BUDDHIST, 2430, 2, 29, "1888-02-29", true},
{ThaiSolarEra.BUDDHIST, 2431, 4, 1, "1888-04-01", false},
{ThaiSolarEra.BUDDHIST, 2482, 4, 1, "1939-04-01", true},
{ThaiSolarEra.BUDDHIST, 2482, 12, 31, "1939-12-31", true},
{ThaiSolarEra.BUDDHIST, 2482, 1, 1, "1940-01-01", true},
{ThaiSolarEra.BUDDHIST, 2482, 3, 31, "1940-03-31", true},
{ThaiSolarEra.BUDDHIST, 2483, 4, 1, "1940-04-01", false},
{ThaiSolarEra.BUDDHIST, 2483, 12, 31, "1940-12-31", false},
{ThaiSolarEra.BUDDHIST, 2484, 1, 1, "1941-01-01", false},
{ThaiSolarEra.BUDDHIST, 2547, 8, 15, "2004-08-15", true},
{ThaiSolarEra.BUDDHIST, 2558, 3, 15, "2015-03-15", false},
}
);
}
private static final CalendarSystem<ThaiSolarCalendar> CALSYS = ThaiSolarCalendar.axis().getCalendarSystem();
private ThaiSolarCalendar thai;
private long epoch;
private boolean leap;
public ThaiSolarCalendarTest(
ThaiSolarEra era,
int year,
int month,
int dom,
String iso,
boolean leap
) throws ParseException {
super();
this.thai = ThaiSolarCalendar.of(era, year, month, dom);
this.epoch = Iso8601Format.EXTENDED_CALENDAR_DATE.parse(iso).get(EpochDays.UTC);
this.leap = leap;
}
@Test
public void fromThai() {
assertThat(
CALSYS.transform(this.thai),
is(this.epoch));
}
@Test
public void toThai() {
assertThat(
CALSYS.transform(this.epoch),
is(this.thai));
}
@Test
public void weekday() {
assertThat(
this.thai.getDayOfWeek(),
is(PlainDate.of(this.epoch, EpochDays.UTC).get(PlainDate.DAY_OF_WEEK)));
}
@Test
public void yearday() {
assertThat(
this.thai.getDayOfYear(),
is(this.thai.get(ThaiSolarCalendar.DAY_OF_YEAR).intValue()));
}
@Test
public void isLeapYear() {
assertThat(
this.thai.isLeapYear(),
is(this.leap));
}
@Test
public void unixDays() {
assertThat(
this.thai.get(EpochDays.UNIX),
is(this.epoch + 2 * 365));
}
}