Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/sun/net/idn/TestStringPrep.java
38840 views
1
/*
2
* Copyright (c) 2005, 2006, 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
* @summary Unit test for sun.net.idn.Punycode
27
* @bug 4737170
28
* @library .
29
* @compile -XDignore.symbol.file TestStringPrep.java NFS4StringPrep.java
30
* TestData.java
31
* @run main/othervm -ea TestStringPrep
32
* @author Edward Wang
33
*/
34
/*
35
*******************************************************************************
36
* Copyright (C) 2003-2004, International Business Machines Corporation and *
37
* others. All Rights Reserved. *
38
*******************************************************************************
39
*/
40
41
import java.text.ParseException;
42
import java.io.InputStream;
43
44
import sun.net.idn.StringPrep;
45
import sun.text.normalizer.UCharacterIterator;
46
47
public class TestStringPrep {
48
public static void main(String[] args) throws Exception {
49
TestNFS4MixedPrep();
50
TestCISPrep();
51
TestCSPrep();
52
TestNamePrepConformance();
53
}
54
/*
55
There are several special identifiers ("who") which need to be
56
understood universally, rather than in the context of a particular
57
DNS domain. Some of these identifiers cannot be understood when an
58
NFS client accesses the server, but have meaning when a local process
59
accesses the file. The ability to display and modify these
60
permissions is permitted over NFS, even if none of the access methods
61
on the server understands the identifiers.
62
63
Who Description
64
_______________________________________________________________
65
66
"OWNER" The owner of the file.
67
"GROUP" The group associated with the file.
68
"EVERYONE" The world.
69
"INTERACTIVE" Accessed from an interactive terminal.
70
"NETWORK" Accessed via the network.
71
"DIALUP" Accessed as a dialup user to the server.
72
"BATCH" Accessed from a batch job.
73
"ANONYMOUS" Accessed without any authentication.
74
"AUTHENTICATED" Any authenticated user (opposite of
75
ANONYMOUS)
76
"SERVICE" Access from a system service.
77
78
To avoid conflict, these special identifiers are distinguish by an
79
appended "@" and should appear in the form "xxxx@" (note: no domain
80
name after the "@"). For example: ANONYMOUS@.
81
*/
82
private static String[] mixed_prep_data ={
83
"OWNER@",
84
"GROUP@",
85
"EVERYONE@",
86
"INTERACTIVE@",
87
"NETWORK@",
88
"DIALUP@",
89
"BATCH@",
90
"ANONYMOUS@",
91
"AUTHENTICATED@",
92
"\u0930\u094D\u092E\u094D\u0915\u094D\u0937\u0947\u0924\[email protected]",
93
"\u0936\u094d\u0930\u0940\u092e\u0926\[email protected]",
94
"\u092d\u0917\u0935\u0926\u094d\u0917\u0940\u0924\[email protected]",
95
"\u0905\u0927\u094d\u092f\u093e\[email protected]",
96
"\u0905\u0930\u094d\u091c\u0941\[email protected]",
97
"\u0935\u093f\u0937\u093e\[email protected]",
98
"\u092f\u094b\[email protected]",
99
"\u0927\u0943\u0924\u0930\u093e\u0937\u094d\u091f\u094d\[email protected]",
100
"\u0909\u0935\u093E\u091A\[email protected]",
101
"\u0927\u0930\u094d\u092e\u0915\u094d\u0937\u0947\u0924\u094d\u0930\[email protected]",
102
"\u0915\u0941\u0930\u0941\u0915\u094d\u0937\u0947\u0924\u094d\u0930\[email protected]",
103
"\u0938\u092e\u0935\u0947\u0924\[email protected]",
104
"\u092f\u0941\u092f\u0941\u0924\u094d\u0938\u0935\[email protected]",
105
"\u092e\u093e\u092e\u0915\u093e\[email protected]",
106
"\u092a\u093e\u0923\u094d\u0921\u0935\u093e\u0936\u094d\u091a\u0948\[email protected]",
107
"\u0915\u093f\u092e\u0915\u0941\u0930\u094d\u0935\[email protected]",
108
"\u0938\u0902\u091c\[email protected]",
109
"\u0c30\u0c18\u0c41\u0c30\u0c3e\u0c2e\[email protected]",
110
"\u0c35\u0c3f\u0c36\u0c4d\u0c35\u0c28\u0c3e\[email protected]",
111
"\u0c06\u0c28\u0c02\u0c26\[email protected]",
112
"\u0C35\u0C26\u0C4D\u0C26\u0C3F\u0C30\u0C3E\u0C1C\[email protected]",
113
"\u0c30\u0c3e\u0c1c\u0c40\u0c35\[email protected]",
114
"\u0c15\u0c36\u0c30\u0c2c\u0c3e\[email protected]",
115
"\u0c38\u0c02\u0c1c\u0c40\u0c35\[email protected]",
116
"\u0c15\u0c36\u0c30\u0c2c\u0c3e\[email protected]",
117
"\u0c38\u0c02\u0c1c\u0c40\u0c2c\[email protected]",
118
"\u0c38\u0c46\u0c28\u0c4d\u0c17\u0c41\u0c2a\u0c4d\[email protected]",
119
"\u0c05\u0c2e\u0c30\u0c47\u0c02\u0c26\u0c4d\[email protected]",
120
"\u0c39\u0c28\u0c41\u0c2e\u0c3e\u0c28\u0c41\[email protected]",
121
"\u0c30\u0c35\[email protected]",
122
"\u0c15\u0c41\u0c2e\u0c3e\u0c30\[email protected]",
123
"\u0c35\u0c3f\u0c36\u0c4d\u0c35\u0c28\u0c3e\u0c27@\u0917\u0928\u0947\u0936.sanjose.ibm.com",
124
"\u0c06\u0c26\u0c3f\u0c24\u0c4d\u0c2f@www.\u00E0\u00B3\u00AF.com",
125
"\u0C15\u0C02\u0C26\u0C4D\u0C30\u0C47\u0C17\u0C41\u0c32@www.\u00C2\u00A4.com",
126
"\u0c36\u0c4d\u0c30\u0c40\u0C27\u0C30\u0C4D@www.\u00C2\u00A3.com",
127
"\u0c15\u0c02\u0c1f\u0c2e\u0c36\u0c46\u0c1f\u0c4d\u0c1f\u0c3f@\u0025",
128
"\u0c2e\u0c3e\u0c27\u0c35\u0c4d@\u005C\u005C",
129
"\u0c26\u0c46\u0c36\u0c46\u0c1f\u0c4d\u0c1f\u0c3f@www.\u0021.com",
130
"test@www.\u0024.com",
131
"help@\u00C3\u00BC.com",
132
};
133
public static void TestNFS4MixedPrep(){
134
for(int i=0; i< mixed_prep_data.length; i++){
135
try{
136
String src = mixed_prep_data[i];
137
byte[] dest = NFS4StringPrep.mixed_prepare(src.getBytes("UTF-8"));
138
String destString = new String(dest, "UTF-8");
139
int destIndex = destString.indexOf('@');
140
if(destIndex < 0){
141
fail("Delimiter @ disappeared from the output!");
142
}
143
}catch(Exception e){
144
fail("mixed_prepare for string: " + mixed_prep_data[i] +" failed with " + e.toString());
145
}
146
}
147
/* test the error condition */
148
{
149
String src = "[email protected]";
150
try{
151
byte[] dest = NFS4StringPrep.mixed_prepare(src.getBytes("UTF-8"));
152
if(dest!=null){
153
fail("Did not get the expected exception");
154
}
155
}catch(Exception e){
156
System.out.println("mixed_prepare for string: " + src +" passed with " + e.toString());
157
}
158
159
}
160
}
161
public static void TestCISPrep(){
162
163
for(int i=0;i< (TestData.conformanceTestCases.length);i++){
164
TestData.ConformanceTestCase testCase = TestData.conformanceTestCases[i];
165
String src = testCase.input;
166
Exception expected = testCase.expected;
167
String expectedDest = testCase.output;
168
try{
169
byte[] dest =NFS4StringPrep.cis_prepare(src.getBytes("UTF-8"));
170
String destString = new String(dest, "UTF-8");
171
if(!expectedDest.equalsIgnoreCase(destString)){
172
fail("Did not get the expected output for nfs4_cis_prep at index " + i);
173
}
174
}catch(Exception e){
175
if(!((expected instanceof ParseException) && (e instanceof ParseException))) {
176
fail("Did not get the expected exception");
177
}
178
}
179
180
}
181
}
182
183
public static void TestCSPrep(){
184
185
// Checking for bidi is turned off
186
String src = "\uC138\uACC4\uC758\uBAA8\uB4E0\uC0AC\uB78C\uB4E4\uC774\u0644\u064A\u0647\uD55C\uAD6D\uC5B4\uB97C\uC774\uD574\uD55C\uB2E4\uBA74";
187
try{
188
NFS4StringPrep.cs_prepare(src.getBytes("UTF-8"), false);
189
}catch(Exception e){
190
fail("Got unexpected exception: " + e.toString());
191
}
192
193
// normalization is turned off
194
try{
195
src = "www.\u00E0\u00B3\u00AF.com";
196
byte[] dest = NFS4StringPrep.cs_prepare(src.getBytes("UTF-8"), false);
197
String destStr = new String(dest, "UTF-8");
198
if(!src.equals(destStr)){
199
fail("Did not get expected output. Expected: "+ prettify(src)+
200
" Got: " + prettify(destStr));
201
}
202
}catch(Exception e){
203
fail("Got unexpected exception: " + e.toString());
204
}
205
206
// test case insensitive string
207
try{
208
src = "THISISATEST";
209
byte[] dest = NFS4StringPrep.cs_prepare(src.getBytes("UTF-8"), false);
210
String destStr = new String(dest, "UTF-8");
211
if(!src.toLowerCase().equals(destStr)){
212
fail("Did not get expected output. Expected: "+ prettify(src)+
213
" Got: " + prettify(destStr));
214
}
215
}catch(Exception e){
216
fail("Got unexpected exception: " + e.toString());
217
}
218
// test case sensitive string
219
try{
220
src = "THISISATEST";
221
byte[] dest = NFS4StringPrep.cs_prepare(src.getBytes("UTF-8"), true);
222
String destStr = new String(dest, "UTF-8");
223
if(!src.equals(destStr)){
224
fail("Did not get expected output. Expected: "+ prettify(src)+
225
" Got: " + prettify(destStr));
226
}
227
}catch(Exception e){
228
fail("Got unexpected exception: " + e.toString());
229
}
230
}
231
232
public static void TestNamePrepConformance() throws Exception {
233
InputStream stream = StringPrep.class.getResourceAsStream("uidna.spp");
234
StringPrep namePrep = new StringPrep(stream);
235
stream.close();
236
int i;
237
for(i=0; i<TestData.conformanceTestCases.length;i++){
238
TestData.ConformanceTestCase testCase = TestData.conformanceTestCases[i];
239
try{
240
UCharacterIterator iter = UCharacterIterator.getInstance(testCase.input);
241
StringBuffer output = namePrep.prepare(iter, testCase.flags);
242
if(testCase.output !=null && output!=null && !testCase.output.equals(output.toString())){
243
fail("Did not get the expected output. Expected: " + prettify(testCase.output)+
244
" Got: "+ prettify(output.toString()) );
245
}
246
} catch(ParseException ex) {
247
if (testCase.expected == null) {
248
fail("get the unexpected exception for source: " +testCase.input +" Got: "+ ex.toString());
249
}
250
}
251
}
252
System.out.println("Nameprep test count: " + i);
253
}
254
255
private static void fail(String msg) {
256
throw new RuntimeException(msg);
257
}
258
259
private static String prettify(String s) {
260
StringBuffer result = new StringBuffer();
261
for (int i = 0; i < s.length(); ++i) {
262
char ch =s.charAt(i);
263
if(ch > 0x7f){
264
result.append("\\u");
265
result.append(hex(ch));
266
}else{
267
result.append(ch);
268
}
269
270
}
271
return result.toString();
272
}
273
274
private static String hex(char ch) {
275
StringBuffer result = new StringBuffer();
276
String foo = Integer.toString(ch,16).toUpperCase();
277
for (int i = foo.length(); i < 4; ++i) {
278
result.append('0');
279
}
280
return result + foo;
281
}
282
}
283
284