blob: 796d1b7bbbf242bc218c2f8e127715edea5a364a [file] [log] [blame]
// © 2018 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
package com.ibm.icu.dev.test.calendar;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import com.ibm.icu.dev.test.TestFmwk;
import com.ibm.icu.impl.CalType;
import com.ibm.icu.impl.EraRules;
import com.ibm.icu.util.Calendar;
import com.ibm.icu.util.JapaneseCalendar;
import com.ibm.icu.util.TimeZone;
import com.ibm.icu.util.ULocale;
/**
* Tests for EraRules class
*/
@RunWith(JUnit4.class)
public class EraRulesTest extends TestFmwk {
@Test
public void testAPIs() {
for (CalType calType : CalType.values()) {
String calId = calType.getId();
if (calId.equals("iso8601") || calId.equals("unknown")) {
continue;
}
EraRules rules1 = EraRules.getInstance(calType, false);
if (rules1 == null) {
errln("Era rules for " + calId + " is not available.");
}
EraRules rules2 = EraRules.getInstance(calType, true);
if (rules2 == null) {
errln("Era rules for " + calId + " (including tentative eras) is not available.");
}
int numEras1 = rules1.getNumberOfEras();
if (numEras1 <= 0) {
errln("Number of era rules for " + calId + " is " + numEras1);
}
int numEras2 = rules2.getNumberOfEras();
if (numEras2 < numEras1) {
errln("Number of era including tentative eras is fewer than one without tentative eras in calendar: "
+ calId);
}
Calendar cal = Calendar.getInstance(TimeZone.GMT_ZONE, new ULocale("en"));
int currentIdx = rules1.getCurrentEraIndex();
int currentYear = cal.get(Calendar.YEAR);
int idx = rules1.getEraIndex(currentYear, cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DATE));
if (idx != currentIdx) {
errln("Current era index:" + currentIdx + " is different from era index of now:" + idx
+ " in calendar:" + calId);
}
int eraStartYear = rules1.getStartYear(currentIdx);
if (currentYear < eraStartYear) {
errln("Current era's start year is after the current year in calendar:" + calId);
}
}
}
@Test
public void testJapanese() {
EraRules rules = EraRules.getInstance(CalType.JAPANESE, true);
// Rules should have an era after Heisei
int numRules = rules.getNumberOfEras();
if (numRules <= JapaneseCalendar.HEISEI) {
errln("Era after Heisei is not available.");
}
int postHeiseiStartYear = rules.getStartYear(JapaneseCalendar.HEISEI + 1);
if (postHeiseiStartYear != 2019) {
errln("Era after Heisei should start in 2019, but got " + postHeiseiStartYear);
}
}
}