2 *******************************************************************************
3 * Copyright (C) 2003-2009, International Business Machines Corporation and *
4 * others. All Rights Reserved. *
5 *******************************************************************************
7 package com.ibm.icu.dev.test.stringprep;
9 import java.util.Locale;
11 import com.ibm.icu.dev.test.TestFmwk;
12 import com.ibm.icu.text.StringPrep;
13 import com.ibm.icu.text.StringPrepParseException;
19 public class TestStringPrep extends TestFmwk {
20 public static void main(String[] args) throws Exception {
21 new TestStringPrep().run(args);
24 There are several special identifiers ("who") which need to be
25 understood universally, rather than in the context of a particular
26 DNS domain. Some of these identifiers cannot be understood when an
27 NFS client accesses the server, but have meaning when a local process
28 accesses the file. The ability to display and modify these
29 permissions is permitted over NFS, even if none of the access methods
30 on the server understands the identifiers.
33 _______________________________________________________________
35 "OWNER" The owner of the file.
36 "GROUP" The group associated with the file.
38 "INTERACTIVE" Accessed from an interactive terminal.
39 "NETWORK" Accessed via the network.
40 "DIALUP" Accessed as a dialup user to the server.
41 "BATCH" Accessed from a batch job.
42 "ANONYMOUS" Accessed without any authentication.
43 "AUTHENTICATED" Any authenticated user (opposite of
45 "SERVICE" Access from a system service.
47 To avoid conflict, these special identifiers are distinguish by an
48 appended "@" and should appear in the form "xxxx@" (note: no domain
49 name after the "@"). For example: ANONYMOUS@.
51 private String[] mixed_prep_data ={
61 "\u0930\u094D\u092E\u094D\u0915\u094D\u0937\u0947\u0924\u094D@slip129-37-118-146.nc.us.ibm.net",
62 "\u0936\u094d\u0930\u0940\u092e\u0926\u094d@saratoga.pe.utexas.edu",
63 "\u092d\u0917\u0935\u0926\u094d\u0917\u0940\u0924\u093e@dial-120-45.ots.utexas.edu",
64 "\u0905\u0927\u094d\u092f\u093e\u092f@woo-085.dorms.waller.net",
65 "\u0905\u0930\u094d\u091c\u0941\u0928@hd30-049.hil.compuserve.com",
66 "\u0935\u093f\u0937\u093e\u0926@pem203-31.pe.ttu.edu",
67 "\u092f\u094b\u0917@56K-227.MaxTNT3.pdq.net",
68 "\u0927\u0943\u0924\u0930\u093e\u0937\u094d\u091f\u094d\u0930@dial-36-2.ots.utexas.edu",
69 "\u0909\u0935\u093E\u091A\u0943@slip129-37-23-152.ga.us.ibm.net",
70 "\u0927\u0930\u094d\u092e\u0915\u094d\u0937\u0947\u0924\u094d\u0930\u0947@ts45ip119.cadvision.com",
71 "\u0915\u0941\u0930\u0941\u0915\u094d\u0937\u0947\u0924\u094d\u0930\u0947@sdn-ts-004txaustP05.dialsprint.net",
72 "\u0938\u092e\u0935\u0947\u0924\u093e@bar-tnt1s66.erols.com",
73 "\u092f\u0941\u092f\u0941\u0924\u094d\u0938\u0935\u0903@101.st-louis-15.mo.dial-access.att.net",
74 "\u092e\u093e\u092e\u0915\u093e\u0903@h92-245.Arco.COM",
75 "\u092a\u093e\u0923\u094d\u0921\u0935\u093e\u0936\u094d\u091a\u0948\u0935@dial-13-2.ots.utexas.edu",
76 "\u0915\u093f\u092e\u0915\u0941\u0930\u094d\u0935\u0924@net-redynet29.datamarkets.com.ar",
77 "\u0938\u0902\u091c\u0935@ccs-shiva28.reacciun.net.ve",
78 "\u0c30\u0c18\u0c41\u0c30\u0c3e\u0c2e\u0c4d@7.houston-11.tx.dial-access.att.net",
79 "\u0c35\u0c3f\u0c36\u0c4d\u0c35\u0c28\u0c3e\u0c27@ingw129-37-120-26.mo.us.ibm.net",
80 "\u0c06\u0c28\u0c02\u0c26\u0c4d@dialup6.austintx.com",
81 "\u0C35\u0C26\u0C4D\u0C26\u0C3F\u0C30\u0C3E\u0C1C\u0C41@dns2.tpao.gov.tr",
82 "\u0c30\u0c3e\u0c1c\u0c40\u0c35\u0c4d@slip129-37-119-194.nc.us.ibm.net",
83 "\u0c15\u0c36\u0c30\u0c2c\u0c3e\u0c26@cs7.dillons.co.uk.203.119.193.in-addr.arpa",
84 "\u0c38\u0c02\u0c1c\u0c40\u0c35\u0c4d@swprd1.innovplace.saskatoon.sk.ca",
85 "\u0c15\u0c36\u0c30\u0c2c\u0c3e\u0c26@bikini.bologna.maraut.it",
86 "\u0c38\u0c02\u0c1c\u0c40\u0c2c\u0c4d@node91.subnet159-198-79.baxter.com",
87 "\u0c38\u0c46\u0c28\u0c4d\u0c17\u0c41\u0c2a\u0c4d\u0c24@cust19.max5.new-york.ny.ms.uu.net",
88 "\u0c05\u0c2e\u0c30\u0c47\u0c02\u0c26\u0c4d\u0c30@balexander.slip.andrew.cmu.edu",
89 "\u0c39\u0c28\u0c41\u0c2e\u0c3e\u0c28\u0c41\u0c32@pool029.max2.denver.co.dynip.alter.net",
90 "\u0c30\u0c35\u0c3f@cust49.max9.new-york.ny.ms.uu.net",
91 "\u0c15\u0c41\u0c2e\u0c3e\u0c30\u0c4d@s61.abq-dialin2.hollyberry.com",
92 "\u0c35\u0c3f\u0c36\u0c4d\u0c35\u0c28\u0c3e\u0c27@\u0917\u0928\u0947\u0936.sanjose.ibm.com",
93 "\u0c06\u0c26\u0c3f\u0c24\u0c4d\u0c2f@www.\u00E0\u00B3\u00AF.com",
94 "\u0C15\u0C02\u0C26\u0C4D\u0C30\u0C47\u0C17\u0C41\u0c32@www.\u00C2\u00A4.com",
95 "\u0c36\u0c4d\u0c30\u0c40\u0C27\u0C30\u0C4D@www.\u00C2\u00A3.com",
96 "\u0c15\u0c02\u0c1f\u0c2e\u0c36\u0c46\u0c1f\u0c4d\u0c1f\u0c3f@\u0025",
97 "\u0c2e\u0c3e\u0c27\u0c35\u0c4d@\u005C\u005C",
98 "\u0c26\u0c46\u0c36\u0c46\u0c1f\u0c4d\u0c1f\u0c3f@www.\u0021.com",
99 "test@www.\u0024.com",
100 "help@\u00C3\u00BC.com",
102 public void TestNFS4MixedPrep(){
103 for(int i=0; i< mixed_prep_data.length; i++){
105 String src = mixed_prep_data[i];
106 byte[] dest = NFS4StringPrep.mixed_prepare(src.getBytes("UTF-8"));
107 String destString = new String(dest, "UTF-8");
108 int destIndex = destString.indexOf('@');
110 errln("Delimiter @ disappeared from the output!");
113 errln("mixed_prepare for string: " + mixed_prep_data[i] +" failed with " + e.toString());
116 /* test the error condition */
118 String src = "OWNER@oss.software.ibm.com";
120 byte[] dest = NFS4StringPrep.mixed_prepare(src.getBytes("UTF-8"));
122 errln("Did not get the expected exception");
125 logln("mixed_prepare for string: " + src +" passed with " + e.toString());
130 public void TestCISPrep(){
132 for(int i=0;i< (TestData.conformanceTestCases.length);i++){
133 TestData.ConformanceTestCase testCase = TestData.conformanceTestCases[i];
134 String src = testCase.input;
135 Exception expected = testCase.expected;
136 String expectedDest = testCase.output;
138 byte[] dest =NFS4StringPrep.cis_prepare(src.getBytes("UTF-8"));
139 String destString = new String(dest, "UTF-8");
140 if(!expectedDest.equalsIgnoreCase(destString)){
141 errln("Did not get the expected output for nfs4_cis_prep at index " + i);
144 if(!expected.equals(e)){
145 errln("Did not get the expected exception");
152 public void TestCSPrep(){
154 // Checking for bidi is turned off
155 String src = "\uC138\uACC4\uC758\uBAA8\uB4E0\uC0AC\uB78C\uB4E4\uC774\u0644\u064A\u0647\uD55C\uAD6D\uC5B4\uB97C\uC774\uD574\uD55C\uB2E4\uBA74";
157 NFS4StringPrep.cs_prepare(src.getBytes("UTF-8"), false);
159 errln("Got unexpected exception: " + e.toString());
162 // normalization is turned off
164 src = "www.\u00E0\u00B3\u00AF.com";
165 byte[] dest = NFS4StringPrep.cs_prepare(src.getBytes("UTF-8"), false);
166 String destStr = new String(dest, "UTF-8");
167 if(!src.equals(destStr)){
168 errln("Did not get expected output. Expected: "+ prettify(src)+
169 " Got: " + prettify(destStr));
172 errln("Got unexpected exception: " + e.toString());
175 // test case insensitive string
178 byte[] dest = NFS4StringPrep.cs_prepare(src.getBytes("UTF-8"), false);
179 String destStr = new String(dest, "UTF-8");
180 if(!src.toLowerCase().equals(destStr)){
181 errln("Did not get expected output. Expected: "+ prettify(src)+
182 " Got: " + prettify(destStr));
185 errln("Got unexpected exception: " + e.toString());
187 // test case sensitive string
190 byte[] dest = NFS4StringPrep.cs_prepare(src.getBytes("UTF-8"), true);
191 String destStr = new String(dest, "UTF-8");
192 if(!src.equals(destStr)){
193 errln("Did not get expected output. Expected: "+ prettify(src)+
194 " Got: " + prettify(destStr));
197 errln("Got unexpected exception: " + e.toString());
201 public void TestCoverage(){
202 if (new StringPrepParseException("coverage", 0, "", 0,0) == null){
203 errln("Construct StringPrepParseException(String, int, String, int, int)");
207 /* Tests the method public static StringPrep getInstance(int profile) */
208 public void TestGetInstance(){
209 // Tests when "if (profile < 0 || profile > MAX_PROFILE)" is true
210 int[] neg_num_cases = {-100,-50,-10,-5,-2,-1};
211 for(int i=0; i<neg_num_cases.length; i++){
213 StringPrep.getInstance(neg_num_cases[i]);
214 errln("StringPrep.getInstance(int) expected an exception for " +
215 "an invalid parameter of " + neg_num_cases[i]);
216 } catch(Exception e){
220 int[] max_profile_cases = {StringPrep.RFC4518_LDAP_CI+1, StringPrep.RFC4518_LDAP_CI+2, StringPrep.RFC4518_LDAP_CI+5, StringPrep.RFC4518_LDAP_CI+10};
221 for(int i=0; i<max_profile_cases.length; i++){
223 StringPrep.getInstance(max_profile_cases[i]);
224 errln("StringPrep.getInstance(int) expected an exception for " +
225 "an invalid parameter of " + max_profile_cases[i]);
226 } catch(Exception e){
230 // Tests when "if (instance == null)", "if (stream != null)", "if (instance != null)", and "if (ref != null)" is true
231 int[] cases = {0, 1, StringPrep.RFC4518_LDAP_CI};
232 for(int i=0; i<cases.length; i++){
234 StringPrep.getInstance(cases[i]);
235 } catch(Exception e){
236 errln("StringPrep.getInstance(int) did not expected an exception for " +
237 "an valid parameter of " + cases[i]);
242 /* Test the method public String prepare(String src, int options) */
243 public void TestPrepare() {
244 StringPrep sp = StringPrep.getInstance(0);
246 if (!(sp.prepare("dummy", 0)).equals("dummy")) {
247 errln("StringPrep.prepare(String,int) was suppose to return " + "'dummy'");
249 } catch (Exception e) {
250 errln("StringPrep.prepare(String,int) was not suppose to return " + "an exception.");
255 * Tests the constructor public StringPrepParseException(String message, int error, String rules, int pos, int
258 public void TestStringPrepParseException() {
259 Locale locales[] = {Locale.US, Locale.FRENCH, Locale.SIMPLIFIED_CHINESE};
260 String rules = "This is a very odd little set of rules, just for testing, you know...";
261 StringPrepParseException exceptions[] = new StringPrepParseException[locales.length];
263 for (int i = 0; i < locales.length; i += 1) {
264 exceptions[i] = new StringPrepParseException(locales[i].toString(), i, rules, i, i);
268 /* Tests the method public boolean equals(Object other) for StringPrepParseException */
269 public void TestStringPrepParseExceptionEquals(){
270 StringPrepParseException sppe = new StringPrepParseException("dummy",0,"dummy",0,0);
271 StringPrepParseException sppe_clone = new StringPrepParseException("dummy",0,"dummy",0,0);
272 StringPrepParseException sppe1 = new StringPrepParseException("dummy1",1,"dummy1",0,0);
274 // Tests when "if(!(other instanceof StringPrepParseException))" is true
276 errln("StringPrepParseException.equals(Object) is suppose to return false when " +
277 "passing integer '0'");
279 if(sppe.equals(0.0)){
280 errln("StringPrepParseException.equals(Object) is suppose to return false when " +
281 "passing float/double '0.0'");
283 if(sppe.equals("0")){
284 errln("StringPrepParseException.equals(Object) is suppose to return false when " +
285 "passing string '0'");
288 // Tests when "if(!(other instanceof StringPrepParseException))" is true
289 if(!sppe.equals(sppe)){
290 errln("StringPrepParseException.equals(Object) is suppose to return true when " +
291 "comparing to the same object");
293 if(!sppe.equals(sppe_clone)){
294 errln("StringPrepParseException.equals(Object) is suppose to return true when " +
295 "comparing to the same initiated object");
297 if(sppe.equals(sppe1)){
298 errln("StringPrepParseException.equals(Object) is suppose to return false when " +
299 "comparing to another object that isn't the same");
303 /* Tests the method public int getError() */
304 public void TestGetError(){
305 for(int i=0; i < 5; i++){
306 StringPrepParseException sppe = new StringPrepParseException("dummy",i,"dummy",0,0);
307 if(sppe.getError() != i){
308 errln("StringPrepParseExcpetion.getError() was suppose to return " + i + " but got " + sppe.getError());
313 /* Tests the private void setPreContext(char[] str, int pos) */
314 public void TestSetPreContext(){
315 String WordAtLeast16Characters = "abcdefghijklmnopqrstuvwxyz";
316 for(int i=0; i < 5; i++){
318 @SuppressWarnings("unused")
319 StringPrepParseException sppe = new StringPrepParseException("dummy",i,WordAtLeast16Characters,0,0);
320 sppe = new StringPrepParseException(WordAtLeast16Characters,i,"dummy",0,0);
321 } catch(Exception e){
322 errln("StringPrepParseException.setPreContext was not suppose to return an exception");