package net.time4j.history; import net.time4j.PlainDate; 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 YearDefinitionTest { @Test public void deathOfQueenElizabethI() { NewYearStrategy nys = NewYearRule.MARIA_ANUNCIATA.until(1752); assertThat( HistoricDate.of(HistoricEra.AD, 1602, 3, 24, YearDefinition.AFTER_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1603, 3, 24))); assertThat( HistoricDate.of(HistoricEra.AD, 1603, 3, 25, YearDefinition.AFTER_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1603, 3, 25))); assertThat( HistoricDate.of(HistoricEra.AD, 1602, 3, 24, YearDefinition.BEFORE_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1603, 3, 24))); assertThat( HistoricDate.of(HistoricEra.AD, 1603, 3, 25, YearDefinition.BEFORE_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1603, 3, 25))); assertThat( HistoricDate.of(HistoricEra.AD, 1602, 3, 24, YearDefinition.DUAL_DATING, nys), is(HistoricDate.of(HistoricEra.AD, 1602, 3, 24))); assertThat( HistoricDate.of(HistoricEra.AD, 1603, 3, 25, YearDefinition.DUAL_DATING, nys), is(HistoricDate.of(HistoricEra.AD, 1603, 3, 25))); } @Test public void beginOfJan2MariaAnunciata() { NewYearStrategy nys = NewYearRule.BEGIN_OF_JANUARY.until(1114).and(NewYearRule.MARIA_ANUNCIATA.until(1752)); assertThat( HistoricDate.of(HistoricEra.AD, 1113, 3, 24, YearDefinition.AFTER_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1113, 3, 24))); // ambivalent case: choice of earlier year assertThat( HistoricDate.of(HistoricEra.AD, 1113, 3, 24, YearDefinition.BEFORE_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1114, 3, 24))); // ambivalent case: choice of later year assertThat( HistoricDate.of(HistoricEra.AD, 1114, 3, 24, YearDefinition.AFTER_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1115, 3, 24))); assertThat( HistoricDate.of(HistoricEra.AD, 1113, 3, 25, YearDefinition.AFTER_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1113, 3, 25))); assertThat( HistoricDate.of(HistoricEra.AD, 1113, 3, 25, YearDefinition.BEFORE_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1113, 3, 25))); assertThat( HistoricDate.of(HistoricEra.AD, 1114, 3, 25, YearDefinition.AFTER_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1114, 3, 25))); } @Test public void beginOfSep2Christmas() { NewYearStrategy nys = NewYearRule.BEGIN_OF_SEPTEMBER.until(1488).and(NewYearRule.CHRISTMAS_STYLE.until(1612)); assertThat( HistoricDate.of(HistoricEra.AD, 1487, 2, 24, YearDefinition.AFTER_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1487, 2, 24))); assertThat( HistoricDate.of(HistoricEra.AD, 1487, 2, 24, YearDefinition.BEFORE_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1487, 2, 24))); assertThat( HistoricDate.of(HistoricEra.AD, 1487, 10, 1, YearDefinition.AFTER_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1486, 10, 1))); // ambivalent case: choice of earlier year assertThat( HistoricDate.of(HistoricEra.AD, 1487, 10, 1, YearDefinition.BEFORE_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1487, 10, 1))); // ambivalent case: choice of later year assertThat( HistoricDate.of(HistoricEra.AD, 1487, 12, 28, YearDefinition.AFTER_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1486, 12, 28))); assertThat( HistoricDate.of(HistoricEra.AD, 1487, 12, 28, YearDefinition.BEFORE_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1486, 12, 28))); } @Test public void christmas2beginOfSep() { NewYearStrategy nys = NewYearRule.CHRISTMAS_STYLE.until(1488).and(NewYearRule.BEGIN_OF_SEPTEMBER.until(1612)); assertThat( HistoricDate.of(HistoricEra.AD, 1487, 2, 24, YearDefinition.AFTER_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1487, 2, 24))); assertThat( HistoricDate.of(HistoricEra.AD, 1487, 2, 24, YearDefinition.BEFORE_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1487, 2, 24))); assertThat( HistoricDate.of(HistoricEra.AD, 1487, 12, 28, YearDefinition.AFTER_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1486, 12, 28))); assertThat( HistoricDate.of(HistoricEra.AD, 1487, 12, 28, YearDefinition.BEFORE_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1486, 12, 28))); } @Test(expected=IllegalArgumentException.class) public void christmas2beginOfSepInvalid1() { NewYearStrategy nys = NewYearRule.CHRISTMAS_STYLE.until(1488).and(NewYearRule.BEGIN_OF_SEPTEMBER.until(1612)); HistoricDate.of(HistoricEra.AD, 1487, 10, 1, YearDefinition.AFTER_NEW_YEAR, nys); } @Test(expected=IllegalArgumentException.class) public void christmas2beginOfSepInvalid2() { NewYearStrategy nys = NewYearRule.CHRISTMAS_STYLE.until(1488).and(NewYearRule.BEGIN_OF_SEPTEMBER.until(1612)); HistoricDate.of(HistoricEra.AD, 1487, 10, 1, YearDefinition.BEFORE_NEW_YEAR, nys); } @Test(expected=IllegalArgumentException.class) public void shortYearInEngland1751() { NewYearStrategy nys = NewYearRule.MARIA_ANUNCIATA.until(1752); HistoricDate.of(HistoricEra.AD, 1751, 3, 24, YearDefinition.AFTER_NEW_YEAR, nys); // 1751 starts on March 25th and ends on December 31st } @Test public void conversionWithFrenchEaster() { System.out.println(ChronoHistory.PROLEPTIC_JULIAN.convert(Computus.EASTERN.easterSunday(1502))); // AD-1502-03-27 System.out.println(ChronoHistory.PROLEPTIC_JULIAN.convert(Computus.EASTERN.easterSunday(1503))); // AD-1503-04-16 NewYearStrategy nys = NewYearRule.EASTER_STYLE.until(1567); assertThat( HistoricDate.of(HistoricEra.AD, 1502, 4, 10, YearDefinition.AFTER_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1502, 4, 10))); // after Easter assertThat( HistoricDate.of(HistoricEra.AD, 1502, 4, 10, YearDefinition.BEFORE_NEW_YEAR, nys), is(HistoricDate.of(HistoricEra.AD, 1503, 4, 10))); // before Easter } @Test public void printFrenchEaster() { ChronoFormatter<PlainDate> f = ChronoFormatter.ofDatePattern("d. MMMM G yyyy", PatternType.CLDR, Locale.FRANCE); assertThat( f.format(PlainDate.of(1503, 4, 20)), is("10. avril ap. J.-C. 1502/03")); assertThat( f.with(ChronoHistory.YEAR_DEFINITION, YearDefinition.AFTER_NEW_YEAR).format(PlainDate.of(1503, 4, 20)), is("10. avril ap. J.-C. 1502")); assertThat( f.with(ChronoHistory.YEAR_DEFINITION, YearDefinition.BEFORE_NEW_YEAR).format(PlainDate.of(1503, 4, 20)), is("10. avril ap. J.-C. 1502")); } @Test public void parseFrenchEaster() throws ParseException { ChronoFormatter<PlainDate> f = ChronoFormatter.ofDatePattern("d. MMMM G yyyy", PatternType.CLDR, Locale.FRANCE); assertThat( f.parse("10. avril ap. J.-C. 1502/03"), is(PlainDate.of(1503, 4, 20))); assertThat( f.with(ChronoHistory.YEAR_DEFINITION, YearDefinition.AFTER_NEW_YEAR).parse("10. avril ap. J.-C. 1502"), is(PlainDate.of(1502, 4, 20))); // after Easter assertThat( f.with(ChronoHistory.YEAR_DEFINITION, YearDefinition.BEFORE_NEW_YEAR).parse("10. avril ap. J.-C. 1502"), is(PlainDate.of(1503, 4, 20))); // before Easter (of next year) } }