]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/tests/localespi/src/com/ibm/icu/dev/test/localespi/DateFormatSymbolsTest.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / tests / localespi / src / com / ibm / icu / dev / test / localespi / DateFormatSymbolsTest.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 2008, International Business Machines Corporation and         *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  */\r
7 package com.ibm.icu.dev.test.localespi;\r
8 \r
9 import java.text.DateFormatSymbols;\r
10 import java.util.Locale;\r
11 \r
12 import com.ibm.icu.dev.test.TestFmwk;\r
13 \r
14 public class DateFormatSymbolsTest extends TestFmwk {\r
15     public static void main(String[] args) throws Exception {\r
16         new DateFormatSymbolsTest().run(args);\r
17     }\r
18 \r
19     /*\r
20      * Check if getInstance returns the ICU implementation.\r
21      */\r
22     public void TestGetInstance() {\r
23         for (Locale loc : DateFormatSymbols.getAvailableLocales()) {\r
24             if (TestUtil.isProblematicIBMLocale(loc)) {\r
25                 logln("Skipped " + loc);\r
26                 continue;\r
27             }\r
28 \r
29             DateFormatSymbols dfs = DateFormatSymbols.getInstance(loc);\r
30 \r
31             boolean isIcuImpl = (dfs instanceof com.ibm.icu.impl.jdkadapter.DateFormatSymbolsICU);\r
32 \r
33             if (TestUtil.isICUExtendedLocale(loc)) {\r
34                 if (!isIcuImpl) {\r
35                     errln("FAIL: getInstance returned JDK DateFormatSymbols for locale " + loc);\r
36                 }\r
37             } else {\r
38                 if (isIcuImpl) {\r
39                     logln("INFO: getInstance returned ICU DateFormatSymbols for locale " + loc);\r
40                 }\r
41                 Locale iculoc = TestUtil.toICUExtendedLocale(loc);\r
42                 DateFormatSymbols dfsIcu = DateFormatSymbols.getInstance(iculoc);\r
43                 if (isIcuImpl) {\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
47                     }\r
48                 } else {\r
49                     if (!(dfsIcu instanceof com.ibm.icu.impl.jdkadapter.DateFormatSymbolsICU)) {\r
50                         errln("FAIL: getInstance returned JDK DateFormatSymbols for locale " + iculoc);\r
51                     }\r
52                 }\r
53             }\r
54         }\r
55     }\r
56 \r
57     /*\r
58      * Testing the contents of DateFormatSymbols between ICU instance and its\r
59      * equivalent created via the Locale SPI framework.\r
60      */\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
67         };\r
68 \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
73 \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
81         }\r
82     }\r
83 \r
84     /*\r
85      * Testing setters\r
86      */\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
90 \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
94 \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
103 \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
111     }\r
112 \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
117 \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
122             }\r
123 \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
130                     }\r
131                 }\r
132             }\r
133 \r
134         } else {\r
135             String[] ja = (String[])jarray;\r
136             String[] ia = (String[])iarray;\r
137 \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
142             } else {\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
147                     }\r
148                 }\r
149             }\r
150         }\r
151     }\r
152 \r
153     /*\r
154      * Testing Nynorsk locales\r
155      */\r
156     public void TestNynorsk() {\r
157         Locale nnNO = new Locale("nn", "NO");\r
158         Locale noNONY = new Locale("no", "NO", "NY");\r
159 \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
163 \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
169 \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
174             }\r
175         }\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
180             }\r
181         }\r
182     }\r
183 }\r