package net.time4j.history;
import net.time4j.PlainDate;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import java.util.Locale;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
@RunWith(JUnit4.class)
public class NewYearTest {
@Test(expected=IllegalArgumentException.class)
public void beginOfYearOutOfRangeMIN() {
ChronoHistory history = ChronoHistory.of(Locale.UK);
history.getBeginOfYear(HistoricEra.BC, Integer.MIN_VALUE);
}
@Test(expected=IllegalArgumentException.class)
public void beginOfYearOutOfRangeMAX() {
ChronoHistory history = ChronoHistory.of(Locale.UK);
history.getBeginOfYear(HistoricEra.AD, Integer.MAX_VALUE);
}
@Test
public void lengthOfYearOutOfRangeMIN() {
ChronoHistory history = ChronoHistory.of(Locale.UK);
assertThat(
history.getLengthOfYear(HistoricEra.BC, Integer.MIN_VALUE),
is(-1));
}
@Test
public void lengthOfYearOutOfRangeMAX() {
ChronoHistory history = ChronoHistory.of(Locale.UK);
assertThat(
history.getLengthOfYear(HistoricEra.AD, Integer.MAX_VALUE),
is(-1));
}
@Test
public void england1066() {
ChronoHistory history = ChronoHistory.of(Locale.UK);
assertThat(
history.getBeginOfYear(HistoricEra.AD, 1066),
is(HistoricDate.of(HistoricEra.AD, 1065, 12, 25)));
assertThat(
history.getLengthOfYear(HistoricEra.AD, 1066),
is(365)); // normal julian year
assertThat(
history.convert(HistoricDate.of(HistoricEra.AD, 1066, 10, 14)),
is(PlainDate.of(1066, 10, 20))); // battle of Hastings
assertThat(
HistoricDate.of(HistoricEra.AD, 1066, 10, 14).getYearOfEra(history.getNewYearStrategy()),
is(1066));
assertThat(
HistoricDate.of(HistoricEra.AD, 1066, 12, 25).getYearOfEra(history.getNewYearStrategy()),
is(1067));
}
@Test
public void england1072() {
ChronoHistory history = ChronoHistory.of(Locale.UK);
assertThat(
history.getBeginOfYear(HistoricEra.AD, 1072),
is(HistoricDate.of(HistoricEra.AD, 1071, 12, 25)));
assertThat(
history.getLengthOfYear(HistoricEra.AD, 1072),
is(366)); // julian leap year
}
@Test
public void england1085() {
ChronoHistory history = ChronoHistory.of(Locale.UK);
assertThat(
history.getBeginOfYear(HistoricEra.AD, 1085),
is(HistoricDate.of(HistoricEra.AD, 1084, 12, 25)));
assertThat(
history.getLengthOfYear(HistoricEra.AD, 1085),
is(365));
}
@Test
public void england1086() {
ChronoHistory history = ChronoHistory.of(Locale.UK);
assertThat(
history.getBeginOfYear(HistoricEra.AD, 1086),
is(HistoricDate.of(HistoricEra.AD, 1085, 12, 25)));
assertThat(
history.getLengthOfYear(HistoricEra.AD, 1086),
is(365 + 7)); // plus last days of year 1085 but with full range of year 1086
assertThat(
HistoricDate.of(HistoricEra.AD, 1086, 12, 1).getYearOfEra(history.getNewYearStrategy()),
is(1086));
assertThat(
HistoricDate.of(HistoricEra.AD, 1086, 12, 31).getYearOfEra(history.getNewYearStrategy()),
is(1086)); // next year follows BEGIN_OF_JANUARY-rule
}
@Test
public void england1087() {
ChronoHistory history = ChronoHistory.of(Locale.UK);
assertThat(
history.getBeginOfYear(HistoricEra.AD, 1087),
is(HistoricDate.of(HistoricEra.AD, 1087, 1, 1)));
assertThat(
history.getLengthOfYear(HistoricEra.AD, 1087),
is(365)); // normal julian year
}
@Test
public void england1154() {
ChronoHistory history = ChronoHistory.of(Locale.UK);
assertThat(
history.getBeginOfYear(HistoricEra.AD, 1154),
is(HistoricDate.of(HistoricEra.AD, 1154, 1, 1)));
assertThat(
history.getLengthOfYear(HistoricEra.AD, 1154),
is(365 + 31 + 28 + 24)); // year ends in 1155 on March 24
assertThat(
HistoricDate.of(HistoricEra.AD, 1154, 3, 24).getYearOfEra(history.getNewYearStrategy()),
is(1154));
assertThat(
HistoricDate.of(HistoricEra.AD, 1154, 3, 25).getYearOfEra(history.getNewYearStrategy()),
is(1154));
}
@Test
public void england1155() {
ChronoHistory history = ChronoHistory.of(Locale.UK);
assertThat(
history.getBeginOfYear(HistoricEra.AD, 1155),
is(HistoricDate.of(HistoricEra.AD, 1155, 3, 25)));
assertThat(
history.getLengthOfYear(HistoricEra.AD, 1155),
is(366)); // year ends in 1156 which contains a leap day
assertThat(
HistoricDate.of(HistoricEra.AD, 1155, 3, 24).getYearOfEra(history.getNewYearStrategy()),
is(1154));
assertThat(
HistoricDate.of(HistoricEra.AD, 1155, 3, 25).getYearOfEra(history.getNewYearStrategy()),
is(1155));
}
@Test
public void england1492() {
ChronoHistory history = ChronoHistory.of(Locale.UK);
assertThat(
history.getBeginOfYear(HistoricEra.AD, 1492),
is(HistoricDate.of(HistoricEra.AD, 1492, 3, 25)));
assertThat(
history.getLengthOfYear(HistoricEra.AD, 1492),
is(365)); // year starts after leap day
}
@Test
public void england1603() {
ChronoHistory history = ChronoHistory.of(Locale.UK);
assertThat(
history.getBeginOfYear(HistoricEra.AD, 1603),
is(HistoricDate.of(HistoricEra.AD, 1603, 3, 25)));
assertThat(
history.getLengthOfYear(HistoricEra.AD, 1603),
is(366)); // year ends in 1604 which contains a leap day
assertThat(
HistoricDate.of(HistoricEra.AD, 1603, 3, 24).getYearOfEra(history.getNewYearStrategy()),
is(1602));
assertThat(
HistoricDate.of(HistoricEra.AD, 1603, 3, 25).getYearOfEra(history.getNewYearStrategy()),
is(1603));
}
@Test
public void england1751() {
ChronoHistory history = ChronoHistory.of(Locale.UK);
assertThat(
history.getBeginOfYear(HistoricEra.AD, 1751),
is(HistoricDate.of(HistoricEra.AD, 1751, 3, 25)));
assertThat(
history.getLengthOfYear(HistoricEra.AD, 1751),
is(365 - 31 - 28 - 24)); // year ends on 31th of December 1751
}
@Test
public void england1752() {
ChronoHistory history = ChronoHistory.of(Locale.UK);
assertThat(
history.getBeginOfYear(HistoricEra.AD, 1752),
is(HistoricDate.of(HistoricEra.AD, 1752, 1, 1)));
assertThat(
history.getLengthOfYear(HistoricEra.AD, 1752),
is(366 - 11)); // year contains a gap due to gregorian cutover
}
@Test
public void england1753() {
ChronoHistory history = ChronoHistory.of(Locale.UK);
assertThat(
history.getBeginOfYear(HistoricEra.AD, 1753),
is(HistoricDate.of(HistoricEra.AD, 1753, 1, 1)));
assertThat(
history.getLengthOfYear(HistoricEra.AD, 1753),
is(365)); // normal gregorian year
}
@Test
public void england1900() {
ChronoHistory history = ChronoHistory.of(Locale.UK);
assertThat(
history.getBeginOfYear(HistoricEra.AD, 1900),
is(HistoricDate.of(HistoricEra.AD, 1900, 1, 1)));
assertThat(
history.getLengthOfYear(HistoricEra.AD, 1900),
is(365)); // normal gregorian year
}
@Test
public void france() {
ChronoHistory history = ChronoHistory.of(Locale.FRANCE);
assertThat(
history.getBeginOfYear(HistoricEra.AD, 1564),
is(HistoricDate.of(HistoricEra.AD, 1564, 4, 1)));
assertThat(
history.getBeginOfYear(HistoricEra.AD, 1565),
is(HistoricDate.of(HistoricEra.AD, 1565, 4, 21)));
assertThat(
history.getBeginOfYear(HistoricEra.AD, 1566),
is(HistoricDate.of(HistoricEra.AD, 1566, 4, 13)));
assertThat(
history.getBeginOfYear(HistoricEra.AD, 1567),
is(HistoricDate.of(HistoricEra.AD, 1567, 1, 1)));
assertThat(
history.getLengthOfYear(HistoricEra.AD, 1564),
is(385));
assertThat(
history.getLengthOfYear(HistoricEra.AD, 1565),
is(357));
assertThat(
history.getLengthOfYear(HistoricEra.AD, 1566),
is(263));
}
@Test
public void england2000() {
ChronoHistory history = ChronoHistory.of(Locale.UK);
assertThat(
history.getBeginOfYear(HistoricEra.AD, 2000),
is(HistoricDate.of(HistoricEra.AD, 2000, 1, 1)));
assertThat(
history.getLengthOfYear(HistoricEra.AD, 2000),
is(366)); // gregorian leap year
}
@Test(expected=IllegalArgumentException.class)
public void beforeCouncilOfTours() {
NewYearRule.MARIA_ANUNCIATA.until(567);
}
@Test
public void atCouncilOfTours() {
NewYearStrategy nys = NewYearRule.MARIA_ANUNCIATA.until(568);
assertThat(
nys.newYear(HistoricEra.AD, 566),
is(HistoricDate.of(HistoricEra.AD, 566, 1, 1)));
assertThat(
nys.newYear(HistoricEra.AD, 567),
is(HistoricDate.of(HistoricEra.AD, 567, 3, 25)));
assertThat(
nys.newYear(HistoricEra.AD, 568),
is(HistoricDate.of(HistoricEra.AD, 568, 1, 1)));
}
@Test
public void byzantine() {
NewYearStrategy ignored = NewYearRule.BEGIN_OF_JANUARY.until(568);
assertThat(
ChronoHistory.PROLEPTIC_BYZANTINE.with(ignored).getBeginOfYear(HistoricEra.BYZANTINE, 1),
is(HistoricDate.of(HistoricEra.BYZANTINE, 0, 9, 1))
);
assertThat(
ChronoHistory.PROLEPTIC_BYZANTINE.getBeginOfYear(HistoricEra.BYZANTINE, 7208),
is(HistoricDate.of(HistoricEra.BYZANTINE, 7207, 9, 1))
);
}
@Test(expected=IllegalArgumentException.class)
public void russiaByzantineBeforeCreationOfTheWorld() {
ChronoHistory.of(new Locale("ru", "RU")).getBeginOfYear(HistoricEra.BYZANTINE, 0);
}
@Test
public void russiaAtOrBeforeCreationOfTheWorld() {
assertThat(
ChronoHistory.of(new Locale("en", "RU")).getBeginOfYear(HistoricEra.BC, 9999),
is(HistoricDate.of(HistoricEra.BC, 9999, 1, 1)));
assertThat(
ChronoHistory.of(new Locale("en", "RU")).getBeginOfYear(HistoricEra.BC, 5508),
is(HistoricDate.of(HistoricEra.BC, 5508, 1, 1)));
}
@Test
public void russia988() {
Locale russia = new Locale("en", "RU");
// AD 987
assertThat(
ChronoHistory.of(russia).getBeginOfYear(HistoricEra.AD, 987),
is(HistoricDate.of(HistoricEra.AD, 987, 1, 1)));
assertThat(
ChronoHistory.of(russia).getLengthOfYear(HistoricEra.AD, 987),
is(365 + 31 + 29));
// AD 988
assertThat(
ChronoHistory.of(russia).getBeginOfYear(HistoricEra.AD, 988),
is(HistoricDate.of(HistoricEra.BYZANTINE, 988 + 5508, 3, 1)));
assertThat(
ChronoHistory.of(russia).getBeginOfYear(HistoricEra.BYZANTINE, 988 + 5508),
is(HistoricDate.of(HistoricEra.BYZANTINE, 988 + 5508, 3, 1)));
assertThat(
ChronoHistory.of(russia).getLengthOfYear(HistoricEra.AD, 988),
is(365));
}
@Test
public void russia1492() {
Locale russia = new Locale("en", "RU");
// AD 1491
assertThat(
ChronoHistory.of(russia).getBeginOfYear(HistoricEra.AD, 1491),
is(HistoricDate.of(HistoricEra.BYZANTINE, 1491 + 5508, 3, 1)));
assertThat(
ChronoHistory.of(russia).getBeginOfYear(HistoricEra.BYZANTINE, 1491 + 5508),
is(HistoricDate.of(HistoricEra.BYZANTINE, 1491 + 5508, 3, 1)));
assertThat(
ChronoHistory.of(russia).getLengthOfYear(HistoricEra.AD, 1491),
is(366));
// AD 1492
assertThat(
ChronoHistory.of(russia).getBeginOfYear(HistoricEra.AD, 1492),
is(HistoricDate.of(HistoricEra.BYZANTINE, 1492 + 5508, 3, 1)));
assertThat(
ChronoHistory.of(russia).getBeginOfYear(HistoricEra.BYZANTINE, 1492 + 5508),
is(HistoricDate.of(HistoricEra.BYZANTINE, 1492 + 5508, 3, 1)));
assertThat(
ChronoHistory.of(russia).getLengthOfYear(HistoricEra.AD, 1492),
is(31 + 30 + 31 + 30 + 31 + 31)); // 184
// AD 1493
assertThat(
ChronoHistory.of(russia).getBeginOfYear(HistoricEra.AD, 1493),
is(HistoricDate.of(HistoricEra.BYZANTINE, 1492 + 5508, 9, 1)));
assertThat(
ChronoHistory.of(russia).getBeginOfYear(HistoricEra.BYZANTINE, 1493 + 5508),
is(HistoricDate.of(HistoricEra.BYZANTINE, 1492 + 5508, 9, 1)));
assertThat(
ChronoHistory.of(russia).getLengthOfYear(HistoricEra.AD, 1493),
is(365));
}
@Test
public void russia1700() {
Locale russia = new Locale("en", "RU");
// AD 1698
assertThat(
ChronoHistory.of(russia).getBeginOfYear(HistoricEra.BYZANTINE, 7206),
is(HistoricDate.of(HistoricEra.BYZANTINE, 7205, 9, 1)));
assertThat(
ChronoHistory.of(russia).getBeginOfYear(HistoricEra.AD, 1698),
is(HistoricDate.of(HistoricEra.BYZANTINE, 7205, 9, 1)));
assertThat(
ChronoHistory.of(russia).getLengthOfYear(HistoricEra.BYZANTINE, 7206),
is(365));
assertThat(
ChronoHistory.of(russia).getLengthOfYear(HistoricEra.AD, 1698),
is(365));
// AD 1699
assertThat(
ChronoHistory.of(russia).getBeginOfYear(HistoricEra.BYZANTINE, 7207),
is(HistoricDate.of(HistoricEra.BYZANTINE, 7206, 9, 1)));
assertThat(
ChronoHistory.of(russia).getBeginOfYear(HistoricEra.AD, 1699),
is(HistoricDate.of(HistoricEra.BYZANTINE, 7206, 9, 1)));
assertThat(
ChronoHistory.of(russia).getLengthOfYear(HistoricEra.BYZANTINE, 7207),
is(365));
assertThat(
ChronoHistory.of(russia).getLengthOfYear(HistoricEra.AD, 1699),
is(365 + 30 + 31 + 30 + 31));
// AD 1700
assertThat(
ChronoHistory.of(russia).getBeginOfYear(HistoricEra.BYZANTINE, 7208),
is(HistoricDate.of(HistoricEra.BYZANTINE, 7207, 9, 1)));
assertThat(
ChronoHistory.of(russia).getBeginOfYear(HistoricEra.AD, 1700),
is(HistoricDate.of(HistoricEra.AD, 1700, 1, 1)));
assertThat(
ChronoHistory.of(russia).getLengthOfYear(HistoricEra.BYZANTINE, 7208),
is(30 + 31 + 30 + 31)); // Sep-Dec
assertThat(
ChronoHistory.of(russia).getLengthOfYear(HistoricEra.AD, 1700),
is(366));
// AD 1701
assertThat(
ChronoHistory.of(russia).getBeginOfYear(HistoricEra.BYZANTINE, 7209),
is(HistoricDate.of(HistoricEra.AD, 1701, 1, 1)));
assertThat(
ChronoHistory.of(russia).getBeginOfYear(HistoricEra.AD, 1701),
is(HistoricDate.of(HistoricEra.AD, 1701, 1, 1)));
assertThat(
ChronoHistory.of(russia).getLengthOfYear(HistoricEra.BYZANTINE, 7209),
is(365));
assertThat(
ChronoHistory.of(russia).getLengthOfYear(HistoricEra.AD, 1701),
is(365));
}
}