]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-52_1/main/tests/core/src/com/ibm/icu/dev/test/stringprep/TestStringPrep.java
Added flags.
[Dictionary.git] / jars / icu4j-52_1 / main / tests / core / src / com / ibm / icu / dev / test / stringprep / TestStringPrep.java
1 /*
2  *******************************************************************************
3  * Copyright (C) 2003-2009, International Business Machines Corporation and    *
4  * others. All Rights Reserved.                                                *
5  *******************************************************************************
6 */
7 package com.ibm.icu.dev.test.stringprep;
8
9 import java.util.Locale;
10
11 import com.ibm.icu.dev.test.TestFmwk;
12 import com.ibm.icu.text.StringPrep;
13 import com.ibm.icu.text.StringPrepParseException;
14
15 /**
16  * @author ram
17  *
18  */
19 public class TestStringPrep extends TestFmwk {
20     public static void main(String[] args) throws Exception {
21         new TestStringPrep().run(args);
22     }
23     /*
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.
31
32         Who                    Description
33        _______________________________________________________________
34
35        "OWNER"                The owner of the file.
36        "GROUP"                The group associated with the file.
37        "EVERYONE"             The world.
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
44                               ANONYMOUS)
45        "SERVICE"              Access from a system service.
46
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@.
50     */
51     private String[] mixed_prep_data ={
52         "OWNER@",
53         "GROUP@",        
54         "EVERYONE@",     
55         "INTERACTIVE@",  
56         "NETWORK@",      
57         "DIALUP@",       
58         "BATCH@",        
59         "ANONYMOUS@",    
60         "AUTHENTICATED@",
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",
101     };
102     public void TestNFS4MixedPrep(){
103         for(int i=0; i< mixed_prep_data.length; i++){
104             try{
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('@');
109                 if(destIndex < 0){
110                     errln("Delimiter @ disappeared from the output!");
111                 }
112             }catch(Exception e){
113                 errln("mixed_prepare for string: " + mixed_prep_data[i] +" failed with " + e.toString());
114             }
115         } 
116         /* test the error condition */
117         {
118             String src = "OWNER@oss.software.ibm.com";
119             try{
120                 byte[] dest = NFS4StringPrep.mixed_prepare(src.getBytes("UTF-8"));
121                 if(dest!=null){
122                     errln("Did not get the expected exception");
123                 }
124             }catch(Exception e){
125                 logln("mixed_prepare for string: " + src +" passed with " + e.toString());
126             }
127
128          }
129     }
130     public void TestCISPrep(){
131
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;
137             try{
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);
142                 }
143             }catch(Exception e){
144                 if(!expected.equals(e)){
145                     errln("Did not get the expected exception");
146                 }
147             } 
148
149         }
150     }
151
152     public void TestCSPrep(){
153         
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";
156         try{
157             NFS4StringPrep.cs_prepare(src.getBytes("UTF-8"), false);
158         }catch(Exception e){
159             errln("Got unexpected exception: " + e.toString());
160         }
161         
162         // normalization is turned off
163         try{
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));
170             }
171         }catch(Exception e){
172             errln("Got unexpected exception: " + e.toString());
173         }
174         
175         // test case insensitive string
176         try{
177             src = "THISISATEST";
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));
183             }
184         }catch(Exception e){
185             errln("Got unexpected exception: " + e.toString());
186         }
187         // test case sensitive string
188         try{
189             src = "THISISATEST";
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));
195             }
196         }catch(Exception e){
197             errln("Got unexpected exception: " + e.toString());
198         }
199     }
200     
201     public void TestCoverage(){
202         if (new StringPrepParseException("coverage", 0, "", 0,0) == null){
203             errln("Construct StringPrepParseException(String, int, String, int, int)");
204         }
205     }
206     
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++){
212             try{
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){
217             }
218         }
219         
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++){
222             try{
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){
227             }
228         }
229         
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++){
233             try{
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]);
238             }
239         }
240     }
241     
242     /* Test the method public String prepare(String src, int options) */
243     public void TestPrepare() {
244         StringPrep sp = StringPrep.getInstance(0);
245         try {
246             if (!(sp.prepare("dummy", 0)).equals("dummy")) {
247                 errln("StringPrep.prepare(String,int) was suppose to return " + "'dummy'");
248             }
249         } catch (Exception e) {
250             errln("StringPrep.prepare(String,int) was not suppose to return " + "an exception.");
251         }
252     }
253     
254     /*
255      * Tests the constructor public StringPrepParseException(String message, int error, String rules, int pos, int
256      * lineNumber)
257      */
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];
262
263         for (int i = 0; i < locales.length; i += 1) {
264             exceptions[i] = new StringPrepParseException(locales[i].toString(), i, rules, i, i);
265         }
266     }
267     
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);
273         
274         // Tests when "if(!(other instanceof StringPrepParseException))" is true
275         if(sppe.equals(0)){
276             errln("StringPrepParseException.equals(Object) is suppose to return false when " +
277                     "passing integer '0'");
278         }
279         if(sppe.equals(0.0)){
280             errln("StringPrepParseException.equals(Object) is suppose to return false when " +
281                     "passing float/double '0.0'");
282         }
283         if(sppe.equals("0")){
284             errln("StringPrepParseException.equals(Object) is suppose to return false when " +
285                     "passing string '0'");
286         }
287         
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");
292         }
293         if(!sppe.equals(sppe_clone)){
294             errln("StringPrepParseException.equals(Object) is suppose to return true when " +
295             "comparing to the same initiated object");
296         }
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");
300         }
301     }
302     
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());
309             }
310         }
311     }
312     
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++){
317             try{
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");
323             }
324         }
325     }
326 }