17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2003-2009, International Business Machines Corporation and * 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved. * 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert*/ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.stringprep; 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Locale; 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk; 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.StringPrep; 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.StringPrepParseException; 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/** 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @author ram 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class TestStringPrep extends TestFmwk { 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void main(String[] args) throws Exception { 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new TestStringPrep().run(args); 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert There are several special identifiers ("who") which need to be 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert understood universally, rather than in the context of a particular 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DNS domain. Some of these identifiers cannot be understood when an 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert NFS client accesses the server, but have meaning when a local process 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert accesses the file. The ability to display and modify these 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert permissions is permitted over NFS, even if none of the access methods 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert on the server understands the identifiers. 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Who Description 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert _______________________________________________________________ 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "OWNER" The owner of the file. 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "GROUP" The group associated with the file. 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "EVERYONE" The world. 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "INTERACTIVE" Accessed from an interactive terminal. 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "NETWORK" Accessed via the network. 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "DIALUP" Accessed as a dialup user to the server. 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "BATCH" Accessed from a batch job. 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "ANONYMOUS" Accessed without any authentication. 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "AUTHENTICATED" Any authenticated user (opposite of 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ANONYMOUS) 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "SERVICE" Access from a system service. 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert To avoid conflict, these special identifiers are distinguish by an 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert appended "@" and should appear in the form "xxxx@" (note: no domain 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert name after the "@"). For example: ANONYMOUS@. 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private String[] mixed_prep_data ={ 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "OWNER@", 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "GROUP@", 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "EVERYONE@", 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "INTERACTIVE@", 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "NETWORK@", 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "DIALUP@", 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "BATCH@", 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "ANONYMOUS@", 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "AUTHENTICATED@", 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0930\u094D\u092E\u094D\u0915\u094D\u0937\u0947\u0924\u094D@slip129-37-118-146.nc.us.ibm.net", 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0936\u094d\u0930\u0940\u092e\u0926\u094d@saratoga.pe.utexas.edu", 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u092d\u0917\u0935\u0926\u094d\u0917\u0940\u0924\u093e@dial-120-45.ots.utexas.edu", 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0905\u0927\u094d\u092f\u093e\u092f@woo-085.dorms.waller.net", 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0905\u0930\u094d\u091c\u0941\u0928@hd30-049.hil.compuserve.com", 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0935\u093f\u0937\u093e\u0926@pem203-31.pe.ttu.edu", 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u092f\u094b\u0917@56K-227.MaxTNT3.pdq.net", 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0927\u0943\u0924\u0930\u093e\u0937\u094d\u091f\u094d\u0930@dial-36-2.ots.utexas.edu", 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0909\u0935\u093E\u091A\u0943@slip129-37-23-152.ga.us.ibm.net", 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0927\u0930\u094d\u092e\u0915\u094d\u0937\u0947\u0924\u094d\u0930\u0947@ts45ip119.cadvision.com", 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0915\u0941\u0930\u0941\u0915\u094d\u0937\u0947\u0924\u094d\u0930\u0947@sdn-ts-004txaustP05.dialsprint.net", 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0938\u092e\u0935\u0947\u0924\u093e@bar-tnt1s66.erols.com", 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u092f\u0941\u092f\u0941\u0924\u094d\u0938\u0935\u0903@101.st-louis-15.mo.dial-access.att.net", 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u092e\u093e\u092e\u0915\u093e\u0903@h92-245.Arco.COM", 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u092a\u093e\u0923\u094d\u0921\u0935\u093e\u0936\u094d\u091a\u0948\u0935@dial-13-2.ots.utexas.edu", 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0915\u093f\u092e\u0915\u0941\u0930\u094d\u0935\u0924@net-redynet29.datamarkets.com.ar", 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0938\u0902\u091c\u0935@ccs-shiva28.reacciun.net.ve", 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c30\u0c18\u0c41\u0c30\u0c3e\u0c2e\u0c4d@7.houston-11.tx.dial-access.att.net", 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c35\u0c3f\u0c36\u0c4d\u0c35\u0c28\u0c3e\u0c27@ingw129-37-120-26.mo.us.ibm.net", 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c06\u0c28\u0c02\u0c26\u0c4d@dialup6.austintx.com", 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0C35\u0C26\u0C4D\u0C26\u0C3F\u0C30\u0C3E\u0C1C\u0C41@dns2.tpao.gov.tr", 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c30\u0c3e\u0c1c\u0c40\u0c35\u0c4d@slip129-37-119-194.nc.us.ibm.net", 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c15\u0c36\u0c30\u0c2c\u0c3e\u0c26@cs7.dillons.co.uk.203.119.193.in-addr.arpa", 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c38\u0c02\u0c1c\u0c40\u0c35\u0c4d@swprd1.innovplace.saskatoon.sk.ca", 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c15\u0c36\u0c30\u0c2c\u0c3e\u0c26@bikini.bologna.maraut.it", 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c38\u0c02\u0c1c\u0c40\u0c2c\u0c4d@node91.subnet159-198-79.baxter.com", 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c38\u0c46\u0c28\u0c4d\u0c17\u0c41\u0c2a\u0c4d\u0c24@cust19.max5.new-york.ny.ms.uu.net", 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c05\u0c2e\u0c30\u0c47\u0c02\u0c26\u0c4d\u0c30@balexander.slip.andrew.cmu.edu", 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c39\u0c28\u0c41\u0c2e\u0c3e\u0c28\u0c41\u0c32@pool029.max2.denver.co.dynip.alter.net", 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c30\u0c35\u0c3f@cust49.max9.new-york.ny.ms.uu.net", 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c15\u0c41\u0c2e\u0c3e\u0c30\u0c4d@s61.abq-dialin2.hollyberry.com", 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c35\u0c3f\u0c36\u0c4d\u0c35\u0c28\u0c3e\u0c27@\u0917\u0928\u0947\u0936.sanjose.ibm.com", 937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c06\u0c26\u0c3f\u0c24\u0c4d\u0c2f@www.\u00E0\u00B3\u00AF.com", 947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0C15\u0C02\u0C26\u0C4D\u0C30\u0C47\u0C17\u0C41\u0c32@www.\u00C2\u00A4.com", 957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c36\u0c4d\u0c30\u0c40\u0C27\u0C30\u0C4D@www.\u00C2\u00A3.com", 967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c15\u0c02\u0c1f\u0c2e\u0c36\u0c46\u0c1f\u0c4d\u0c1f\u0c3f@\u0025", 977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c2e\u0c3e\u0c27\u0c35\u0c4d@\u005C\u005C", 987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0c26\u0c46\u0c36\u0c46\u0c1f\u0c4d\u0c1f\u0c3f@www.\u0021.com", 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "test@www.\u0024.com", 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "help@\u00C3\u00BC.com", 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestNFS4MixedPrep(){ 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i< mixed_prep_data.length; i++){ 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String src = mixed_prep_data[i]; 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert byte[] dest = NFS4StringPrep.mixed_prepare(src.getBytes("UTF-8")); 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String destString = new String(dest, "UTF-8"); 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int destIndex = destString.indexOf('@'); 1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(destIndex < 0){ 1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Delimiter @ disappeared from the output!"); 1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }catch(Exception e){ 1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("mixed_prepare for string: " + mixed_prep_data[i] +" failed with " + e.toString()); 1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* test the error condition */ 1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String src = "OWNER@oss.software.ibm.com"; 1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert byte[] dest = NFS4StringPrep.mixed_prepare(src.getBytes("UTF-8")); 1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(dest!=null){ 1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Did not get the expected exception"); 1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }catch(Exception e){ 1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("mixed_prepare for string: " + src +" passed with " + e.toString()); 1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCISPrep(){ 1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0;i< (TestData.conformanceTestCases.length);i++){ 1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.ConformanceTestCase testCase = TestData.conformanceTestCases[i]; 1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String src = testCase.input; 1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Exception expected = testCase.expected; 1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String expectedDest = testCase.output; 1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert byte[] dest =NFS4StringPrep.cis_prepare(src.getBytes("UTF-8")); 1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String destString = new String(dest, "UTF-8"); 1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(!expectedDest.equalsIgnoreCase(destString)){ 1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Did not get the expected output for nfs4_cis_prep at index " + i); 1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }catch(Exception e){ 1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(!expected.equals(e)){ 1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Did not get the expected exception"); 1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCSPrep(){ 1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Checking for bidi is turned off 1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String src = "\uC138\uACC4\uC758\uBAA8\uB4E0\uC0AC\uB78C\uB4E4\uC774\u0644\u064A\u0647\uD55C\uAD6D\uC5B4\uB97C\uC774\uD574\uD55C\uB2E4\uBA74"; 1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert NFS4StringPrep.cs_prepare(src.getBytes("UTF-8"), false); 1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }catch(Exception e){ 1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Got unexpected exception: " + e.toString()); 1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // normalization is turned off 1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert src = "www.\u00E0\u00B3\u00AF.com"; 1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert byte[] dest = NFS4StringPrep.cs_prepare(src.getBytes("UTF-8"), false); 1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String destStr = new String(dest, "UTF-8"); 1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(!src.equals(destStr)){ 1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Did not get expected output. Expected: "+ prettify(src)+ 1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " Got: " + prettify(destStr)); 1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }catch(Exception e){ 1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Got unexpected exception: " + e.toString()); 1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // test case insensitive string 1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert src = "THISISATEST"; 1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert byte[] dest = NFS4StringPrep.cs_prepare(src.getBytes("UTF-8"), false); 1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String destStr = new String(dest, "UTF-8"); 1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(!src.toLowerCase().equals(destStr)){ 1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Did not get expected output. Expected: "+ prettify(src)+ 1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " Got: " + prettify(destStr)); 1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }catch(Exception e){ 1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Got unexpected exception: " + e.toString()); 1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // test case sensitive string 1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert src = "THISISATEST"; 1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert byte[] dest = NFS4StringPrep.cs_prepare(src.getBytes("UTF-8"), true); 1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String destStr = new String(dest, "UTF-8"); 1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(!src.equals(destStr)){ 1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Did not get expected output. Expected: "+ prettify(src)+ 1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " Got: " + prettify(destStr)); 1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }catch(Exception e){ 1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Got unexpected exception: " + e.toString()); 1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCoverage(){ 2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (new StringPrepParseException("coverage", 0, "", 0,0) == null){ 2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Construct StringPrepParseException(String, int, String, int, int)"); 2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Tests the method public static StringPrep getInstance(int profile) */ 2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetInstance(){ 2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Tests when "if (profile < 0 || profile > MAX_PROFILE)" is true 2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] neg_num_cases = {-100,-50,-10,-5,-2,-1}; 2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i<neg_num_cases.length; i++){ 2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringPrep.getInstance(neg_num_cases[i]); 2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("StringPrep.getInstance(int) expected an exception for " + 2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "an invalid parameter of " + neg_num_cases[i]); 2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] max_profile_cases = {StringPrep.RFC4518_LDAP_CI+1, StringPrep.RFC4518_LDAP_CI+2, StringPrep.RFC4518_LDAP_CI+5, StringPrep.RFC4518_LDAP_CI+10}; 2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i<max_profile_cases.length; i++){ 2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringPrep.getInstance(max_profile_cases[i]); 2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("StringPrep.getInstance(int) expected an exception for " + 2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "an invalid parameter of " + max_profile_cases[i]); 2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Tests when "if (instance == null)", "if (stream != null)", "if (instance != null)", and "if (ref != null)" is true 2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] cases = {0, 1, StringPrep.RFC4518_LDAP_CI}; 2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i<cases.length; i++){ 2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringPrep.getInstance(cases[i]); 2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("StringPrep.getInstance(int) did not expected an exception for " + 2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "an valid parameter of " + cases[i]); 2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Test the method public String prepare(String src, int options) */ 2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestPrepare() { 2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringPrep sp = StringPrep.getInstance(0); 2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!(sp.prepare("dummy", 0)).equals("dummy")) { 2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("StringPrep.prepare(String,int) was suppose to return " + "'dummy'"); 2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("StringPrep.prepare(String,int) was not suppose to return " + "an exception."); 2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests the constructor public StringPrepParseException(String message, int error, String rules, int pos, int 2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * lineNumber) 2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestStringPrepParseException() { 2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale locales[] = {Locale.US, Locale.FRENCH, Locale.SIMPLIFIED_CHINESE}; 2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String rules = "This is a very odd little set of rules, just for testing, you know..."; 2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringPrepParseException exceptions[] = new StringPrepParseException[locales.length]; 2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < locales.length; i += 1) { 2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert exceptions[i] = new StringPrepParseException(locales[i].toString(), i, rules, i, i); 2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Tests the method public boolean equals(Object other) for StringPrepParseException */ 2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestStringPrepParseExceptionEquals(){ 2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringPrepParseException sppe = new StringPrepParseException("dummy",0,"dummy",0,0); 2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringPrepParseException sppe_clone = new StringPrepParseException("dummy",0,"dummy",0,0); 2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringPrepParseException sppe1 = new StringPrepParseException("dummy1",1,"dummy1",0,0); 2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Tests when "if(!(other instanceof StringPrepParseException))" is true 2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(sppe.equals(0)){ 2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("StringPrepParseException.equals(Object) is suppose to return false when " + 2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "passing integer '0'"); 2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(sppe.equals(0.0)){ 2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("StringPrepParseException.equals(Object) is suppose to return false when " + 2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "passing float/double '0.0'"); 2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(sppe.equals("0")){ 2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("StringPrepParseException.equals(Object) is suppose to return false when " + 2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "passing string '0'"); 2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Tests when "if(!(other instanceof StringPrepParseException))" is true 2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(!sppe.equals(sppe)){ 2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("StringPrepParseException.equals(Object) is suppose to return true when " + 2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "comparing to the same object"); 2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(!sppe.equals(sppe_clone)){ 2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("StringPrepParseException.equals(Object) is suppose to return true when " + 2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "comparing to the same initiated object"); 2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(sppe.equals(sppe1)){ 2987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("StringPrepParseException.equals(Object) is suppose to return false when " + 2997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "comparing to another object that isn't the same"); 3007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Tests the method public int getError() */ 3047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetError(){ 3057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i < 5; i++){ 3067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringPrepParseException sppe = new StringPrepParseException("dummy",i,"dummy",0,0); 3077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(sppe.getError() != i){ 3087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("StringPrepParseExcpetion.getError() was suppose to return " + i + " but got " + sppe.getError()); 3097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Tests the private void setPreContext(char[] str, int pos) */ 3147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestSetPreContext(){ 3157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String WordAtLeast16Characters = "abcdefghijklmnopqrstuvwxyz"; 3167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i < 5; i++){ 3177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 3187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert @SuppressWarnings("unused") 3197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringPrepParseException sppe = new StringPrepParseException("dummy",i,WordAtLeast16Characters,0,0); 3207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert sppe = new StringPrepParseException(WordAtLeast16Characters,i,"dummy",0,0); 3217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 3227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("StringPrepParseException.setPreContext was not suppose to return an exception"); 3237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 327