2 *******************************************************************************
\r
3 * Copyright (C) 2008, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
7 package com.ibm.icu.dev.test.localespi;
\r
9 import java.text.DateFormatSymbols;
\r
10 import java.util.Locale;
\r
12 import com.ibm.icu.dev.test.TestFmwk;
\r
14 public class DateFormatSymbolsTest extends TestFmwk {
\r
15 public static void main(String[] args) throws Exception {
\r
16 new DateFormatSymbolsTest().run(args);
\r
20 * Check if getInstance returns the ICU implementation.
\r
22 public void TestGetInstance() {
\r
23 for (Locale loc : DateFormatSymbols.getAvailableLocales()) {
\r
24 if (TestUtil.isProblematicIBMLocale(loc)) {
\r
25 logln("Skipped " + loc);
\r
29 DateFormatSymbols dfs = DateFormatSymbols.getInstance(loc);
\r
31 boolean isIcuImpl = (dfs instanceof com.ibm.icu.impl.jdkadapter.DateFormatSymbolsICU);
\r
33 if (TestUtil.isICUExtendedLocale(loc)) {
\r
35 errln("FAIL: getInstance returned JDK DateFormatSymbols for locale " + loc);
\r
39 logln("INFO: getInstance returned ICU DateFormatSymbols for locale " + loc);
\r
41 Locale iculoc = TestUtil.toICUExtendedLocale(loc);
\r
42 DateFormatSymbols dfsIcu = DateFormatSymbols.getInstance(iculoc);
\r
44 if (!dfs.equals(dfsIcu)) {
\r
45 errln("FAIL: getInstance returned ICU DateFormatSymbols for locale " + loc
\r
46 + ", but different from the one for locale " + iculoc);
\r
49 if (!(dfsIcu instanceof com.ibm.icu.impl.jdkadapter.DateFormatSymbolsICU)) {
\r
50 errln("FAIL: getInstance returned JDK DateFormatSymbols for locale " + iculoc);
\r
58 * Testing the contents of DateFormatSymbols between ICU instance and its
\r
59 * equivalent created via the Locale SPI framework.
\r
61 public void TestICUEquivalent() {
\r
62 Locale[] TEST_LOCALES = {
\r
63 new Locale("en", "US"),
\r
64 new Locale("es", "ES"),
\r
65 new Locale("ja", "JP", "JP"),
\r
66 new Locale("th", "TH"),
\r
69 for (Locale loc : TEST_LOCALES) {
\r
70 Locale iculoc = TestUtil.toICUExtendedLocale(loc);
\r
71 DateFormatSymbols jdkDfs = DateFormatSymbols.getInstance(iculoc);
\r
72 com.ibm.icu.text.DateFormatSymbols icuDfs = com.ibm.icu.text.DateFormatSymbols.getInstance(loc);
\r
74 compareArrays(jdkDfs.getAmPmStrings(), icuDfs.getAmPmStrings(), loc, "getAmPmStrings");
\r
75 compareArrays(jdkDfs.getEras(), icuDfs.getEras(), loc, "getEras");
\r
76 compareArrays(jdkDfs.getMonths(), icuDfs.getMonths(), loc, "getMonths");
\r
77 compareArrays(jdkDfs.getShortMonths(), icuDfs.getShortMonths(), loc, "getShortMonths");
\r
78 compareArrays(jdkDfs.getShortWeekdays(), icuDfs.getShortWeekdays(), loc, "getShortWeekdays");
\r
79 compareArrays(jdkDfs.getWeekdays(), icuDfs.getWeekdays(), loc, "getWeekdays");
\r
80 compareArrays(jdkDfs.getZoneStrings(), icuDfs.getZoneStrings(), loc, "getZoneStrings");
\r
87 public void TestSetSymbols() {
\r
88 // ICU's JDK DateFormatSymbols implementation for ja_JP locale
\r
89 DateFormatSymbols dfs = DateFormatSymbols.getInstance(new Locale("ja", "JP", "ICU"));
\r
91 // en_US is supported by JDK, so this is the JDK's own DateFormatSymbols
\r
92 Locale loc = new Locale("en", "US");
\r
93 DateFormatSymbols dfsEnUS = DateFormatSymbols.getInstance(loc);
\r
95 // Copying over all symbols
\r
96 dfs.setAmPmStrings(dfsEnUS.getAmPmStrings());
\r
97 dfs.setEras(dfsEnUS.getEras());
\r
98 dfs.setMonths(dfsEnUS.getMonths());
\r
99 dfs.setShortMonths(dfsEnUS.getShortMonths());
\r
100 dfs.setShortWeekdays(dfsEnUS.getShortWeekdays());
\r
101 dfs.setWeekdays(dfsEnUS.getWeekdays());
\r
102 dfs.setZoneStrings(dfsEnUS.getZoneStrings());
\r
104 compareArrays(dfs.getAmPmStrings(), dfsEnUS.getAmPmStrings(), loc, "getAmPmStrings");
\r
105 compareArrays(dfs.getEras(), dfsEnUS.getEras(), loc, "getEras");
\r
106 compareArrays(dfs.getMonths(), dfsEnUS.getMonths(), loc, "getMonths");
\r
107 compareArrays(dfs.getShortMonths(), dfsEnUS.getShortMonths(), loc, "getShortMonths");
\r
108 compareArrays(dfs.getShortWeekdays(), dfsEnUS.getShortWeekdays(), loc, "getShortWeekdays");
\r
109 compareArrays(dfs.getWeekdays(), dfsEnUS.getWeekdays(), loc, "getWeekdays");
\r
110 compareArrays(dfs.getZoneStrings(), dfsEnUS.getZoneStrings(), loc, "getZoneStrings");
\r
113 private void compareArrays(Object jarray, Object iarray, Locale loc, String method) {
\r
114 if (jarray instanceof String[][]) {
\r
115 String[][] jaa = (String[][])jarray;
\r
116 String[][] iaa = (String[][])iarray;
\r
118 if (jaa.length != iaa.length || jaa[0].length != iaa[0].length) {
\r
119 errln("FAIL: Different array size returned by " + method + "for locale "
\r
120 + loc + "(jdksize=" + jaa.length + "x" + jaa[0].length
\r
121 + ",icusize=" + iaa.length + "x" + iaa[0].length + ")");
\r
124 for (int i = 0; i < jaa.length; i++) {
\r
125 for (int j = 0; j < jaa[i].length; j++) {
\r
126 if (!TestUtil.equals(jaa[i][j], iaa[i][j])) {
\r
127 errln("FAIL: Different symbols returned by " + method + "for locale "
\r
128 + loc + " at index " + i + "," + j
\r
129 + " (jdk=" + jaa[i][j] + ",icu=" + iaa[i][j] + ")");
\r
135 String[] ja = (String[])jarray;
\r
136 String[] ia = (String[])iarray;
\r
138 if (ja.length != ia.length) {
\r
139 errln("FAIL: Different array size returned by " + method + "for locale "
\r
140 + loc + "(jdksize=" + ja.length
\r
141 + ",icusize=" + ia.length + ")");
\r
143 for (int i = 0; i < ja.length; i++) {
\r
144 if (!TestUtil.equals(ja[i], ia[i])) {
\r
145 errln("FAIL: Different symbols returned by " + method + "for locale "
\r
146 + loc + " at index " + i + " (jdk=" + ja[i] + ",icu=" + ia[i] + ")");
\r
154 * Testing Nynorsk locales
\r
156 public void TestNynorsk() {
\r
157 Locale nnNO = new Locale("nn", "NO");
\r
158 Locale noNONY = new Locale("no", "NO", "NY");
\r
160 DateFormatSymbols dfs_nnNO = DateFormatSymbols.getInstance(nnNO);
\r
161 DateFormatSymbols dfs_nnNO_ICU = DateFormatSymbols.getInstance(TestUtil.toICUExtendedLocale(nnNO));
\r
162 DateFormatSymbols dfs_noNONY_ICU = DateFormatSymbols.getInstance(TestUtil.toICUExtendedLocale(noNONY));
\r
164 // Weekday names should be identical for these three.
\r
165 // If data is taken from no/nb, then this check will fail.
\r
166 String[] dow_nnNO = dfs_nnNO.getWeekdays();
\r
167 String[] dow_nnNO_ICU = dfs_nnNO_ICU.getWeekdays();
\r
168 String[] dow_noNONY_ICU = dfs_noNONY_ICU.getWeekdays();
\r
170 for (int i = 1; i < dow_nnNO.length; i++) {
\r
171 if (!dow_nnNO[i].equals(dow_nnNO_ICU[i])) {
\r
172 errln("FAIL: Different weekday name - index=" + i
\r
173 + ", nn_NO:" + dow_nnNO[i] + ", nn_NO_ICU:" + dow_nnNO_ICU[i]);
\r
176 for (int i = 1; i < dow_nnNO.length; i++) {
\r
177 if (!dow_nnNO[i].equals(dow_noNONY_ICU[i])) {
\r
178 errln("FAIL: Different weekday name - index=" + i
\r
179 + ", nn_NO:" + dow_nnNO[i] + ", no_NO_NY_ICU:" + dow_nnNO_ICU[i]);
\r