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/Bug7069824.java
38813 views
1
/*
2
* Copyright (c) 2014, 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 7069824 8042360
27
* @summary Verify implementation for Locale matching.
28
* @run main Bug7069824
29
*/
30
31
import java.util.*;
32
import java.util.Locale.*;
33
import static java.util.Locale.FilteringMode.*;
34
import static java.util.Locale.LanguageRange.*;
35
36
public class Bug7069824 {
37
38
static boolean err = false;
39
40
public static void main(String[] args) {
41
testLanguageRange();
42
testLocale();
43
44
if (err) {
45
throw new RuntimeException("Failed.");
46
}
47
}
48
49
private static void testLanguageRange() {
50
System.out.println("Test LanguageRange class...");
51
testConstants();
52
testConstructors();
53
testMethods();
54
}
55
56
private static void testLocale() {
57
System.out.println("Test Locale class...");
58
test_filter();
59
test_filterTags();
60
test_lookup();
61
test_lookupTag();
62
}
63
64
private static void testConstants() {
65
boolean error = false;
66
67
if (MIN_WEIGHT != 0.0) {
68
error = true;
69
System.err.println(" MIN_WEIGHT should be 0.0 but got "
70
+ MIN_WEIGHT);
71
}
72
73
if (MAX_WEIGHT != 1.0) {
74
error = true;
75
System.err.println(" MAX_WEIGHT should be 1.0 but got "
76
+ MAX_WEIGHT);
77
}
78
79
if (error) {
80
err = true;
81
System.err.println(" testConstants() failed.");
82
} else {
83
System.out.println(" testConstants() passed.");
84
}
85
}
86
87
private static void testConstructors() {
88
boolean error = false;
89
90
LanguageRange lr;
91
String range;
92
double weight;
93
94
// Testcase for 8042360
95
range = "en-Latn-1234567890";
96
try {
97
lr = new LanguageRange(range);
98
error = true;
99
System.err.println(" IAE should be thrown for LanguageRange("
100
+ range + ").");
101
}
102
catch (IllegalArgumentException ex) {
103
}
104
105
range = null;
106
try {
107
lr = new LanguageRange(range);
108
error = true;
109
System.err.println(" NPE should be thrown for LanguageRange("
110
+ range + ").");
111
}
112
catch (NullPointerException ex) {
113
}
114
115
range = null;
116
weight = 0.8;
117
try {
118
lr = new LanguageRange(range, weight);
119
error = true;
120
System.err.println(" NPE should be thrown for LanguageRange("
121
+ range + ", " + weight + ").");
122
}
123
catch (NullPointerException ex) {
124
}
125
126
range = "elvish";
127
try {
128
lr = new LanguageRange(range);
129
}
130
catch (Exception ex) {
131
error = true;
132
System.err.println(" " + ex
133
+ " should not be thrown for LanguageRange(" + range + ").");
134
}
135
136
range = "de-DE";
137
try {
138
lr = new LanguageRange(range);
139
}
140
catch (Exception ex) {
141
error = true;
142
System.err.println(" " + ex
143
+ " should not be thrown for LanguageRange(" + range + ").");
144
}
145
146
range = "ar";
147
weight = 0.8;
148
try {
149
lr = new LanguageRange(range, weight);
150
}
151
catch (Exception ex) {
152
error = true;
153
System.err.println(" " + ex
154
+ " should not be thrown for LanguageRange(" + range + ", "
155
+ weight + ").");
156
}
157
158
range = "ja";
159
weight = -0.8;
160
try {
161
lr = new LanguageRange(range, weight);
162
error = true;
163
System.err.println(" IAE should be thrown for LanguageRange("
164
+ range + ", " + weight + ").");
165
}
166
catch (IllegalArgumentException ex) {
167
}
168
169
range = "Elvish";
170
weight = 3.0;
171
try {
172
lr = new LanguageRange(range, weight);
173
error = true;
174
System.err.println(" IAE should be thrown for LanguageRange("
175
+ range + ", " + weight + ").");
176
}
177
catch (IllegalArgumentException ex) {
178
}
179
180
String[] illformedRanges = {"-ja", "ja--JP", "en-US-", "a4r", "ar*",
181
"ar-*EG", "", "abcdefghijklmn", "ja-J=", "ja-opqrstuvwxyz"};
182
for (String r : illformedRanges) {
183
try {
184
lr = new LanguageRange(r);
185
error = true;
186
System.err.println(" IAE should be thrown for LanguageRange("
187
+ r + ").");
188
}
189
catch (IllegalArgumentException ex) {
190
}
191
}
192
193
194
if (error) {
195
err = true;
196
System.err.println(" testConstructors() failed.");
197
} else {
198
System.out.println(" testConstructors() passed.");
199
}
200
}
201
202
private static void testMethods() {
203
test_getRange();
204
test_getWeight();
205
test_equals();
206
test_parse();
207
test_mapEquivalents();
208
}
209
210
private static void test_getRange() {
211
boolean error = false;
212
213
String range = "ja";
214
double weight = 0.5;
215
LanguageRange lr = new LanguageRange(range, weight);
216
if (!lr.getRange().equals(range)) {
217
error = true;
218
System.err.println(" LanguageRange.getRange() returned unexpected value. Expected: "
219
+ range + ", got: " + lr.getRange());
220
}
221
222
range = "en-US";
223
weight = 0.5;
224
lr = new LanguageRange(range, weight);
225
if (!lr.getRange().equals(range.toLowerCase())) {
226
error = true;
227
System.err.println(" LanguageRange.getRange() returned unexpected value. Expected: "
228
+ range + ", got: " + lr.getRange());
229
}
230
231
if (error) {
232
err = true;
233
System.err.println(" test_getRange() failed.");
234
} else {
235
System.out.println(" test_getRange() passed.");
236
}
237
}
238
239
private static void test_getWeight() {
240
boolean error = false;
241
242
String range = "ja";
243
double weight = 0.5;
244
LanguageRange lr = new LanguageRange(range, weight);
245
if (lr.getWeight() != weight) {
246
error = true;
247
System.err.println(" LanguageRange.getWeight() returned unexpected value. Expected: "
248
+ weight + ", got: " + lr.getWeight());
249
}
250
251
range = "ja";
252
weight = MAX_WEIGHT; // default
253
lr = new LanguageRange(range);
254
if (!lr.getRange().equals(range) || lr.getWeight() != MAX_WEIGHT) {
255
error = true;
256
System.err.println(" LanguageRange.getWeight() returned unexpected value. Expected: "
257
+ weight + ", got: " + lr.getWeight());
258
}
259
260
if (error) {
261
err = true;
262
System.err.println(" test_getWeight() failed.");
263
} else {
264
System.out.println(" test_getWeight() passed.");
265
}
266
}
267
268
private static void test_equals() {
269
boolean error = false;
270
271
LanguageRange lr1 = new LanguageRange("ja", 1.0);
272
LanguageRange lr2 = new LanguageRange("ja");
273
LanguageRange lr3 = new LanguageRange("ja", 0.1);
274
LanguageRange lr4 = new LanguageRange("en", 1.0);
275
276
if (!lr1.equals(lr2)) {
277
error = true;
278
System.err.println(" LanguageRange(LR(ja, 1.0)).equals(LR(ja)) should return true.");
279
}
280
281
if (lr1.equals(lr3)) {
282
error = true;
283
System.err.println(" LanguageRange(LR(ja, 1.0)).equals(LR(ja, 0.1)) should return false.");
284
}
285
286
if (lr1.equals(lr4)) {
287
error = true;
288
System.err.println(" LanguageRange(LR(ja, 1.0)).equals(LR(en, 1.0)) should return false.");
289
}
290
291
if (lr1.equals(null)) {
292
error = true;
293
System.err.println(" LanguageRange(LR(ja, 1.0)).equals(null) should return false.");
294
}
295
296
if (lr1.equals("")) {
297
error = true;
298
System.err.println(" LanguageRange(LR(ja, 1.0)).equals(\"\") should return false.");
299
300
}
301
302
if (error) {
303
err = true;
304
System.err.println(" test_equals() failed.");
305
} else {
306
System.out.println(" test_equals() passed.");
307
}
308
}
309
310
private static void test_parse() {
311
boolean error = false;
312
313
List<LanguageRange> list;
314
String str = null;
315
try {
316
list = LanguageRange.parse(str);
317
error = true;
318
System.err.println(" NPE should be thrown for parse("
319
+ str + ").");
320
}
321
catch (NullPointerException ex) {
322
}
323
324
str = "";
325
try {
326
list = LanguageRange.parse("");
327
error = true;
328
System.err.println(" IAE should be thrown for parse("
329
+ str + ").");
330
}
331
catch (IllegalArgumentException ex) {
332
}
333
334
str = "ja;q=3";
335
try {
336
list = LanguageRange.parse(str);
337
error = true;
338
System.err.println("IAE should be thrown for parse("
339
+ str + ").");
340
}
341
catch (IllegalArgumentException ex) {
342
}
343
344
str = "Accept-Language: fr-FX,de-DE;q=0.5, fr-tp-x-FOO;q=0.1,"
345
+ "en-X-tp;q=0.6,en-FR;q=.7,de-de;q=0.8, iw;q=0.4, "
346
+ "he;q=0.4, de-de;q=0.5,ja, in-tpp, in-tp;q=0.2";
347
ArrayList<LanguageRange> expected = new ArrayList<>();
348
expected.add(new LanguageRange("fr-fx", 1.0));
349
expected.add(new LanguageRange("fr-fr", 1.0));
350
expected.add(new LanguageRange("ja", 1.0));
351
expected.add(new LanguageRange("in-tpp", 1.0));
352
expected.add(new LanguageRange("id-tpp", 1.0));
353
expected.add(new LanguageRange("en-fr", 0.7));
354
expected.add(new LanguageRange("en-fx", 0.7));
355
expected.add(new LanguageRange("en-x-tp", 0.6));
356
expected.add(new LanguageRange("de-de", 0.5));
357
expected.add(new LanguageRange("de-dd", 0.5));
358
expected.add(new LanguageRange("iw", 0.4));
359
expected.add(new LanguageRange("he", 0.4));
360
expected.add(new LanguageRange("in-tp", 0.2));
361
expected.add(new LanguageRange("id-tl", 0.2));
362
expected.add(new LanguageRange("id-tp", 0.2));
363
expected.add(new LanguageRange("in-tl", 0.2));
364
expected.add(new LanguageRange("fr-tp-x-foo", 0.1));
365
expected.add(new LanguageRange("fr-tl-x-foo", 0.1));
366
List<LanguageRange> got = LanguageRange.parse(str);
367
if (!areEqual(expected, got)) {
368
error = true;
369
System.err.println(" #1 parse() test failed.");
370
}
371
372
str = "Accept-Language: hak-CN;q=0.8, no-bok-NO;q=0.9, no-nyn, cmn-CN;q=0.1";
373
expected = new ArrayList<>();
374
expected.add(new LanguageRange("no-nyn", 1.0));
375
expected.add(new LanguageRange("nn", 1.0));
376
expected.add(new LanguageRange("no-bok-no", 0.9));
377
expected.add(new LanguageRange("nb-no", 0.9));
378
expected.add(new LanguageRange("hak-CN", 0.8));
379
expected.add(new LanguageRange("zh-hakka-CN", 0.8));
380
expected.add(new LanguageRange("i-hak-CN", 0.8));
381
expected.add(new LanguageRange("cmn-CN", 0.1));
382
expected.add(new LanguageRange("zh-cmn-CN", 0.1));
383
expected.add(new LanguageRange("zh-guoyu-CN", 0.1));
384
got = LanguageRange.parse(str);
385
if (!areEqual(expected, got)) {
386
error = true;
387
System.err.println(" #2 parse() test failed.");
388
}
389
390
str = "Accept-Language: rki;q=0.4, no-bok-NO;q=0.9, ccq;q=0.5";
391
expected = new ArrayList<>();
392
expected.add(new LanguageRange("no-bok-no", 0.9));
393
expected.add(new LanguageRange("nb-no", 0.9));
394
expected.add(new LanguageRange("rki", 0.4));
395
expected.add(new LanguageRange("ybd", 0.4));
396
expected.add(new LanguageRange("ccq", 0.4));
397
got = LanguageRange.parse(str);
398
if (!areEqual(expected, got)) {
399
error = true;
400
System.err.println(" #3 parse() test failed.");
401
}
402
403
if (error) {
404
err = true;
405
System.err.println(" test_parse() failed.");
406
} else {
407
System.out.println(" test_parse() passed.");
408
}
409
}
410
411
private static boolean areEqual(List<LanguageRange> expected,
412
List<LanguageRange> got) {
413
boolean error = false;
414
415
int expectedSize = expected.size();
416
int actualSize = got.size();
417
418
if (expectedSize != actualSize) {
419
error = true;
420
421
System.err.println(" Expected size=" + expectedSize);
422
for (LanguageRange lr : expected) {
423
System.err.println(" range=" + lr.getRange()
424
+ ", weight=" + lr.getWeight());
425
}
426
427
System.out.println(" Actual size=" + actualSize);
428
for (LanguageRange lr : got) {
429
System.err.println(" range=" + lr.getRange()
430
+ ", weight=" + lr.getWeight());
431
}
432
} else {
433
for (int i = 0; i < expectedSize; i++) {
434
LanguageRange lr1 = expected.get(i);
435
LanguageRange lr2 = got.get(i);
436
437
if (!lr1.getRange().equals(lr2.getRange())
438
|| lr1.getWeight() != lr2.getWeight()) {
439
error = true;
440
System.err.println(" " + i + ": Expected: range=" + lr1.getRange()
441
+ ", weight=" + lr1.getWeight());
442
System.err.println(" " + i + ": Actual: range=" + lr2.getRange()
443
+ ", weight=" + lr2.getWeight());
444
}
445
}
446
}
447
448
return !error;
449
}
450
451
private static void test_mapEquivalents() {
452
boolean error = false;
453
454
String ranges = "zh, zh-TW;q=0.8, ar;q=0.9, EN, zh-HK, ja-JP;q=0.2, es;q=0.4";
455
List<LanguageRange> priorityList = LanguageRange.parse(ranges);
456
HashMap<String, List<String>> map = null;
457
458
try {
459
List<LanguageRange> list =
460
LanguageRange.mapEquivalents(priorityList, null);
461
}
462
catch (Exception ex) {
463
error = true;
464
System.err.println(ex
465
+ " should not be thrown for mapEquivalents(priorityList, null).");
466
}
467
468
map = new HashMap<>();
469
try {
470
List<LanguageRange> list =
471
LanguageRange.mapEquivalents(priorityList, map);
472
}
473
catch (Exception ex) {
474
error = true;
475
System.err.println(ex
476
+ " should not be thrown for mapEquivalents(priorityList, empty map).");
477
}
478
479
ArrayList<String> equivalentList = new ArrayList<>();
480
equivalentList.add("ja");
481
equivalentList.add("ja-Hira");
482
map.put("ja", equivalentList);
483
try {
484
List<LanguageRange> list = LanguageRange.mapEquivalents(null, map);
485
error = true;
486
System.err.println("NPE should be thrown for mapEquivalents(null, map).");
487
}
488
catch (NullPointerException ex) {
489
}
490
491
map = new LinkedHashMap<>();
492
ArrayList<String> equivalentList1 = new ArrayList<>();
493
equivalentList1.add("ja");
494
equivalentList1.add("ja-Hira");
495
map.put("ja", equivalentList1);
496
ArrayList<String> equivalentList2 = new ArrayList<>();
497
equivalentList2.add("zh-Hans");
498
equivalentList2.add("zh-Hans-CN");
499
equivalentList2.add("zh-CN");
500
map.put("zh", equivalentList2);
501
ArrayList<String> equivalentList3 = new ArrayList<>();
502
equivalentList3.add("zh-TW");
503
equivalentList3.add("zh-Hant");
504
map.put("zh-TW", equivalentList3);
505
map.put("es", null);
506
ArrayList<String> equivalentList4 = new ArrayList<>();
507
map.put("en", equivalentList4);
508
ArrayList<String> equivalentList5 = new ArrayList<>();
509
equivalentList5.add("de");
510
map.put("zh-HK", equivalentList5);
511
512
ArrayList<LanguageRange> expected = new ArrayList<>();
513
expected.add(new LanguageRange("zh-hans", 1.0));
514
expected.add(new LanguageRange("zh-hans-cn", 1.0));
515
expected.add(new LanguageRange("zh-cn", 1.0));
516
expected.add(new LanguageRange("de", 1.0));
517
expected.add(new LanguageRange("ar", 0.9));
518
expected.add(new LanguageRange("zh-tw", 0.8));
519
expected.add(new LanguageRange("zh-hant", 0.8));
520
expected.add(new LanguageRange("ja-jp", 0.2));
521
expected.add(new LanguageRange("ja-hira-jp", 0.2));
522
List<LanguageRange> got =
523
LanguageRange.mapEquivalents(priorityList, map);
524
525
if (!areEqual(expected, got)) {
526
error = true;
527
}
528
529
if (error) {
530
err = true;
531
System.err.println(" test_mapEquivalents() failed.");
532
} else {
533
System.out.println(" test_mapEquivalents() passed.");
534
}
535
}
536
537
private static void test_filter() {
538
boolean error = false;
539
540
String ranges = "ja-JP, fr-FR";
541
String tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP";
542
FilteringMode mode = EXTENDED_FILTERING;
543
544
List<LanguageRange> priorityList = LanguageRange.parse(ranges);
545
List<Locale> tagList = generateLocales(tags);
546
String actualLocales =
547
showLocales(Locale.filter(priorityList, tagList, mode));
548
String expectedLocales = "ja-JP-hepburn, ja-Latn-JP";
549
550
if (!expectedLocales.equals(actualLocales)) {
551
error = true;
552
showErrorMessage("#1 filter(" + mode + ")",
553
ranges, tags, expectedLocales, actualLocales);
554
}
555
556
557
ranges = "ja-*-JP, fr-FR";
558
tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP";
559
mode = EXTENDED_FILTERING;
560
561
priorityList = LanguageRange.parse(ranges);
562
tagList = generateLocales(tags);
563
actualLocales = showLocales(Locale.filter(priorityList, tagList, mode));
564
expectedLocales = "ja-JP-hepburn, ja-Latn-JP";
565
566
if (!expectedLocales.equals(actualLocales)) {
567
error = true;
568
showErrorMessage("#2 filter(" + mode + ")",
569
ranges, tags, expectedLocales, actualLocales);
570
}
571
572
573
ranges = "ja-*-JP, fr-FR, de-de;q=0.2";
574
tags = "de-DE, en, ja-JP-hepburn, de-de, fr, he, ja-Latn-JP";
575
mode = AUTOSELECT_FILTERING;
576
577
priorityList = LanguageRange.parse(ranges);
578
tagList = generateLocales(tags);
579
actualLocales = showLocales(Locale.filter(priorityList, tagList, mode));
580
expectedLocales = "ja-JP-hepburn, ja-Latn-JP, de-DE";
581
582
if (!expectedLocales.equals(actualLocales)) {
583
error = true;
584
showErrorMessage("#3 filter(" + mode + ")",
585
ranges, tags,expectedLocales, actualLocales);
586
}
587
588
ranges = "ja-JP, fr-FR, de-de;q=0.2";
589
tags = "de-DE, en, ja-JP-hepburn, de-de, fr, he, ja-Latn-JP";
590
mode = AUTOSELECT_FILTERING;
591
592
priorityList = LanguageRange.parse(ranges);
593
tagList = generateLocales(tags);
594
actualLocales = showLocales(Locale.filter(priorityList, tagList, mode));
595
expectedLocales = "ja-JP-hepburn, de-DE";
596
597
if (!expectedLocales.equals(actualLocales)) {
598
error = true;
599
showErrorMessage("#4 filter(" + mode + ")",
600
ranges, tags, expectedLocales, actualLocales);
601
}
602
603
604
ranges = "en;q=0.2, ja-*-JP, fr-JP";
605
tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP";
606
mode = IGNORE_EXTENDED_RANGES;
607
608
priorityList = LanguageRange.parse(ranges);
609
tagList = generateLocales(tags);
610
actualLocales = showLocales(Locale.filter(priorityList, tagList, mode));
611
expectedLocales = "en";
612
613
if (!expectedLocales.equals(actualLocales)) {
614
error = true;
615
showErrorMessage("#5 filter(" + mode + ")",
616
ranges, tags, expectedLocales, actualLocales);
617
}
618
619
620
ranges = "en;q=0.2, ja-*-JP, fr-JP";
621
tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP";
622
mode = MAP_EXTENDED_RANGES;
623
624
priorityList = LanguageRange.parse(ranges);
625
tagList = generateLocales(tags);
626
actualLocales = showLocales(Locale.filter(priorityList, tagList, mode));
627
expectedLocales = "ja-JP-hepburn, en";
628
629
if (!expectedLocales.equals(actualLocales)) {
630
error = true;
631
showErrorMessage("#6 filter(" + mode + ")",
632
ranges, tags, expectedLocales, actualLocales);
633
}
634
635
636
ranges = "en;q=0.2, ja-JP, fr-JP";
637
tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP";
638
mode = REJECT_EXTENDED_RANGES;
639
640
priorityList = LanguageRange.parse(ranges);
641
tagList = generateLocales(tags);
642
actualLocales = showLocales(Locale.filter(priorityList, tagList, mode));
643
expectedLocales = "ja-JP-hepburn, en";
644
645
if (!expectedLocales.equals(actualLocales)) {
646
error = true;
647
showErrorMessage("#7 filter(" + mode + ")",
648
ranges, tags, expectedLocales, actualLocales);
649
}
650
651
652
ranges = "en;q=0.2, ja-*-JP, fr-JP";
653
tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP";
654
mode = REJECT_EXTENDED_RANGES;
655
656
priorityList = LanguageRange.parse(ranges);
657
tagList = generateLocales(tags);
658
try {
659
actualLocales =
660
showLocales(Locale.filter(priorityList, tagList, mode));
661
error = true;
662
System.out.println("IAE should be thrown for filter("
663
+ mode + ").");
664
}
665
catch (IllegalArgumentException ex) {
666
}
667
668
669
ranges = "en;q=0.2, ja-*-JP, fr-JP";
670
tags = null;
671
mode = REJECT_EXTENDED_RANGES;
672
673
priorityList = LanguageRange.parse(ranges);
674
tagList = generateLocales(tags);
675
try {
676
actualLocales =
677
showLocales(Locale.filter(priorityList, tagList, mode));
678
error = true;
679
System.out.println("NPE should be thrown for filter(tags=null).");
680
}
681
catch (NullPointerException ex) {
682
}
683
684
685
ranges = null;
686
tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP";
687
mode = REJECT_EXTENDED_RANGES;
688
689
try {
690
priorityList = LanguageRange.parse(ranges);
691
tagList = generateLocales(tags);
692
actualLocales =
693
showLocales(Locale.filter(priorityList, tagList, mode));
694
error = true;
695
System.out.println("NPE should be thrown for filter(ranges=null).");
696
}
697
catch (NullPointerException ex) {
698
}
699
700
701
ranges = "en;q=0.2, ja-*-JP, fr-JP";
702
tags = "";
703
mode = REJECT_EXTENDED_RANGES;
704
705
priorityList = LanguageRange.parse(ranges);
706
tagList = generateLocales(tags);
707
try {
708
actualLocales =
709
showLocales(Locale.filter(priorityList, tagList, mode));
710
}
711
catch (Exception ex) {
712
error = true;
713
System.out.println(ex
714
+ " should not be thrown for filter(" + ranges + ", \"\").");
715
}
716
717
718
if (error) {
719
err = true;
720
System.out.println(" test_filter() failed.");
721
} else {
722
System.out.println(" test_filter() passed.");
723
}
724
}
725
726
private static void test_filterTags() {
727
boolean error = false;
728
729
String ranges = "en;q=0.2, *;q=0.6, ja";
730
String tags = "de-DE, en, ja-JP-hepburn, fr-JP, he";
731
732
List<LanguageRange> priorityList = LanguageRange.parse(ranges);
733
List<String> tagList = generateLanguageTags(tags);
734
String actualTags =
735
showLanguageTags(Locale.filterTags(priorityList, tagList));
736
String expectedTags = tags;
737
738
if (!expectedTags.equals(actualTags)) {
739
error = true;
740
showErrorMessage("#1 filterTags()",
741
ranges, tags, expectedTags, actualTags);
742
}
743
744
745
ranges = "en;q=0.2, ja-JP, fr-JP";
746
tags = "de-DE, en, ja-JP-hepburn, fr, he";
747
priorityList = LanguageRange.parse(ranges);
748
tagList = generateLanguageTags(tags);
749
actualTags = showLanguageTags(Locale.filterTags(priorityList, tagList));
750
expectedTags = "ja-jp-hepburn, en";
751
752
if (!expectedTags.equals(actualTags)) {
753
error = true;
754
showErrorMessage("#2 filterTags()",
755
ranges, tags, expectedTags, actualTags);
756
}
757
758
759
ranges = "de-DE";
760
tags = "de-DE, de-de, de-Latn-DE, de-Latf-DE, de-DE-x-goethe, "
761
+ "de-Latn-DE-1996, de-Deva-DE, de, de-x-DE, de-Deva";
762
FilteringMode mode = MAP_EXTENDED_RANGES;
763
priorityList = LanguageRange.parse(ranges);
764
tagList = generateLanguageTags(tags);
765
actualTags = showLanguageTags(Locale.filterTags(priorityList, tagList, mode));
766
expectedTags = "de-de, de-de-x-goethe";
767
768
if (!expectedTags.equals(actualTags)) {
769
error = true;
770
showErrorMessage("#3 filterTags(" + mode + ")",
771
ranges, tags, expectedTags, actualTags);
772
}
773
774
775
ranges = "de-DE";
776
tags = "de-DE, de-de, de-Latn-DE, de-Latf-DE, de-DE-x-goethe, "
777
+ "de-Latn-DE-1996, de-Deva-DE, de, de-x-DE, de-Deva";
778
mode = EXTENDED_FILTERING;
779
priorityList = LanguageRange.parse(ranges);
780
tagList = generateLanguageTags(tags);
781
actualTags = showLanguageTags(Locale.filterTags(priorityList, tagList, mode));
782
expectedTags = "de-de, de-latn-de, de-latf-de, de-de-x-goethe, "
783
+ "de-latn-de-1996, de-deva-de";
784
785
if (!expectedTags.equals(actualTags)) {
786
error = true;
787
showErrorMessage("#4 filterTags(" + mode + ")",
788
ranges, tags, expectedTags, actualTags);
789
}
790
791
792
ranges = "de-*-DE";
793
tags = "de-DE, de-de, de-Latn-DE, de-Latf-DE, de-DE-x-goethe, "
794
+ "de-Latn-DE-1996, de-Deva-DE, de, de-x-DE, de-Deva";
795
mode = EXTENDED_FILTERING;
796
priorityList = LanguageRange.parse(ranges);
797
tagList = generateLanguageTags(tags);
798
actualTags = showLanguageTags(Locale.filterTags(priorityList, tagList, mode));
799
expectedTags = "de-de, de-latn-de, de-latf-de, de-de-x-goethe, "
800
+ "de-latn-de-1996, de-deva-de";
801
802
if (!expectedTags.equals(actualTags)) {
803
error = true;
804
showErrorMessage("#5 filterTags(" + mode + ")",
805
ranges, tags, expectedTags, actualTags);
806
}
807
808
if (error) {
809
err = true;
810
System.out.println(" test_filterTags() failed.");
811
} else {
812
System.out.println(" test_filterTags() passed.");
813
}
814
}
815
816
private static void test_lookup() {
817
boolean error = false;
818
819
String ranges = "en;q=0.2, *-JP;q=0.6, iw";
820
String tags = "de-DE, en, ja-JP-hepburn, fr-JP, he";
821
List<LanguageRange> priorityList = LanguageRange.parse(ranges);
822
List<Locale> localeList = generateLocales(tags);
823
String actualLocale =
824
Locale.lookup(priorityList, localeList).toLanguageTag();
825
String expectedLocale ="he";
826
827
if (!expectedLocale.equals(actualLocale)) {
828
error = true;
829
showErrorMessage("#1 lookup()", ranges, tags, expectedLocale, actualLocale);
830
}
831
832
833
ranges = "en;q=0.2, *-JP;q=0.6, iw";
834
tags = "de-DE, he-IL, en, iw";
835
priorityList = LanguageRange.parse(ranges);
836
localeList = generateLocales(tags);
837
actualLocale = Locale.lookup(priorityList, localeList).toLanguageTag();
838
expectedLocale = "he";
839
840
if (!expectedLocale.equals(actualLocale)) {
841
error = true;
842
showErrorMessage("#2 lookup()", ranges, tags, expectedLocale, actualLocale);
843
}
844
845
846
ranges = "en;q=0.2, ja-*-JP-x-foo;q=0.6, iw";
847
tags = "de-DE, fr, en, ja-Latn-JP";
848
priorityList = LanguageRange.parse(ranges);
849
localeList = generateLocales(tags);
850
actualLocale = Locale.lookup(priorityList, localeList).toLanguageTag();
851
expectedLocale = "ja-Latn-JP";
852
853
if (!expectedLocale.equals(actualLocale)) {
854
error = true;
855
showErrorMessage("#3 lookup()", ranges, tags, expectedLocale, actualLocale);
856
}
857
858
if (error) {
859
err = true;
860
System.out.println(" test_lookup() failed.");
861
} else {
862
System.out.println(" test_lookup() passed.");
863
}
864
}
865
866
private static void test_lookupTag() {
867
boolean error = false;
868
869
String ranges = "en, *";
870
String tags = "es, de, ja-JP";
871
List<LanguageRange> priorityList = LanguageRange.parse(ranges);
872
List<String> tagList = generateLanguageTags(tags);
873
String actualTag = Locale.lookupTag(priorityList, tagList);
874
String expectedTag = null;
875
876
if (actualTag != null) {
877
error = true;
878
showErrorMessage("#1 lookupTag()", ranges, tags, expectedTag, actualTag);
879
}
880
881
882
ranges= "en;q=0.2, *-JP";
883
tags = "de-DE, en, ja-JP-hepburn, fr-JP, en-JP";
884
priorityList = LanguageRange.parse(ranges);
885
tagList = generateLanguageTags(tags);
886
actualTag = Locale.lookupTag(priorityList, tagList);
887
expectedTag = "fr-jp";
888
889
if (!expectedTag.equals(actualTag)) {
890
error = true;
891
showErrorMessage("#2 lookupTag()", ranges, tags, expectedTag, actualTag);
892
}
893
894
895
ranges = "en;q=0.2, ar-MO, iw";
896
tags = "de-DE, he, fr-JP";
897
priorityList = LanguageRange.parse(ranges);
898
tagList = generateLanguageTags(tags);
899
actualTag = Locale.lookupTag(priorityList, tagList);
900
expectedTag = "he";
901
902
if (!expectedTag.equals(actualTag)) {
903
error = true;
904
showErrorMessage("#3 lookupTag()", ranges, tags, expectedTag, actualTag);
905
}
906
907
908
ranges = "en;q=0.2, ar-MO, he";
909
tags = "de-DE, iw, fr-JP";
910
priorityList = LanguageRange.parse(ranges);
911
tagList = generateLanguageTags(tags);
912
actualTag = Locale.lookupTag(priorityList, tagList);
913
expectedTag = "iw";
914
915
if (!expectedTag.equals(actualTag)) {
916
error = true;
917
showErrorMessage("#4 lookupTag()", ranges, tags, expectedTag, actualTag);
918
}
919
920
if (error) {
921
err = true;
922
System.out.println(" test_lookupTag() failed.");
923
} else {
924
System.out.println(" test_lookupTag() passed.");
925
}
926
}
927
928
private static List<Locale> generateLocales(String tags) {
929
if (tags == null) {
930
return null;
931
}
932
933
List<Locale> localeList = new ArrayList<>();
934
if (tags.equals("")) {
935
return localeList;
936
}
937
String[] t = tags.split(", ");
938
for (String tag : t) {
939
localeList.add(Locale.forLanguageTag(tag));
940
}
941
return localeList;
942
}
943
944
private static List<String> generateLanguageTags(String tags) {
945
List<String> tagList = new ArrayList<>();
946
String[] t = tags.split(", ");
947
for (String tag : t) {
948
tagList.add(tag);
949
}
950
return tagList;
951
}
952
953
private static String showPriorityList(List<LanguageRange> priorityList) {
954
StringBuilder sb = new StringBuilder();
955
956
Iterator<LanguageRange> itr = priorityList.iterator();
957
LanguageRange lr;
958
if (itr.hasNext()) {
959
lr = itr.next();
960
sb.append(lr.getRange());
961
sb.append(";q=");
962
sb.append(lr.getWeight());
963
}
964
while (itr.hasNext()) {
965
sb.append(", ");
966
lr = itr.next();
967
sb.append(lr.getRange());
968
sb.append(";q=");
969
sb.append(lr.getWeight());
970
}
971
972
return sb.toString();
973
}
974
975
private static String showLanguageTags(List<String> tags) {
976
StringBuilder sb = new StringBuilder();
977
978
Iterator<String> itr = tags.iterator();
979
if (itr.hasNext()) {
980
sb.append(itr.next());
981
}
982
while (itr.hasNext()) {
983
sb.append(", ");
984
sb.append(itr.next());
985
}
986
987
return sb.toString().trim();
988
}
989
990
private static String showLocales(List<Locale> locales) {
991
StringBuilder sb = new StringBuilder();
992
993
Iterator<Locale> itr = locales.iterator();
994
if (itr.hasNext()) {
995
sb.append(itr.next().toLanguageTag());
996
}
997
while (itr.hasNext()) {
998
sb.append(", ");
999
sb.append(itr.next().toLanguageTag());
1000
}
1001
1002
return sb.toString().trim();
1003
}
1004
1005
private static void showErrorMessage(String methodName,
1006
String priorityList,
1007
String tags,
1008
String expectedTags,
1009
String actualTags) {
1010
System.out.println("\nIncorrect " + methodName + " result.");
1011
System.out.println(" Priority list : " + priorityList);
1012
System.out.println(" Language tags : " + tags);
1013
System.out.println(" Expected value : " + expectedTags);
1014
System.out.println(" Actual value : " + actualTags);
1015
}
1016
1017
}
1018
1019