blob: d9357ddbfdb6f27c0e0a8152515ec1bf47a7c219 [file] [log] [blame]
/*
*******************************************************************************
* Copyright (C) 2008, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.dev.test.localespi;
import java.text.DateFormatSymbols;
import java.util.Locale;
import com.ibm.icu.dev.test.TestFmwk;
public class DateFormatSymbolsTest extends TestFmwk {
public static void main(String[] args) throws Exception {
new DateFormatSymbolsTest().run(args);
}
/*
* Check if getInstance returns the ICU implementation.
*/
public void TestGetInstance() {
for (Locale loc : DateFormatSymbols.getAvailableLocales()) {
if (TestUtil.isProblematicIBMLocale(loc)) {
logln("Skipped " + loc);
continue;
}
DateFormatSymbols dfs = DateFormatSymbols.getInstance(loc);
boolean isIcuImpl = (dfs instanceof com.ibm.icu.impl.jdkadapter.DateFormatSymbolsICU);
if (TestUtil.isICUExtendedLocale(loc)) {
if (!isIcuImpl) {
errln("FAIL: getInstance returned JDK DateFormatSymbols for locale " + loc);
}
} else {
if (isIcuImpl) {
logln("INFO: getInstance returned ICU DateFormatSymbols for locale " + loc);
}
Locale iculoc = TestUtil.toICUExtendedLocale(loc);
DateFormatSymbols dfsIcu = DateFormatSymbols.getInstance(iculoc);
if (isIcuImpl) {
if (!dfs.equals(dfsIcu)) {
errln("FAIL: getInstance returned ICU DateFormatSymbols for locale " + loc
+ ", but different from the one for locale " + iculoc);
}
} else {
if (!(dfsIcu instanceof com.ibm.icu.impl.jdkadapter.DateFormatSymbolsICU)) {
errln("FAIL: getInstance returned JDK DateFormatSymbols for locale " + iculoc);
}
}
}
}
}
/*
* Testing the contents of DateFormatSymbols between ICU instance and its
* equivalent created via the Locale SPI framework.
*/
public void TestICUEquivalent() {
Locale[] TEST_LOCALES = {
new Locale("en", "US"),
new Locale("es", "ES"),
new Locale("ja", "JP", "JP"),
new Locale("th", "TH"),
};
for (Locale loc : TEST_LOCALES) {
Locale iculoc = TestUtil.toICUExtendedLocale(loc);
DateFormatSymbols jdkDfs = DateFormatSymbols.getInstance(iculoc);
com.ibm.icu.text.DateFormatSymbols icuDfs = com.ibm.icu.text.DateFormatSymbols.getInstance(loc);
compareArrays(jdkDfs.getAmPmStrings(), icuDfs.getAmPmStrings(), loc, "getAmPmStrings");
compareArrays(jdkDfs.getEras(), icuDfs.getEras(), loc, "getEras");
compareArrays(jdkDfs.getMonths(), icuDfs.getMonths(), loc, "getMonths");
compareArrays(jdkDfs.getShortMonths(), icuDfs.getShortMonths(), loc, "getShortMonths");
compareArrays(jdkDfs.getShortWeekdays(), icuDfs.getShortWeekdays(), loc, "getShortWeekdays");
compareArrays(jdkDfs.getWeekdays(), icuDfs.getWeekdays(), loc, "getWeekdays");
compareArrays(jdkDfs.getZoneStrings(), icuDfs.getZoneStrings(), loc, "getZoneStrings");
}
}
/*
* Testing setters
*/
public void TestSetSymbols() {
// ICU's JDK DateFormatSymbols implementation for ja_JP locale
DateFormatSymbols dfs = DateFormatSymbols.getInstance(new Locale("ja", "JP", "ICU"));
// en_US is supported by JDK, so this is the JDK's own DateFormatSymbols
Locale loc = new Locale("en", "US");
DateFormatSymbols dfsEnUS = DateFormatSymbols.getInstance(loc);
// Copying over all symbols
dfs.setAmPmStrings(dfsEnUS.getAmPmStrings());
dfs.setEras(dfsEnUS.getEras());
dfs.setMonths(dfsEnUS.getMonths());
dfs.setShortMonths(dfsEnUS.getShortMonths());
dfs.setShortWeekdays(dfsEnUS.getShortWeekdays());
dfs.setWeekdays(dfsEnUS.getWeekdays());
dfs.setZoneStrings(dfsEnUS.getZoneStrings());
compareArrays(dfs.getAmPmStrings(), dfsEnUS.getAmPmStrings(), loc, "getAmPmStrings");
compareArrays(dfs.getEras(), dfsEnUS.getEras(), loc, "getEras");
compareArrays(dfs.getMonths(), dfsEnUS.getMonths(), loc, "getMonths");
compareArrays(dfs.getShortMonths(), dfsEnUS.getShortMonths(), loc, "getShortMonths");
compareArrays(dfs.getShortWeekdays(), dfsEnUS.getShortWeekdays(), loc, "getShortWeekdays");
compareArrays(dfs.getWeekdays(), dfsEnUS.getWeekdays(), loc, "getWeekdays");
compareArrays(dfs.getZoneStrings(), dfsEnUS.getZoneStrings(), loc, "getZoneStrings");
}
private void compareArrays(Object jarray, Object iarray, Locale loc, String method) {
if (jarray instanceof String[][]) {
String[][] jaa = (String[][])jarray;
String[][] iaa = (String[][])iarray;
if (jaa.length != iaa.length || jaa[0].length != iaa[0].length) {
errln("FAIL: Different array size returned by " + method + "for locale "
+ loc + "(jdksize=" + jaa.length + "x" + jaa[0].length
+ ",icusize=" + iaa.length + "x" + iaa[0].length + ")");
}
for (int i = 0; i < jaa.length; i++) {
for (int j = 0; j < jaa[i].length; j++) {
if (!TestUtil.equals(jaa[i][j], iaa[i][j])) {
errln("FAIL: Different symbols returned by " + method + "for locale "
+ loc + " at index " + i + "," + j
+ " (jdk=" + jaa[i][j] + ",icu=" + iaa[i][j] + ")");
}
}
}
} else {
String[] ja = (String[])jarray;
String[] ia = (String[])iarray;
if (ja.length != ia.length) {
errln("FAIL: Different array size returned by " + method + "for locale "
+ loc + "(jdksize=" + ja.length
+ ",icusize=" + ia.length + ")");
} else {
for (int i = 0; i < ja.length; i++) {
if (!TestUtil.equals(ja[i], ia[i])) {
errln("FAIL: Different symbols returned by " + method + "for locale "
+ loc + " at index " + i + " (jdk=" + ja[i] + ",icu=" + ia[i] + ")");
}
}
}
}
}
/*
* Testing Nynorsk locales
*/
public void TestNynorsk() {
Locale nnNO = new Locale("nn", "NO");
Locale noNONY = new Locale("no", "NO", "NY");
DateFormatSymbols dfs_nnNO = DateFormatSymbols.getInstance(nnNO);
DateFormatSymbols dfs_nnNO_ICU = DateFormatSymbols.getInstance(TestUtil.toICUExtendedLocale(nnNO));
DateFormatSymbols dfs_noNONY_ICU = DateFormatSymbols.getInstance(TestUtil.toICUExtendedLocale(noNONY));
// Weekday names should be identical for these three.
// If data is taken from no/nb, then this check will fail.
String[] dow_nnNO = dfs_nnNO.getWeekdays();
String[] dow_nnNO_ICU = dfs_nnNO_ICU.getWeekdays();
String[] dow_noNONY_ICU = dfs_noNONY_ICU.getWeekdays();
for (int i = 1; i < dow_nnNO.length; i++) {
if (!dow_nnNO[i].equals(dow_nnNO_ICU[i])) {
errln("FAIL: Different weekday name - index=" + i
+ ", nn_NO:" + dow_nnNO[i] + ", nn_NO_ICU:" + dow_nnNO_ICU[i]);
}
}
for (int i = 1; i < dow_nnNO.length; i++) {
if (!dow_nnNO[i].equals(dow_noNONY_ICU[i])) {
errln("FAIL: Different weekday name - index=" + i
+ ", nn_NO:" + dow_nnNO[i] + ", no_NO_NY_ICU:" + dow_nnNO_ICU[i]);
}
}
}
}