6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 * @test 26 * @bug 8004489 8006509 27 * @summary Unit test for CLDR FormatData resources 28 * @modules java.base/sun.util.locale.provider 29 * @compile -XDignore.symbol.file CldrFormatNamesTest.java 30 * @run main/othervm -Djava.locale.providers=CLDR CldrFormatNamesTest 31 */ 32 33 import java.util.*; 34 import static java.util.Calendar.*; 35 import sun.util.locale.provider.*; 36 37 public class CldrFormatNamesTest { 38 private static final Locale ARABIC = new Locale("ar"); 39 private static final Locale ZH_HANT = Locale.forLanguageTag("zh-Hant"); 40 41 /* 42 * The first element is a Locale followed by key-value pairs 43 * in a FormatData resource bundle. The value type is either 44 * String or String[]. 45 */ 46 static final Object[][] CLDR_DATA = { 47 { 48 Locale.JAPAN, 49 "field.zone", "\u30bf\u30a4\u30e0\u30be\u30fc\u30f3", 50 "java.time.japanese.DatePatterns", new String[] { 51 "Gy\u5e74M\u6708d\u65e5EEEE", 52 "Gy\u5e74M\u6708d\u65e5", 53 "Gy\u5e74M\u6708d\u65e5", 54 "Gyy/MM/dd", 55 }, 56 "java.time.roc.DatePatterns", new String[] { 57 "Gy\u5e74M\u6708d\u65e5EEEE", 58 "Gy\u5e74M\u6708d\u65e5", 59 "Gy/MM/dd", 60 "Gy/MM/dd", 61 }, 62 "calendarname.buddhist", "\u30bf\u30a4\u4ecf\u6559\u66a6", 63 }, 64 { 65 Locale.PRC, 66 "field.zone", "\u533a\u57df", 67 "java.time.islamic.DatePatterns", new String[] { 68 "Gy\u5e74M\u6708d\u65e5EEEE", 69 "Gy\u5e74M\u6708d\u65e5", 70 "Gy\u5e74M\u6708d\u65e5", 71 "Gyy-MM-dd", 72 }, 73 "calendarname.islamic", "\u4f0a\u65af\u5170\u65e5\u5386", 74 }, 75 { 76 Locale.GERMANY, 77 "field.dayperiod", "Tagesh\u00e4lfte", 78 "java.time.islamic.DatePatterns", new String[] { 79 "EEEE d. MMMM y G", 80 "d. MMMM y G", 81 "d. MMM y G", 82 "d.M.y G", 83 }, 84 "calendarname.islamic", "Islamischer Kalender", 85 }, 86 }; 87 88 // Islamic calendar symbol names in ar 89 private static final String[] ISLAMIC_MONTH_NAMES = { 90 "\u0645\u062d\u0631\u0645", 91 "\u0635\u0641\u0631", 92 "\u0631\u0628\u064a\u0639 \u0627\u0644\u0623\u0648\u0644", 93 "\u0631\u0628\u064a\u0639 \u0627\u0644\u0622\u062e\u0631", 94 "\u062c\u0645\u0627\u062f\u0649 \u0627\u0644\u0623\u0648\u0644\u0649", 95 "\u062c\u0645\u0627\u062f\u0649 \u0627\u0644\u0622\u062e\u0631\u0629", 96 "\u0631\u062c\u0628", 97 "\u0634\u0639\u0628\u0627\u0646", 98 "\u0631\u0645\u0636\u0627\u0646", 99 "\u0634\u0648\u0627\u0644", 100 "\u0630\u0648 \u0627\u0644\u0642\u0639\u062f\u0629", 101 "\u0630\u0648 \u0627\u0644\u062d\u062c\u0629", 102 }; 103 private static final String[] ISLAMIC_ERA_NAMES = { 104 "", 105 "\u0647\u0640", 110 "\u6c11\u570b\u524d", 111 "\u6c11\u570b", 112 }; 113 114 private static int errors = 0; 115 116 // This test is CLDR data dependent. 117 public static void main(String[] args) { 118 for (Object[] data : CLDR_DATA) { 119 Locale locale = (Locale) data[0]; 120 ResourceBundle rb = LocaleProviderAdapter.getResourceBundleBased() 121 .getLocaleResources(locale).getJavaTimeFormatData(); 122 for (int i = 1; i < data.length; ) { 123 String key = (String) data[i++]; 124 Object expected = data[i++]; 125 if (rb.containsKey(key)) { 126 Object value = rb.getObject(key); 127 if (expected instanceof String) { 128 if (!expected.equals(value)) { 129 errors++; 130 System.err.printf("error: key='%s', got '%s' expected '%s'%n", 131 key, value, expected); 132 } 133 } else if (expected instanceof String[]) { 134 try { 135 if (!Arrays.equals((Object[]) value, (Object[]) expected)) { 136 errors++; 137 System.err.printf("error: key='%s', got '%s' expected '%s'%n", 138 key, Arrays.asList((Object[])value), 139 Arrays.asList((Object[])expected)); 140 } 141 } catch (Exception e) { 142 errors++; 143 e.printStackTrace(); 144 } 145 } 146 } else { 147 errors++; 148 System.err.println("No resource for " + key); 149 } 150 } 151 } 152 153 // test Islamic calendar names in Arabic 154 testSymbolNames(ARABIC, "islamic", ISLAMIC_MONTH_NAMES, MONTH, LONG, "month"); 155 testSymbolNames(ARABIC, "islamic", ISLAMIC_ERA_NAMES, ERA, SHORT, "era"); 156 157 // test ROC (Minguo) calendar names in zh-Hant 158 testSymbolNames(ZH_HANT, "roc", ROC_ERA_NAMES, ERA, SHORT, "era"); 159 160 if (errors > 0) { 161 throw new RuntimeException("test failed"); 162 } 163 } 164 165 private static void testSymbolNames(Locale locale, String calType, String[] expected, 166 int field, int style, String fieldName) { 167 for (int i = 0; i < expected.length; i++) { 168 String expt = expected[i]; | 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 * @test 26 * @bug 8004489 8006509 8008577 27 * @summary Unit test for CLDR FormatData resources 28 * @modules java.base/sun.util.locale.provider 29 * @compile -XDignore.symbol.file CldrFormatNamesTest.java 30 * @run main/othervm -Djava.locale.providers=CLDR CldrFormatNamesTest 31 */ 32 33 import java.util.*; 34 import static java.util.Calendar.*; 35 import sun.util.locale.provider.*; 36 37 public class CldrFormatNamesTest { 38 private static final Locale ARABIC = new Locale("ar"); 39 private static final Locale ZH_HANT = Locale.forLanguageTag("zh-Hant"); 40 41 /* 42 * The first element is a Locale followed by key-value pairs 43 * in a FormatData resource bundle. The value type is either 44 * String or String[]. 45 */ 46 static final Object[][] CLDR_DATA = { 47 { 48 Locale.JAPAN, 49 "field.zone", "\u30bf\u30a4\u30e0\u30be\u30fc\u30f3", 50 "java.time.japanese.DatePatterns", new String[] { 51 "Gy\u5e74M\u6708d\u65e5EEEE", 52 "Gy\u5e74M\u6708d\u65e5", 53 "Gy\u5e74M\u6708d\u65e5", 54 "Gyy/MM/dd", 55 }, 56 "java.time.roc.DatePatterns", new String[] { 57 "Gy\u5e74M\u6708d\u65e5EEEE", 58 "Gy\u5e74M\u6708d\u65e5", 59 "Gy/MM/dd", 60 "Gy/MM/dd", 61 }, 62 "calendarname.buddhist", "\u30bf\u30a4\u4ecf\u6559\u66a6", 63 }, 64 { 65 Locale.PRC, 66 "field.zone", "\u65f6\u533a", 67 "java.time.islamic.DatePatterns", new String[] { 68 "Gy\u5e74M\u6708d\u65e5EEEE", 69 "Gy\u5e74M\u6708d\u65e5", 70 "Gy\u5e74M\u6708d\u65e5", 71 "Gy/M/d", 72 }, 73 "calendarname.islamic", "\u4f0a\u65af\u5170\u65e5\u5386", 74 }, 75 { 76 Locale.GERMANY, 77 "field.dayperiod", "Tagesh\u00e4lfte", 78 "java.time.islamic.DatePatterns", new String[] { 79 "EEEE, d. MMMM y G", 80 "d. MMMM y G", 81 "dd.MM.y G", 82 "dd.MM.yy GGGGG", 83 }, 84 "calendarname.islamic", "Islamischer Kalender", 85 }, 86 { 87 Locale.FRANCE, 88 "field.dayperiod", "cadran", 89 "java.time.islamic.DatePatterns", new String[] { 90 "EEEE d MMMM y G", 91 "d MMMM y G", 92 "d MMM y G", 93 "dd/MM/y GGGGG", 94 }, 95 "calendarname.islamic", "calendrier musulman", 96 }, 97 }; 98 99 // Islamic calendar symbol names in ar 100 private static final String[] ISLAMIC_MONTH_NAMES = { 101 "\u0645\u062d\u0631\u0645", 102 "\u0635\u0641\u0631", 103 "\u0631\u0628\u064a\u0639 \u0627\u0644\u0623\u0648\u0644", 104 "\u0631\u0628\u064a\u0639 \u0627\u0644\u0622\u062e\u0631", 105 "\u062c\u0645\u0627\u062f\u0649 \u0627\u0644\u0623\u0648\u0644\u0649", 106 "\u062c\u0645\u0627\u062f\u0649 \u0627\u0644\u0622\u062e\u0631\u0629", 107 "\u0631\u062c\u0628", 108 "\u0634\u0639\u0628\u0627\u0646", 109 "\u0631\u0645\u0636\u0627\u0646", 110 "\u0634\u0648\u0627\u0644", 111 "\u0630\u0648 \u0627\u0644\u0642\u0639\u062f\u0629", 112 "\u0630\u0648 \u0627\u0644\u062d\u062c\u0629", 113 }; 114 private static final String[] ISLAMIC_ERA_NAMES = { 115 "", 116 "\u0647\u0640", 121 "\u6c11\u570b\u524d", 122 "\u6c11\u570b", 123 }; 124 125 private static int errors = 0; 126 127 // This test is CLDR data dependent. 128 public static void main(String[] args) { 129 for (Object[] data : CLDR_DATA) { 130 Locale locale = (Locale) data[0]; 131 ResourceBundle rb = LocaleProviderAdapter.getResourceBundleBased() 132 .getLocaleResources(locale).getJavaTimeFormatData(); 133 for (int i = 1; i < data.length; ) { 134 String key = (String) data[i++]; 135 Object expected = data[i++]; 136 if (rb.containsKey(key)) { 137 Object value = rb.getObject(key); 138 if (expected instanceof String) { 139 if (!expected.equals(value)) { 140 errors++; 141 System.err.printf("error: key='%s', got '%s' expected '%s', rb: %s%n", 142 key, value, expected, rb); 143 } 144 } else if (expected instanceof String[]) { 145 try { 146 if (!Arrays.equals((Object[]) value, (Object[]) expected)) { 147 errors++; 148 System.err.printf("error: key='%s', got '%s' expected '%s', rb: %s%n", 149 key, Arrays.asList((Object[])value), 150 Arrays.asList((Object[])expected), rb); 151 } 152 } catch (Exception e) { 153 errors++; 154 e.printStackTrace(); 155 } 156 } 157 } else { 158 errors++; 159 System.err.println("No resource for " + key+", rb: "+rb); 160 } 161 } 162 } 163 164 // test Islamic calendar names in Arabic 165 testSymbolNames(ARABIC, "islamic", ISLAMIC_MONTH_NAMES, MONTH, LONG, "month"); 166 testSymbolNames(ARABIC, "islamic", ISLAMIC_ERA_NAMES, ERA, SHORT, "era"); 167 168 // test ROC (Minguo) calendar names in zh-Hant 169 testSymbolNames(ZH_HANT, "roc", ROC_ERA_NAMES, ERA, SHORT, "era"); 170 171 if (errors > 0) { 172 throw new RuntimeException("test failed"); 173 } 174 } 175 176 private static void testSymbolNames(Locale locale, String calType, String[] expected, 177 int field, int style, String fieldName) { 178 for (int i = 0; i < expected.length; i++) { 179 String expt = expected[i]; |