Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/java/util/Locale/Bug8040211.java
38813 views
1
/*
2
* Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
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 8040211 8191404 8203872 8222980 8225435
27
* @summary Checks the IANA language subtag registry data update
28
* (LSR Revision: 2019-09-16) with Locale and Locale.LanguageRange
29
* class methods.
30
* @run main Bug8040211
31
*/
32
33
import java.util.ArrayList;
34
import java.util.Arrays;
35
import java.util.Collections;
36
import java.util.Iterator;
37
import java.util.Locale;
38
import java.util.List;
39
import java.util.Locale.LanguageRange;
40
import java.util.Locale.FilteringMode;
41
import static java.util.Locale.FilteringMode.EXTENDED_FILTERING;
42
43
public class Bug8040211 {
44
45
static boolean err = false;
46
47
private static final String ACCEPT_LANGUAGE =
48
"Accept-Language: aam, adp, aog, aue, bcg, cey, cqu, dif, ema,"
49
+ " en-gb-oed, gti, kdz, koj, kwq, kxe, lii, lmm, lsn, lsv, lvi, mtm,"
50
+ " ngv, nns, oyb, phr, pnd, pub, snz, suj, szy,taj, tjj, tjp, tvx,"
51
+ " uss, uth, wkr;q=0.9, ar-hyw;q=0.8, yug;q=0.5, gfx;q=0.4";
52
private static final List<LanguageRange> EXPECTED_RANGE_LIST = Collections.unmodifiableList(
53
Arrays.asList(new LanguageRange[] {
54
new LanguageRange("aam", 1.0),
55
new LanguageRange("aas", 1.0),
56
new LanguageRange("adp", 1.0),
57
new LanguageRange("dz", 1.0),
58
new LanguageRange("aog", 1.0),
59
new LanguageRange("myd", 1.0),
60
new LanguageRange("aue", 1.0),
61
new LanguageRange("ktz", 1.0),
62
new LanguageRange("bcg", 1.0),
63
new LanguageRange("bgm", 1.0),
64
new LanguageRange("cey", 1.0),
65
new LanguageRange("cqu", 1.0),
66
new LanguageRange("quh", 1.0),
67
new LanguageRange("dif", 1.0),
68
new LanguageRange("dit", 1.0),
69
new LanguageRange("ema", 1.0),
70
new LanguageRange("uok", 1.0),
71
new LanguageRange("en-gb-oed", 1.0),
72
new LanguageRange("en-gb-oxendict", 1.0),
73
new LanguageRange("gti", 1.0),
74
new LanguageRange("nyc", 1.0),
75
new LanguageRange("kdz", 1.0),
76
new LanguageRange("ncp", 1.0),
77
new LanguageRange("koj", 1.0),
78
new LanguageRange("kwv", 1.0),
79
new LanguageRange("kwq", 1.0),
80
new LanguageRange("yam", 1.0),
81
new LanguageRange("kxe", 1.0),
82
new LanguageRange("tvd", 1.0),
83
new LanguageRange("lii", 1.0),
84
new LanguageRange("raq", 1.0),
85
new LanguageRange("lmm", 1.0),
86
new LanguageRange("rmx", 1.0),
87
new LanguageRange("lsn", 1.0),
88
new LanguageRange("lsv", 1.0),
89
new LanguageRange("lvi", 1.0),
90
new LanguageRange("mtm", 1.0),
91
new LanguageRange("ymt", 1.0),
92
new LanguageRange("ngv", 1.0),
93
new LanguageRange("nnx", 1.0),
94
new LanguageRange("nns", 1.0),
95
new LanguageRange("nbr", 1.0),
96
new LanguageRange("oyb", 1.0),
97
new LanguageRange("thx", 1.0),
98
new LanguageRange("skk", 1.0),
99
new LanguageRange("jeg", 1.0),
100
new LanguageRange("phr", 1.0),
101
new LanguageRange("pmu", 1.0),
102
new LanguageRange("pnd", 1.0),
103
new LanguageRange("pub", 1.0),
104
new LanguageRange("puz", 1.0),
105
new LanguageRange("snz", 1.0),
106
new LanguageRange("asd", 1.0),
107
new LanguageRange("suj", 1.0),
108
new LanguageRange("szy", 1.0),
109
new LanguageRange("taj", 1.0),
110
new LanguageRange("tsf", 1.0),
111
new LanguageRange("tjj", 1.0),
112
new LanguageRange("tjp", 1.0),
113
new LanguageRange("tvx", 1.0),
114
new LanguageRange("uss", 1.0),
115
new LanguageRange("uth", 1.0),
116
new LanguageRange("wkr", 0.9),
117
new LanguageRange("ar-hyw", 0.8),
118
new LanguageRange("yug", 0.5),
119
new LanguageRange("yuu", 0.5),
120
new LanguageRange("gfx", 0.4),
121
new LanguageRange("oun", 0.4),
122
new LanguageRange("mwj", 0.4),
123
new LanguageRange("vaj", 0.4)
124
}));
125
126
public static void main(String[] args) {
127
testLanguageRange();
128
testLocale();
129
130
if (err) {
131
throw new RuntimeException("Failed.");
132
}
133
}
134
135
private static void testLanguageRange() {
136
System.out.println("Test LanguageRange class parse method...");
137
test_parse();
138
}
139
140
private static void testLocale() {
141
System.out.println("Test Locale class methods...");
142
test_filter();
143
test_filterTags();
144
test_lookup();
145
test_lookupTag();
146
}
147
148
private static void test_parse() {
149
boolean error = false;
150
List<LanguageRange> got = LanguageRange.parse(ACCEPT_LANGUAGE);
151
if (!areEqual(EXPECTED_RANGE_LIST, got)) {
152
error = true;
153
System.err.println(" language parse() test failed.");
154
}
155
156
if (error) {
157
err = true;
158
System.out.println(" test_parse() failed.");
159
} else {
160
System.out.println(" test_parse() passed.");
161
}
162
163
}
164
165
private static boolean areEqual(List<LanguageRange> expected,
166
List<LanguageRange> got) {
167
boolean error = false;
168
169
int expectedSize = expected.size();
170
int actualSize = got.size();
171
172
if (expectedSize != actualSize) {
173
error = true;
174
175
System.err.println(" Expected size=" + expectedSize);
176
for (LanguageRange lr : expected) {
177
System.err.println(" range=" + lr.getRange()
178
+ ", weight=" + lr.getWeight());
179
}
180
181
System.err.println(" Actual size=" + actualSize);
182
for (LanguageRange lr : got) {
183
System.err.println(" range=" + lr.getRange()
184
+ ", weight=" + lr.getWeight());
185
}
186
} else {
187
for (int i = 0; i < expectedSize; i++) {
188
LanguageRange lr1 = expected.get(i);
189
LanguageRange lr2 = got.get(i);
190
191
if (!lr1.getRange().equals(lr2.getRange())
192
|| lr1.getWeight() != lr2.getWeight()) {
193
error = true;
194
System.err.println(" " + i + ": Expected: range=" + lr1.getRange()
195
+ ", weight=" + lr1.getWeight());
196
System.err.println(" " + i + ": Actual: range=" + lr2.getRange()
197
+ ", weight=" + lr2.getWeight());
198
}
199
}
200
}
201
202
return !error;
203
}
204
205
private static void test_filter() {
206
boolean error = false;
207
208
String ranges = "mtm-RU, en-gb-oed, coy, ar-HY";
209
String tags = "de-DE, en, mtm-RU, ymt-RU, en-gb-oxendict, ja-JP, pij, nts, ar-arevela";
210
FilteringMode mode = EXTENDED_FILTERING;
211
212
List<LanguageRange> priorityList = LanguageRange.parse(ranges);
213
List<Locale> tagList = generateLocales(tags);
214
String actualLocales
215
= showLocales(Locale.filter(priorityList, tagList, mode));
216
String expectedLocales = "mtm-RU, ymt-RU, en-GB-oxendict, nts, pij";
217
218
if (!expectedLocales.equals(actualLocales)) {
219
error = true;
220
showErrorMessage("#1 filter(" + mode + ")",
221
ranges, tags, expectedLocales, actualLocales);
222
}
223
224
ranges = "phr-*-IN, ja-JP";
225
tags = "en, pmu-Guru-IN, ja-Latn-JP, iw";
226
mode = EXTENDED_FILTERING;
227
228
priorityList = LanguageRange.parse(ranges);
229
tagList = generateLocales(tags);
230
actualLocales = showLocales(Locale.filter(priorityList, tagList, mode));
231
expectedLocales = "pmu-Guru-IN, ja-Latn-JP";
232
233
if (!expectedLocales.equals(actualLocales)) {
234
error = true;
235
showErrorMessage("#2 filter(" + mode + ")",
236
ranges, tags, expectedLocales, actualLocales);
237
}
238
239
if (error) {
240
err = true;
241
System.out.println(" test_filter() failed.");
242
} else {
243
System.out.println(" test_filter() passed.");
244
}
245
}
246
247
private static void test_filterTags() {
248
boolean error = false;
249
250
String ranges = "gti;q=0.2, gfx, kzj";
251
String tags = "de-DE, gti, he, nyc, mwj, vaj, ktr, dtp";
252
253
List<LanguageRange> priorityList = LanguageRange.parse(ranges);
254
List<String> tagList = generateLanguageTags(tags);
255
String actualTags
256
= showLanguageTags(Locale.filterTags(priorityList, tagList));
257
String expectedTags = "mwj, vaj, ktr, dtp, gti, nyc";
258
259
if (!expectedTags.equals(actualTags)) {
260
error = true;
261
showErrorMessage("filterTags()",
262
ranges, tags, expectedTags, actualTags);
263
}
264
265
if (error) {
266
err = true;
267
System.out.println(" test_filterTags() failed.");
268
} else {
269
System.out.println(" test_filterTags() passed.");
270
}
271
}
272
273
private static void test_lookup() {
274
boolean error = false;
275
276
String ranges = "en;q=0.2, yam, rmx;q=0.9";
277
String tags = "de-DE, en, kwq, lmm";
278
List<LanguageRange> priorityList = LanguageRange.parse(ranges);
279
List<Locale> localeList = generateLocales(tags);
280
String actualLocale
281
= Locale.lookup(priorityList, localeList).toLanguageTag();
282
String expectedLocale = "kwq";
283
284
if (!expectedLocale.equals(actualLocale)) {
285
error = true;
286
showErrorMessage("lookup()", ranges, tags, expectedLocale, actualLocale);
287
}
288
289
if (error) {
290
err = true;
291
System.out.println(" test_lookup() failed.");
292
} else {
293
System.out.println(" test_lookup() passed.");
294
}
295
}
296
297
private static void test_lookupTag() {
298
boolean error = false;
299
300
String ranges = "en, tsf;q=0.2";
301
String tags = "es, ja-JP, taj";
302
List<LanguageRange> priorityList = LanguageRange.parse(ranges);
303
List<String> tagList = generateLanguageTags(tags);
304
String actualTag = Locale.lookupTag(priorityList, tagList);
305
String expectedTag = "taj";
306
307
if (!expectedTag.equals(actualTag)) {
308
error = true;
309
showErrorMessage("lookupTag()", ranges, tags, expectedTag, actualTag);
310
}
311
312
if (error) {
313
err = true;
314
System.out.println(" test_lookupTag() failed.");
315
} else {
316
System.out.println(" test_lookupTag() passed.");
317
}
318
}
319
320
private static List<Locale> generateLocales(String tags) {
321
if (tags == null) {
322
return null;
323
}
324
325
List<Locale> localeList = new ArrayList<>();
326
if (tags.equals("")) {
327
return localeList;
328
}
329
String[] t = tags.split(", ");
330
for (String tag : t) {
331
localeList.add(Locale.forLanguageTag(tag));
332
}
333
return localeList;
334
}
335
336
private static List<String> generateLanguageTags(String tags) {
337
List<String> tagList = new ArrayList<>();
338
String[] t = tags.split(", ");
339
for (String tag : t) {
340
tagList.add(tag);
341
}
342
return tagList;
343
}
344
345
private static String showLanguageTags(List<String> tags) {
346
StringBuilder sb = new StringBuilder();
347
348
Iterator<String> itr = tags.iterator();
349
if (itr.hasNext()) {
350
sb.append(itr.next());
351
}
352
while (itr.hasNext()) {
353
sb.append(", ");
354
sb.append(itr.next());
355
}
356
357
return sb.toString().trim();
358
}
359
360
private static String showLocales(List<Locale> locales) {
361
StringBuilder sb = new StringBuilder();
362
363
java.util.Iterator<Locale> itr = locales.iterator();
364
if (itr.hasNext()) {
365
sb.append(itr.next().toLanguageTag());
366
}
367
while (itr.hasNext()) {
368
sb.append(", ");
369
sb.append(itr.next().toLanguageTag());
370
}
371
372
return sb.toString().trim();
373
}
374
375
private static void showErrorMessage(String methodName,
376
String priorityList,
377
String tags,
378
String expectedTags,
379
String actualTags) {
380
System.err.println("\nIncorrect " + methodName + " result.");
381
System.err.println(" Priority list : " + priorityList);
382
System.err.println(" Language tags : " + tags);
383
System.err.println(" Expected value : " + expectedTags);
384
System.err.println(" Actual value : " + actualTags);
385
}
386
387
}
388
389
390