Print this page
rev 5696 : 6336885: RFE: Locale Data Deployment Enhancements
4609153: Provide locale data for Indic locales
5104387: Support for gl_ES locale (galician language)
6337471: desktop/system locale preferences support
7056139: (cal) SPI support for locale-dependent Calendar parameters
7058206: Provide CalendarData SPI for week params and display field value names
7073852: Support multiple scripts for digits and decimal symbols per locale
7079560: [Fmt-Da] Context dependent month names support in SimpleDateFormat
7171324: getAvailableLocales() of locale sensitive services should return the actual availability of locales
7151414: (cal) Support calendar type identification
7168528: LocaleServiceProvider needs to be aware of Locale extensions
7171372: (cal) locale's default Calendar should be created if unknown calendar is specified
Summary: JEP 127: Improve Locale Data Packaging and Adopt Unicode CLDR Data (part 1 w/o packaging changes. by Naoto Sato and Masayoshi Okutsu)
Split |
Close |
Expand all |
Collapse all |
--- old/test/java/util/PluggableLocale/DateFormatProviderTest.java
+++ new/test/java/util/PluggableLocale/DateFormatProviderTest.java
1 1 /*
2 - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
2 + * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
3 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 4 *
5 5 * This code is free software; you can redistribute it and/or modify it
6 6 * under the terms of the GNU General Public License version 2 only, as
7 7 * published by the Free Software Foundation.
8 8 *
9 9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 12 * version 2 for more details (a copy is included in the LICENSE file that
13 13 * accompanied this code).
14 14 *
15 15 * You should have received a copy of the GNU General Public License version
16 16 * 2 along with this work; if not, write to the Free Software Foundation,
17 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 18 *
↓ open down ↓ |
6 lines elided |
↑ open up ↑ |
19 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 20 * or visit www.oracle.com if you need additional information or have any
21 21 * questions.
22 22 */
23 23 /*
24 24 *
25 25 */
26 26
27 27 import java.text.*;
28 28 import java.util.*;
29 -import sun.util.*;
29 +import sun.util.locale.provider.*;
30 30 import sun.util.resources.*;
31 31
32 32 public class DateFormatProviderTest extends ProviderTest {
33 33
34 34 com.foo.DateFormatProviderImpl dfp = new com.foo.DateFormatProviderImpl();
35 35 List<Locale> availloc = Arrays.asList(DateFormat.getAvailableLocales());
36 36 List<Locale> providerloc = Arrays.asList(dfp.getAvailableLocales());
37 - List<Locale> jreloc = Arrays.asList(LocaleData.getAvailableLocales());
37 + List<Locale> jreimplloc = Arrays.asList(LocaleProviderAdapter.forJRE().getDateFormatProvider().getAvailableLocales());
38 38
39 39 public static void main(String[] s) {
40 40 new DateFormatProviderTest();
41 41 }
42 42
43 43 DateFormatProviderTest() {
44 - availableLocalesTest();
45 44 objectValidityTest();
46 45 extendedVariantTest();
47 46 messageFormatTest();
48 47 }
49 48
50 - void availableLocalesTest() {
51 - Set<Locale> localesFromAPI = new HashSet<Locale>(availloc);
52 - Set<Locale> localesExpected = new HashSet<Locale>(jreloc);
53 - localesExpected.addAll(providerloc);
54 - if (localesFromAPI.equals(localesExpected)) {
55 - System.out.println("availableLocalesTest passed.");
56 - } else {
57 - throw new RuntimeException("availableLocalesTest failed");
58 - }
59 - }
60 -
61 49 void objectValidityTest() {
62 50
63 51 for (Locale target: availloc) {
64 52 // Get the key for the date/time patterns which is
65 53 // specific to each calendar system.
66 54 Calendar cal = Calendar.getInstance(target);
67 - String key = "DateTimePatterns";
68 - if (!cal.getClass().getName().equals("java.util.GregorianCalendar")) {
69 - // e.g., "java.util.JapaneseImperialCalendar.DateTimePatterns"
70 - key = cal.getClass().getName() + "." + key;
55 + String dkey = "DatePatterns";
56 + String tkey = "TimePatterns";
57 + String dtkey = "DateTimePatterns";
58 + switch (cal.getCalendarType()) {
59 + case "java.util.JapaneseImperialCalendar":
60 + dkey = "japanese"+ "." + dkey;
61 + tkey = "japanese"+ "." + tkey;
62 + dtkey = "japanese"+ "." + dtkey;
63 + break;
64 + case "sun.util.BuddhistCalendar":
65 + dkey = "buddhist"+ "." + dkey;
66 + tkey = "buddhist"+ "." + tkey;
67 + dtkey = "buddhist"+ "." + dtkey;
68 + break;
69 + case "java.util.GregorianCalendar":
70 + default:
71 + break;
71 72 }
72 73 // pure JRE implementation
73 - ResourceBundle rb = LocaleData.getDateFormatData(target);
74 - boolean jreSupportsLocale = jreloc.contains(target);
74 + ResourceBundle rb = LocaleProviderAdapter.forJRE().getLocaleData().getDateFormatData(target);
75 + boolean jreSupportsLocale = jreimplloc.contains(target);
75 76
76 77 // JRE string arrays
78 + String[] jreDatePatterns = null;
79 + String[] jreTimePatterns = null;
77 80 String[] jreDateTimePatterns = null;
78 81 if (jreSupportsLocale) {
79 82 try {
80 - jreDateTimePatterns = (String[])rb.getObject(key);
83 + jreDatePatterns = (String[])rb.getObject(dkey);
84 + jreTimePatterns = (String[])rb.getObject(tkey);
85 + jreDateTimePatterns = (String[])rb.getObject(dtkey);
81 86 } catch (MissingResourceException mre) {}
82 87 }
83 88
84 89 for (int style = DateFormat.FULL; style <= DateFormat.SHORT; style ++) {
85 90 // result object
86 91 DateFormat result = DateFormat.getDateTimeInstance(style, style, target);
87 92
88 93 // provider's object (if any)
89 94 DateFormat providersResult = null;
90 95 if (providerloc.contains(target)) {
91 96 providersResult = dfp.getDateTimeInstance(style, style, target);
92 97 }
93 98
94 99 // JRE's object (if any)
95 100 DateFormat jresResult = null;
96 101 if (jreSupportsLocale) {
97 - Object[] dateTimeArgs = {jreDateTimePatterns[style],
98 - jreDateTimePatterns[style + 4]};
99 - String pattern = MessageFormat.format(jreDateTimePatterns[8], dateTimeArgs);
102 + Object[] dateTimeArgs = {jreTimePatterns[style],
103 + jreDatePatterns[style]};
104 + String pattern = MessageFormat.format(jreDateTimePatterns[0], dateTimeArgs);
100 105 jresResult = new SimpleDateFormat(pattern, target);
101 106 }
102 107
103 108 checkValidity(target, jresResult, providersResult, result, jreSupportsLocale);
104 109 }
105 110 }
106 111 }
107 112
108 113 // Check that fallback correctly occurs with locales with variant including '_'s
109 114 // This test assumes that the provider supports the ja_JP_osaka locale, and JRE does not.
110 115 void extendedVariantTest() {
111 116 Locale[] testlocs = {new Locale("ja", "JP", "osaka_extended"),
112 117 new Locale("ja", "JP", "osaka_extended_further"),
113 118 new Locale("ja", "JP", "osaka_")};
114 119 for (Locale test: testlocs) {
115 120 DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, test);
116 121 DateFormat provider = dfp.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, test);
117 122 if (!df.equals(provider)) {
118 123 throw new RuntimeException("variant fallback failed. test locale: "+test);
119 124 }
120 125 }
121 126 }
122 127
123 128
124 129 private static final String[] TYPES = {
125 130 "date",
126 131 "time"
127 132 };
128 133 private static final String[] MODIFIERS = {
129 134 "",
130 135 "short",
131 136 "medium", // Same as DEFAULT
132 137 "long",
133 138 "full"
134 139 };
135 140
136 141 void messageFormatTest() {
137 142 for (Locale target : providerloc) {
138 143 for (String type : TYPES) {
139 144 for (String modifier : MODIFIERS) {
140 145 String pattern, expected;
141 146 if (modifier.equals("")) {
142 147 pattern = String.format("%s={0,%s}", type, type);
143 148 } else {
144 149 pattern = String.format("%s={0,%s,%s}", type, type, modifier);
145 150 }
146 151 if (modifier.equals("medium")) {
147 152 // medium is default.
148 153 expected = String.format("%s={0,%s}", type, type);
149 154 } else {
150 155 expected = pattern;
151 156 }
152 157 MessageFormat mf = new MessageFormat(pattern, target);
153 158 Format[] fmts = mf.getFormats();
154 159 if (fmts[0] instanceof SimpleDateFormat) {
155 160 continue;
156 161 }
157 162 String toPattern = mf.toPattern();
158 163 if (!toPattern.equals(expected)) {
159 164 throw new RuntimeException("messageFormatTest: got '" + toPattern
160 165 + "', expected '" + expected + "'");
161 166 }
162 167 }
163 168 }
164 169 }
165 170 }
166 171 }
↓ open down ↓ |
57 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX