package net.time4j.calendar; import net.time4j.PlainDate; import net.time4j.engine.EpochDays; import net.time4j.format.Attributes; import net.time4j.format.expert.ChronoFormatter; import net.time4j.format.expert.PatternType; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import java.text.ParseException; import java.util.Locale; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @RunWith(JUnit4.class) public class HijriAlgoTest { @Test public void EAST_ISLAMIC_ASTRO_1() { HijriCalendar hijri = PlainDate.of(2174, 11, 23).transform(HijriCalendar.class, HijriAlgorithm.EAST_ISLAMIC_ASTRO); assertThat( hijri, is(HijriCalendar.of(HijriAlgorithm.EAST_ISLAMIC_ASTRO, 1600, 12, 29))); assertThat( hijri.transform(PlainDate.class), is(PlainDate.of(2174, 11, 23))); assertThat( hijri.lengthOfMonth(), is(30)); assertThat( hijri.lengthOfYear(), is(355)); } @Test public void EAST_ISLAMIC_CIVIL_1() { HijriCalendar hijri = PlainDate.of(2174, 11, 24).transform(HijriCalendar.class, HijriAlgorithm.EAST_ISLAMIC_CIVIL); assertThat( hijri, is(HijriCalendar.of(HijriAlgorithm.EAST_ISLAMIC_CIVIL, 1600, 12, 29))); assertThat( hijri.transform(PlainDate.class), is(PlainDate.of(2174, 11, 24))); } @Test public void EAST_ISLAMIC_ASTRO_2() { HijriCalendar hijri = PlainDate.of(2005, 12, 23).transform(HijriCalendar.class, HijriAlgorithm.EAST_ISLAMIC_ASTRO); assertThat( hijri.withVariant(HijriAlgorithm.EAST_ISLAMIC_CIVIL), is(HijriCalendar.of(HijriAlgorithm.EAST_ISLAMIC_CIVIL, 1426, 11, 21))); assertThat( hijri, is(HijriCalendar.of(HijriAlgorithm.EAST_ISLAMIC_ASTRO, 1426, 11, 22))); assertThat( hijri.transform(PlainDate.class), is(PlainDate.of(2005, 12, 23))); } @Test public void EAST_ISLAMIC_CIVIL_2() { HijriCalendar hijri = PlainDate.of(2005, 12, 23).transform(HijriCalendar.class, HijriAlgorithm.EAST_ISLAMIC_CIVIL); assertThat( hijri.withVariant(HijriAlgorithm.EAST_ISLAMIC_ASTRO), is(HijriCalendar.of(HijriAlgorithm.EAST_ISLAMIC_ASTRO, 1426, 11, 22))); assertThat( hijri, is(HijriCalendar.of(HijriAlgorithm.EAST_ISLAMIC_CIVIL, 1426, 11, 21))); assertThat( hijri.transform(PlainDate.class), is(PlainDate.of(2005, 12, 23))); } @Test public void WEST_ISLAMIC_ASTRO_1() { HijriCalendar hijri = PlainDate.of(2174, 11, 23).transform(HijriCalendar.class, HijriAlgorithm.WEST_ISLAMIC_ASTRO); assertThat( hijri, is(HijriCalendar.of(HijriAlgorithm.WEST_ISLAMIC_ASTRO, 1600, 12, 29))); assertThat( hijri.transform(PlainDate.class), is(PlainDate.of(2174, 11, 23))); assertThat( hijri.lengthOfMonth(), is(30)); assertThat( hijri.lengthOfYear(), is(355)); } @Test public void WEST_ISLAMIC_CIVIL_1() { HijriCalendar hijri = PlainDate.of(2174, 11, 24).transform(HijriCalendar.class, HijriAlgorithm.WEST_ISLAMIC_CIVIL); assertThat( hijri, is(HijriCalendar.of(HijriAlgorithm.WEST_ISLAMIC_CIVIL, 1600, 12, 29))); assertThat( hijri.transform(PlainDate.class), is(PlainDate.of(2174, 11, 24))); } @Test public void WEST_ISLAMIC_ASTRO_2() { HijriCalendar hijri = PlainDate.of(2005, 12, 23).transform(HijriCalendar.class, HijriAlgorithm.WEST_ISLAMIC_ASTRO); assertThat( hijri, is(HijriCalendar.of(HijriAlgorithm.WEST_ISLAMIC_ASTRO, 1426, 11, 23))); assertThat( hijri.transform(PlainDate.class), is(PlainDate.of(2005, 12, 23))); } @Test public void WEST_ISLAMIC_CIVIL_2() { HijriCalendar hijri = PlainDate.of(2005, 12, 23).transform(HijriCalendar.class, HijriAlgorithm.WEST_ISLAMIC_CIVIL); assertThat( hijri, is(HijriCalendar.of(HijriAlgorithm.WEST_ISLAMIC_CIVIL, 1426, 11, 22))); assertThat( hijri.transform(PlainDate.class), is(PlainDate.of(2005, 12, 23))); } @Test public void FATIMID_ASTRO_1() { HijriCalendar hijri = PlainDate.of(2174, 11, 23).transform(HijriCalendar.class, HijriAlgorithm.FATIMID_ASTRO); assertThat( hijri, is(HijriCalendar.of(HijriAlgorithm.FATIMID_ASTRO, 1600, 12, 29))); assertThat( hijri.transform(PlainDate.class), is(PlainDate.of(2174, 11, 23))); assertThat( hijri.lengthOfMonth(), is(30)); assertThat( hijri.lengthOfYear(), is(355)); } @Test public void FATIMID_CIVIL_1() { HijriCalendar hijri = PlainDate.of(2174, 11, 24).transform(HijriCalendar.class, HijriAlgorithm.FATIMID_CIVIL); assertThat( hijri, is(HijriCalendar.of(HijriAlgorithm.FATIMID_CIVIL, 1600, 12, 29))); assertThat( hijri.transform(PlainDate.class), is(PlainDate.of(2174, 11, 24))); } @Test public void FATIMID_ASTRO_2() { HijriCalendar hijri = PlainDate.of(2005, 12, 23).transform(HijriCalendar.class, HijriAlgorithm.FATIMID_ASTRO); assertThat( hijri, is(HijriCalendar.of(HijriAlgorithm.FATIMID_ASTRO, 1426, 11, 23))); assertThat( hijri.transform(PlainDate.class), is(PlainDate.of(2005, 12, 23))); } @Test public void FATIMID_CIVIL_2() { HijriCalendar hijri = PlainDate.of(2005, 12, 23).transform(HijriCalendar.class, HijriAlgorithm.FATIMID_CIVIL); assertThat( hijri, is(HijriCalendar.of(HijriAlgorithm.FATIMID_CIVIL, 1426, 11, 22))); assertThat( hijri.transform(PlainDate.class), is(PlainDate.of(2005, 12, 23))); } @Test public void HABASH_AL_HASIB_ASTRO_1() { HijriCalendar hijri = PlainDate.of(2174, 11, 23).transform(HijriCalendar.class, HijriAlgorithm.HABASH_AL_HASIB_ASTRO); assertThat( hijri, is(HijriCalendar.of(HijriAlgorithm.HABASH_AL_HASIB_ASTRO, 1600, 12, 29))); assertThat( hijri.transform(PlainDate.class), is(PlainDate.of(2174, 11, 23))); assertThat( hijri.lengthOfMonth(), is(29)); assertThat( hijri.lengthOfYear(), is(354)); } @Test public void HABASH_AL_HASIB_CIVIL_1() { HijriCalendar hijri = PlainDate.of(2174, 11, 24).transform(HijriCalendar.class, HijriAlgorithm.HABASH_AL_HASIB_CIVIL); assertThat( hijri, is(HijriCalendar.of(HijriAlgorithm.HABASH_AL_HASIB_CIVIL, 1600, 12, 29))); assertThat( hijri.transform(PlainDate.class), is(PlainDate.of(2174, 11, 24))); } @Test public void HABASH_AL_HASIB_ASTRO_2() { HijriCalendar hijri = PlainDate.of(2016, 2, 24).transform(HijriCalendar.class, HijriAlgorithm.HABASH_AL_HASIB_ASTRO); assertThat( hijri, is(HijriCalendar.of(HijriAlgorithm.HABASH_AL_HASIB_ASTRO, 1437, 5, 17))); assertThat( hijri.transform(PlainDate.class), is(PlainDate.of(2016, 2, 24))); } @Test public void HABASH_AL_HASIB_CIVIL_2() { HijriCalendar hijri = PlainDate.of(2016, 2, 24).transform(HijriCalendar.class, HijriAlgorithm.HABASH_AL_HASIB_CIVIL); assertThat( hijri, is(HijriCalendar.of(HijriAlgorithm.HABASH_AL_HASIB_CIVIL, 1437, 5, 16))); assertThat( hijri.transform(PlainDate.class), is(PlainDate.of(2016, 2, 24))); } @Test public void parseVariantSource() throws ParseException { ChronoFormatter<HijriCalendar> f = ChronoFormatter.setUp(HijriCalendar.class, Locale.ENGLISH) .addPattern("G, yyyy-MM-dd", PatternType.CLDR).build() .withCalendarVariant(HijriAlgorithm.WEST_ISLAMIC_ASTRO); assertThat( f.parse("AH, 1426-11-23"), is(HijriCalendar.of(HijriAlgorithm.WEST_ISLAMIC_ASTRO, 1426, 11, 23))); } @Test public void formatExample() { // see issue #407 ChronoFormatter<HijriCalendar> formatter2 = ChronoFormatter.setUp(HijriCalendar.class, Locale.ENGLISH) .addPattern("EEE, d. MMMM yy", PatternType.NON_ISO_DATE).build() .with(Attributes.PIVOT_YEAR, 1500); PlainDate today2 = PlainDate.of(735914, EpochDays.RATA_DIE); HijriCalendar h = today2.transform(HijriCalendar.class, "islamic-fatimida"); assertThat(h, is(today2.transform(HijriCalendar.class, HijriAlgorithm.FATIMID_ASTRO))); String s = formatter2.format(h); assertThat(s, is("Thu, 1. Safar 37")); h = today2.transform(HijriCalendar.class, "islamic-habashalhasiba"); assertThat(h, is(today2.transform(HijriCalendar.class, HijriAlgorithm.HABASH_AL_HASIB_ASTRO))); s = formatter2.format(h); assertThat(s, is("Thu, 1. Safar 37")); } }