1
1
/*
2
- * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
2
+ * Copyright (c) 2020, 2025, 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
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
* @test
25
- * @bug 8253321
26
- * @summary test LanguageRange class
27
- * @run testng LanguageRangeTest
26
+ * @bug 8026766 8253321 8349883
27
+ * @summary LanguageRange tests: toString(), hashCode()/equals(), checking
28
+ * for IAE on ill-formed ranges
29
+ * @run junit LanguageRangeTest
28
30
*/
29
31
30
32
import static java .util .Locale .LanguageRange ;
31
33
32
- import org .testng .annotations .Test ;
33
- import static org .testng .Assert .assertEquals ;
34
+ import org .junit .jupiter .api .Test ;
35
+ import org .junit .jupiter .params .ParameterizedTest ;
36
+ import org .junit .jupiter .params .provider .Arguments ;
37
+ import org .junit .jupiter .params .provider .MethodSource ;
38
+
39
+ import java .util .HashMap ;
40
+ import java .util .Locale ;
41
+ import java .util .stream .Stream ;
42
+
43
+ import static org .junit .jupiter .api .Assertions .assertEquals ;
44
+ import static org .junit .jupiter .api .Assertions .assertThrows ;
34
45
35
- @ Test
36
46
public class LanguageRangeTest {
37
47
48
+ // 8349883: Test endpoints w/ ill-formed language range fail with IAE
49
+ @ ParameterizedTest
50
+ @ MethodSource ("illegalRanges" )
51
+ public void illformedRangeTest (String range ) {
52
+ // static parses
53
+ assertThrows (IllegalArgumentException .class ,
54
+ () -> Locale .LanguageRange .parse (range ));
55
+ assertThrows (IllegalArgumentException .class ,
56
+ () -> Locale .LanguageRange .parse (range , new HashMap <>()));
57
+ // ctors
58
+ assertThrows (IllegalArgumentException .class ,
59
+ () -> new Locale .LanguageRange (range ));
60
+ assertThrows (IllegalArgumentException .class ,
61
+ () -> new Locale .LanguageRange (range , Locale .LanguageRange .MIN_WEIGHT ));
62
+ }
63
+
64
+ private static Stream <String > illegalRanges () {
65
+ return Stream .of (
66
+ // 8349883 offending range
67
+ "-" ,
68
+ // Other general ill-formed test cases
69
+ "-foo" ,
70
+ "foo-" ,
71
+ "foo1" ,
72
+ "foo-123456789" ,
73
+ "*-*-" ,
74
+ ""
75
+ );
76
+ }
77
+
78
+ // 8253321: Ensure invoking hashCode does not affect equals result
38
79
@ Test
39
80
public void hashCodeTest () {
40
81
var range1 = new LanguageRange ("en-GB" , 0 );
@@ -45,4 +86,23 @@ public void hashCodeTest() {
45
86
range2 .hashCode ();
46
87
assertEquals (range1 , range2 );
47
88
}
89
+
90
+ // 8026766: toString() should hide weight if equal to MAX_WEIGHT (1.0)
91
+ @ ParameterizedTest
92
+ @ MethodSource ("ranges" )
93
+ public void toStringTest (String range , double weight ) {
94
+ LanguageRange lr = new LanguageRange (range , weight );
95
+ String expected = weight == 1.0
96
+ ? range
97
+ : range +";q=" +weight ;
98
+ assertEquals (lr .toString (), expected );
99
+ }
100
+
101
+ private static Stream <Arguments > ranges () {
102
+ return Stream .of (
103
+ Arguments .of ("ja" , 1.0 ),
104
+ Arguments .of ("de" , 0.5 ),
105
+ Arguments .of ("fr" , 0.0 )
106
+ );
107
+ }
48
108
}
0 commit comments