use of android.icu.util.ChineseCalendar in project j2objc by google.
the class DateFormatTest method TestCoverage.
@Test
public void TestCoverage() {
Date now = new Date();
Calendar cal = new GregorianCalendar();
DateFormat f = DateFormat.getTimeInstance();
logln("time: " + f.format(now));
// sigh, everyone overrides this
int hash = f.hashCode();
f = DateFormat.getInstance(cal);
if (hash == f.hashCode()) {
errln("FAIL: hashCode equal for inequal objects");
}
logln("time again: " + f.format(now));
f = DateFormat.getTimeInstance(cal, DateFormat.FULL);
logln("time yet again: " + f.format(now));
f = DateFormat.getDateInstance();
logln("time yet again: " + f.format(now));
ICUResourceBundle rb = (ICUResourceBundle) UResourceBundle.getBundleInstance(ICUData.ICU_BASE_NAME, "de_DE");
DateFormatSymbols sym = new DateFormatSymbols(rb, Locale.GERMANY);
DateFormatSymbols sym2 = (DateFormatSymbols) sym.clone();
if (sym.hashCode() != sym2.hashCode()) {
errln("fail, date format symbols hashcode not equal");
}
if (!sym.equals(sym2)) {
errln("fail, date format symbols not equal");
}
Locale foo = new Locale("fu", "FU", "BAR");
rb = null;
sym = new DateFormatSymbols(GregorianCalendar.class, foo);
sym.equals(null);
sym = new ChineseDateFormatSymbols();
sym = new ChineseDateFormatSymbols(new Locale("en_US"));
try {
sym = new ChineseDateFormatSymbols(null, new Locale("en_US"));
errln("ChineseDateFormatSymbols(Calender, Locale) was suppose to return a null " + "pointer exception for a null paramater.");
} catch (Exception e) {
}
sym = new ChineseDateFormatSymbols(new ChineseCalendar(), new Locale("en_US"));
try {
sym = new ChineseDateFormatSymbols(null, new ULocale("en_US"));
errln("ChineseDateFormatSymbols(Calender, ULocale) was suppose to return a null " + "pointer exception for a null paramater.");
} catch (Exception e) {
}
sym = new ChineseDateFormatSymbols(new ChineseCalendar(), foo);
// cover new ChineseDateFormatSymbols(Calendar, ULocale)
ChineseCalendar ccal = new ChineseCalendar();
// gclsh1 add
sym = new ChineseDateFormatSymbols(ccal, ULocale.CHINA);
StringBuffer buf = new StringBuffer();
FieldPosition pos = new FieldPosition(0);
f.format((Object) cal, buf, pos);
f.format((Object) now, buf, pos);
f.format((Object) new Long(now.getTime()), buf, pos);
try {
f.format((Object) "Howdy", buf, pos);
} catch (Exception e) {
}
NumberFormat nf = f.getNumberFormat();
f.setNumberFormat(nf);
boolean lenient = f.isLenient();
f.setLenient(lenient);
ULocale uloc = f.getLocale(ULocale.ACTUAL_LOCALE);
DateFormat sdfmt = new SimpleDateFormat();
if (f.hashCode() != f.hashCode()) {
errln("hashCode is not stable");
}
if (!f.equals(f)) {
errln("f != f");
}
if (f.equals(null)) {
errln("f should not equal null");
}
if (f.equals(sdfmt)) {
errln("A time instance shouldn't equal a default date format");
}
Date d;
{
ChineseDateFormat fmt = new ChineseDateFormat("yymm", Locale.US);
try {
// fewer symbols than required 2
fmt.parse("2");
errln("whoops");
} catch (ParseException e) {
logln("ok");
}
try {
// should succeed with obeycount
fmt.parse("2255");
logln("ok");
} catch (ParseException e) {
errln("whoops");
}
try {
// not a number, should fail
fmt.parse("ni hao");
errln("whoops ni hao");
} catch (ParseException e) {
logln("ok ni hao");
}
}
{
Calendar xcal = new GregorianCalendar();
xcal.set(Calendar.HOUR_OF_DAY, 0);
DateFormat fmt = new SimpleDateFormat("k");
StringBuffer xbuf = new StringBuffer();
FieldPosition fpos = new FieldPosition(Calendar.HOUR_OF_DAY);
fmt.format(xcal, xbuf, fpos);
try {
fmt.parse(xbuf.toString());
logln("ok");
xbuf.setLength(0);
xcal.set(Calendar.HOUR_OF_DAY, 25);
fmt.format(xcal, xbuf, fpos);
Date d2 = fmt.parse(xbuf.toString());
logln("ok again - d2=" + d2);
} catch (ParseException e) {
errln("whoops");
}
}
{
// cover gmt+hh:mm
DateFormat fmt = new SimpleDateFormat("MM/dd/yy z");
try {
d = fmt.parse("07/10/53 GMT+10:00");
logln("ok : d = " + d);
} catch (ParseException e) {
errln("Parse of 07/10/53 GMT+10:00 for pattern MM/dd/yy z");
}
// cover invalid separator after GMT
{
ParsePosition pp = new ParsePosition(0);
String text = "07/10/53 GMT=10:00";
d = fmt.parse(text, pp);
if (pp.getIndex() != 12) {
errln("Parse of 07/10/53 GMT=10:00 for pattern MM/dd/yy z");
}
logln("Parsing of the text stopped at pos: " + pp.getIndex() + " as expected and length is " + text.length());
}
// cover bad text after GMT+.
try {
fmt.parse("07/10/53 GMT+blecch");
logln("ok GMT+blecch");
} catch (ParseException e) {
errln("whoops GMT+blecch");
}
// cover bad text after GMT+hh:.
try {
fmt.parse("07/10/53 GMT+07:blecch");
logln("ok GMT+xx:blecch");
} catch (ParseException e) {
errln("whoops GMT+xx:blecch");
}
// cover no ':' GMT+#, # < 24 (hh)
try {
d = fmt.parse("07/10/53 GMT+07");
logln("ok GMT+07");
} catch (ParseException e) {
errln("Parse of 07/10/53 GMT+07 for pattern MM/dd/yy z");
}
// cover no ':' GMT+#, # > 24 (hhmm)
try {
d = fmt.parse("07/10/53 GMT+0730");
logln("ok");
} catch (ParseException e) {
errln("Parse of 07/10/53 GMT+0730 for pattern MM/dd/yy z");
}
// cover GMT+#, # with second field
try {
d = fmt.parse("07/10/53 GMT+07:30:15");
logln("ok GMT+07:30:15");
} catch (ParseException e) {
errln("Parse of 07/10/53 GMT+07:30:15 for pattern MM/dd/yy z");
}
// cover no ':' GMT+#, # with second field, no leading zero
try {
d = fmt.parse("07/10/53 GMT+73015");
logln("ok GMT+73015");
} catch (ParseException e) {
errln("Parse of 07/10/53 GMT+73015 for pattern MM/dd/yy z");
}
// cover no ':' GMT+#, # with 1 digit second field
try {
d = fmt.parse("07/10/53 GMT+07300");
logln("ok GMT+07300");
} catch (ParseException e) {
errln("Parse of 07/10/53 GMT+07300 for pattern MM/dd/yy z");
}
// cover raw digits with no leading sign (bad RFC822)
try {
d = fmt.parse("07/10/53 07");
errln("Parse of 07/10/53 07 for pattern MM/dd/yy z passed!");
} catch (ParseException e) {
logln("ok");
}
// cover raw digits (RFC822)
try {
d = fmt.parse("07/10/53 +07");
logln("ok");
} catch (ParseException e) {
errln("Parse of 07/10/53 +07 for pattern MM/dd/yy z failed");
}
// cover raw digits (RFC822)
try {
d = fmt.parse("07/10/53 -0730");
logln("ok");
} catch (ParseException e) {
errln("Parse of 07/10/53 -00730 for pattern MM/dd/yy z failed");
}
// cover raw digits (RFC822) in DST
try {
fmt.setTimeZone(TimeZone.getTimeZone("PDT"));
d = fmt.parse("07/10/53 -0730");
logln("ok");
} catch (ParseException e) {
errln("Parse of 07/10/53 -0730 for pattern MM/dd/yy z failed");
}
}
// TODO: revisit toLocalizedPattern
if (false) {
SimpleDateFormat fmt = new SimpleDateFormat("aabbcc");
try {
String pat = fmt.toLocalizedPattern();
errln("whoops, shouldn't have been able to localize aabbcc");
} catch (IllegalArgumentException e) {
logln("aabbcc localize ok");
}
}
{
SimpleDateFormat fmt = new SimpleDateFormat("'aabbcc");
try {
fmt.toLocalizedPattern();
errln("whoops, localize unclosed quote");
} catch (IllegalArgumentException e) {
logln("localize unclosed quote ok");
}
}
{
SimpleDateFormat fmt = new SimpleDateFormat("MM/dd/yy z");
// bogus time zone
String text = "08/15/58 DBDY";
try {
fmt.parse(text);
errln("recognized bogus time zone DBDY");
} catch (ParseException e) {
logln("time zone ex ok");
}
}
{
// force fallback to default timezone when fmt timezone
// is not named
SimpleDateFormat fmt = new SimpleDateFormat("MM/dd/yy z");
// force fallback to default time zone, still fails
// not in equivalency group
fmt.setTimeZone(TimeZone.getTimeZone("GMT+0147"));
String text = "08/15/58 DBDY";
try {
fmt.parse(text);
errln("Parse of 07/10/53 DBDY for pattern MM/dd/yy z passed");
} catch (ParseException e) {
logln("time zone ex2 ok");
}
// force success on fallback
text = "08/15/58 " + TimeZone.getDefault().getDisplayName(true, TimeZone.SHORT);
try {
fmt.parse(text);
logln("found default tz");
} catch (ParseException e) {
errln("whoops, got parse exception");
}
}
{
// force fallback to symbols list of timezones when neither
// fmt and default timezone is named
SimpleDateFormat fmt = new SimpleDateFormat("MM/dd/yy z");
TimeZone oldtz = TimeZone.getDefault();
// nonstandard tz
TimeZone newtz = TimeZone.getTimeZone("GMT+0137");
fmt.setTimeZone(newtz);
// todo: fix security issue
TimeZone.setDefault(newtz);
// fallback to symbol list, but fail
// try to parse the bogus time zone
String text = "08/15/58 DBDY";
try {
fmt.parse(text);
errln("Parse of 07/10/53 DBDY for pattern MM/dd/yy z passed");
} catch (ParseException e) {
logln("time zone ex3 ok");
} catch (Exception e) {
// hmmm... this shouldn't happen. don't want to exit this
// fn with timezone improperly set, so just in case
TimeZone.setDefault(oldtz);
throw new IllegalStateException(e.getMessage());
}
}
{
// cover getAvailableULocales
final ULocale[] locales = DateFormat.getAvailableULocales();
long count = locales.length;
if (count == 0) {
errln(" got a empty list for getAvailableULocales");
} else {
logln("" + count + " available ulocales");
}
}
{
// cover DateFormatSymbols.getDateFormatBundle
cal = new GregorianCalendar();
Locale loc = Locale.getDefault();
DateFormatSymbols mysym = new DateFormatSymbols(cal, loc);
if (mysym == null)
errln("FAIL: constructs DateFormatSymbols with calendar and locale failed");
uloc = ULocale.getDefault();
// These APIs are obsolete and return null
ResourceBundle resb = DateFormatSymbols.getDateFormatBundle(cal, loc);
ResourceBundle resb2 = DateFormatSymbols.getDateFormatBundle(cal, uloc);
ResourceBundle resb3 = DateFormatSymbols.getDateFormatBundle(cal.getClass(), loc);
ResourceBundle resb4 = DateFormatSymbols.getDateFormatBundle(cal.getClass(), uloc);
if (resb != null) {
logln("resb is not null");
}
if (resb2 != null) {
logln("resb2 is not null");
}
if (resb3 != null) {
logln("resb3 is not null");
}
if (resb4 != null) {
logln("resb4 is not null");
}
}
{
// cover DateFormatSymbols.getInstance
DateFormatSymbols datsym1 = DateFormatSymbols.getInstance();
DateFormatSymbols datsym2 = new DateFormatSymbols();
if (!datsym1.equals(datsym2)) {
errln("FAIL: DateFormatSymbols returned by getInstance()" + "does not match new DateFormatSymbols().");
}
datsym1 = DateFormatSymbols.getInstance(Locale.JAPAN);
datsym2 = DateFormatSymbols.getInstance(ULocale.JAPAN);
if (!datsym1.equals(datsym2)) {
errln("FAIL: DateFormatSymbols returned by getInstance(Locale.JAPAN)" + "does not match the one returned by getInstance(ULocale.JAPAN).");
}
}
{
// cover DateFormatSymbols.getAvailableLocales/getAvailableULocales
Locale[] allLocales = DateFormatSymbols.getAvailableLocales();
if (allLocales.length == 0) {
errln("FAIL: Got a empty list for DateFormatSymbols.getAvailableLocales");
} else {
logln("PASS: " + allLocales.length + " available locales returned by DateFormatSymbols.getAvailableLocales");
}
ULocale[] allULocales = DateFormatSymbols.getAvailableULocales();
if (allULocales.length == 0) {
errln("FAIL: Got a empty list for DateFormatSymbols.getAvailableLocales");
} else {
logln("PASS: " + allULocales.length + " available locales returned by DateFormatSymbols.getAvailableULocales");
}
}
}
use of android.icu.util.ChineseCalendar in project j2objc by google.
the class DateFormatTest method TestChineseDateFormatSymbols.
@Test
public void TestChineseDateFormatSymbols() {
class ChineseDateFormatSymbolItem {
public ULocale locale;
String marker;
public ChineseDateFormatSymbolItem(ULocale loc, String mrk) {
locale = loc;
marker = mrk;
}
}
;
final ChineseDateFormatSymbolItem[] items = { new ChineseDateFormatSymbolItem(ULocale.ENGLISH, "bis"), new ChineseDateFormatSymbolItem(ULocale.SIMPLIFIED_CHINESE, "\u95F0"), new ChineseDateFormatSymbolItem(ULocale.TRADITIONAL_CHINESE, "\u958F") };
ChineseCalendar cal = new ChineseCalendar();
for (ChineseDateFormatSymbolItem item : items) {
ChineseDateFormatSymbols cdfSymbols = new ChineseDateFormatSymbols(cal, item.locale);
if (!cdfSymbols.getLeapMonth(0).contentEquals("") || !cdfSymbols.getLeapMonth(1).contentEquals(item.marker)) {
errln("FAIL: isLeapMonth [0],[1] for locale " + item.locale + "; expected \"\", \"" + item.marker + "\"; got \"" + cdfSymbols.getLeapMonth(0) + "\", \"" + cdfSymbols.getLeapMonth(1) + "\"");
}
}
}
use of android.icu.util.ChineseCalendar in project j2objc by google.
the class IBMCalendarTest method TestCoverage.
/**
* Miscellaneous tests to increase coverage.
*/
@Test
public void TestCoverage() {
// BuddhistCalendar
BuddhistCalendar bcal = new BuddhistCalendar();
/*int i =*/
bcal.getMinimum(Calendar.ERA);
bcal.add(Calendar.YEAR, 1);
bcal.add(Calendar.MONTH, 1);
/*Date d = */
bcal.getTime();
// CalendarAstronomer
// (This class should probably be made package-private.)
CalendarAstronomer astro = new CalendarAstronomer();
/*String s = */
astro.local(0);
// ChineseCalendar
ChineseCalendar ccal = new ChineseCalendar(TimeZone.getDefault(), Locale.getDefault());
ccal.add(Calendar.MONTH, 1);
ccal.add(Calendar.YEAR, 1);
ccal.roll(Calendar.MONTH, 1);
ccal.roll(Calendar.YEAR, 1);
ccal.getTime();
// ICU 2.6
Calendar cal = Calendar.getInstance(Locale.US);
logln(cal.toString());
logln(cal.getDisplayName(Locale.US));
int weekendOnset = -1;
int weekendCease = -1;
for (int i = Calendar.SUNDAY; i <= Calendar.SATURDAY; ++i) {
if (cal.getDayOfWeekType(i) == Calendar.WEEKEND_ONSET) {
weekendOnset = i;
}
if (cal.getDayOfWeekType(i) == Calendar.WEEKEND_CEASE) {
weekendCease = i;
}
}
// but make the call anyway for coverage reasons
try {
/*int x=*/
cal.getWeekendTransition(weekendOnset);
/*int x=*/
cal.getWeekendTransition(weekendCease);
} catch (IllegalArgumentException e) {
}
/*int x=*/
cal.isWeekend(new Date());
// new GregorianCalendar(ULocale)
GregorianCalendar gcal = new GregorianCalendar(ULocale.getDefault());
if (gcal == null) {
errln("could not create GregorianCalendar with ULocale");
} else {
logln("Calendar display name: " + gcal.getDisplayName(ULocale.getDefault()));
}
// cover getAvailableULocales
final ULocale[] locales = Calendar.getAvailableULocales();
long count = locales.length;
if (count == 0)
errln("getAvailableULocales return empty list");
logln("" + count + " available ulocales in Calendar.");
// Jitterbug 4451, for coverage
class StubCalendar extends Calendar {
/**
* For serialization
*/
private static final long serialVersionUID = -4558903444622684759L;
@Override
protected int handleGetLimit(int field, int limitType) {
if (limitType == Calendar.LEAST_MAXIMUM) {
return 1;
} else if (limitType == Calendar.GREATEST_MINIMUM) {
return 7;
}
return -1;
}
@Override
protected int handleComputeMonthStart(int eyear, int month, boolean useMonth) {
if (useMonth) {
return eyear * 365 + month * 31;
} else {
return eyear * 365;
}
}
@Override
protected int handleGetExtendedYear() {
return 2017;
}
public void run() {
if (Calendar.gregorianPreviousMonthLength(2000, 2) != 29) {
errln("Year 2000 Feb should have 29 days.");
}
long millis = Calendar.julianDayToMillis(Calendar.MAX_JULIAN);
if (millis != Calendar.MAX_MILLIS) {
errln("Did not get the expected value from julianDayToMillis. Got:" + millis);
}
DateFormat df = handleGetDateFormat("", Locale.getDefault());
if (!df.equals(handleGetDateFormat("", ULocale.getDefault()))) {
errln("Calendar.handleGetDateFormat(String, Locale) should delegate to ( ,ULocale)");
}
if (!getType().equals("unknown")) {
errln("Calendar.getType() should be 'unknown'");
}
// Tests for complete coverage of Calendar functions.
int julianDay = Calendar.millisToJulianDay(millis - 1);
assertEquals("Julian max day -1", julianDay, Calendar.MAX_JULIAN - 1);
DateFormat df1 = handleGetDateFormat("GG yyyy-d:MM", "option=xyz", Locale.getDefault());
if (!df1.equals(handleGetDateFormat("GG yyyy-d:MM", "option=xyz", ULocale.getDefault()))) {
errln("Calendar.handleGetDateFormat(String, Locale) should delegate to ( ,ULocale)");
}
// Prove that the local overrides are used.
int leastMsInDay = handleGetLimit(Calendar.MILLISECONDS_IN_DAY, Calendar.LEAST_MAXIMUM);
assertEquals("getLimit test 1", leastMsInDay, 1);
int maxMsInDay = handleGetLimit(Calendar.WEEK_OF_MONTH, Calendar.GREATEST_MINIMUM);
assertEquals("getLimit test 2", 7, maxMsInDay);
int febLeapLength = handleGetMonthLength(2020, Calendar.FEBRUARY);
assertEquals("handleMonthLength", 31, febLeapLength);
int exYear = handleGetExtendedYear();
assertEquals("handleGetExtendeYear", exYear, 2017);
int monthStart = handleComputeMonthStart(2016, 4, false);
assertEquals("handleComputeMonthStart false", 735840, monthStart);
monthStart = handleComputeMonthStart(2016, 4, true);
assertEquals("handleComputeMonthStart true", 735964, monthStart);
Calendar cal = Calendar.getInstance();
cal.set(1980, 5, 2);
this.setTime(cal.getTime());
assertEquals("handleComputeFields: year set", 1980, get(YEAR));
assertEquals("handleComputeFields: month set", 5, get(MONTH));
assertEquals("handleComputeFields: day set", 2, get(DAY_OF_MONTH));
}
}
StubCalendar stub = new StubCalendar();
stub.run();
}
use of android.icu.util.ChineseCalendar in project j2objc by google.
the class DateFormatTest method TestChineseDateFormatLocalizedPatternChars.
@Test
public void TestChineseDateFormatLocalizedPatternChars() {
// jb 4904
// make sure we can display localized versions of the chars used in the default
// chinese date format patterns
Calendar chineseCalendar = new ChineseCalendar();
chineseCalendar.setTimeInMillis((new Date()).getTime());
SimpleDateFormat longChineseDateFormat = (SimpleDateFormat) chineseCalendar.getDateTimeFormat(DateFormat.LONG, DateFormat.LONG, Locale.CHINA);
DateFormatSymbols dfs = new ChineseDateFormatSymbols(chineseCalendar, Locale.CHINA);
longChineseDateFormat.setDateFormatSymbols(dfs);
// This next line throws the exception
try {
longChineseDateFormat.toLocalizedPattern();
} catch (Exception e) {
errln("could not localized pattern: " + e.getMessage());
}
}
use of android.icu.util.ChineseCalendar in project j2objc by google.
the class CalendarTestFmwk method doTestCases.
/**
* Iterates through a list of calendar <code>TestCase</code> objects and
* makes sure that the time-to-fields and fields-to-time calculations work
* correnctly for the values in each test case.
*/
protected void doTestCases(TestCase[] cases, Calendar cal) {
cal.setTimeZone(UTC);
// Get a format to use for printing dates in the calendar system we're testing
DateFormat format = DateFormat.getDateTimeInstance(cal, DateFormat.SHORT, -1, Locale.getDefault());
final String pattern = (cal instanceof ChineseCalendar) ? "E MMl/dd/y G HH:mm:ss.S z" : "E, MM/dd/yyyy G HH:mm:ss.S z";
((SimpleDateFormat) format).applyPattern(pattern);
// This format is used for printing Gregorian dates.
DateFormat gregFormat = new SimpleDateFormat(pattern);
gregFormat.setTimeZone(UTC);
GregorianCalendar pureGreg = new GregorianCalendar(UTC);
pureGreg.setGregorianChange(new Date(Long.MIN_VALUE));
DateFormat pureGregFmt = new SimpleDateFormat("E M/d/yyyy G");
pureGregFmt.setCalendar(pureGreg);
// Now iterate through the test cases and see what happens
for (int i = 0; i < cases.length; i++) {
logln("\ntest case: " + i);
TestCase test = cases[i];
//
// First we want to make sure that the millis -> fields calculation works
// test.applyTime will call setTime() on the calendar object, and
// test.fieldsEqual will retrieve all of the field values and make sure
// that they're the same as the ones in the testcase
//
test.applyTime(cal);
if (!test.fieldsEqual(cal, this)) {
errln("Fail: (millis=>fields) " + gregFormat.format(test.getTime()) + " => " + format.format(cal.getTime()) + ", expected " + test);
}
//
// If that was OK, check the fields -> millis calculation
// test.applyFields will set all of the calendar's fields to
// match those in the test case.
//
cal.clear();
test.applyFields(cal);
if (!test.equals(cal)) {
errln("Fail: (fields=>millis) " + test + " => " + pureGregFmt.format(cal.getTime()) + ", expected " + pureGregFmt.format(test.getTime()));
}
}
}
Aggregations