/* ******************************************************************************* * Copyright (C) 2003-2011, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* */ package com.ibm.icu.dev.test.stringprep; import java.util.Random; import com.ibm.icu.dev.test.TestFmwk; import com.ibm.icu.impl.Utility; import com.ibm.icu.text.IDNA; import com.ibm.icu.text.StringPrep; import com.ibm.icu.text.StringPrepParseException; import com.ibm.icu.text.UCharacterIterator; import com.ibm.icu.text.UTF16; /** * @author ram */ public class TestIDNA extends TestFmwk { public static void main(String[] args) throws Exception { new TestIDNA().run(args); } private StringPrepParseException unassignedException = new StringPrepParseException("",StringPrepParseException.UNASSIGNED_ERROR); public void TestToUnicode() throws Exception{ for(int i=0; i= 0x30000){ retVal+=0xB0000; } return retVal; } private int randi(int n){ return (random.nextInt(0x7fff) % (n+1)); } private StringBuffer getTestSource(StringBuffer fillIn) { // use uniform seed value from the framework if(random==null){ random = createRandom(); } int i = 0; int charCount = (randi(maxCharCount) + 1); while (i 0x0FFF) { return; } if (i == 0x30000) { // jump to E0000, no characters assigned in plain 3 to plain 13 as of Unicode 6.0 i = 0xE0000; } UTF16.append(src, i); doTestCompareReferenceImpl(src); } } public void TestJB4490(){ String[] in = new String[]{ "\u00F5\u00dE\u00dF\u00dD", "\uFB00\uFB01" }; for ( int i=0; i< in.length; i++){ try{ String ascii = IDNA.convertToASCII(in[i],IDNA.DEFAULT).toString(); try{ String unicode = IDNA.convertToUnicode(ascii,IDNA.DEFAULT).toString(); logln("result " + unicode); }catch(StringPrepParseException ex){ errln("Unexpected exception for convertToUnicode: " + ex.getMessage()); } }catch(StringPrepParseException ex){ errln("Unexpected exception for convertToASCII: " + ex.getMessage()); } } } public void TestJB4475(){ String[] in = new String[]{ "TEST", "test" }; for ( int i=0; i< in.length; i++){ try{ String ascii = IDNA.convertToASCII(in[i],IDNA.DEFAULT).toString(); if(!ascii.equals(in[i])){ errln("Did not get the expected string for convertToASCII. Expected: "+ in[i] +" Got: " + ascii); } }catch(StringPrepParseException ex){ errln("Unexpected exception: " + ex.getMessage()); } } } public void TestDebug(){ try{ String src = "\u00ED4dn"; String uni = IDNA.convertToUnicode(src,IDNA.DEFAULT).toString(); if(!uni.equals(src)){ errln("Did not get the expected result. Expected: "+ prettify(src) +" Got: " +uni); } }catch(StringPrepParseException ex){ logln("Unexpected exception: " + ex.getMessage()); } try{ String ascii = IDNA.convertToASCII("\u00AD",IDNA.DEFAULT).toString(); if(ascii!=null){ errln("Did not get the expected exception"); } }catch(StringPrepParseException ex){ logln("Got the expected exception: " + ex.getMessage()); } } public void TestJB5273(){ String INVALID_DOMAIN_NAME = "xn--m\u00FCller.de"; try { IDNA.convertIDNToUnicode(INVALID_DOMAIN_NAME, IDNA.DEFAULT); IDNA.convertIDNToUnicode(INVALID_DOMAIN_NAME, IDNA.USE_STD3_RULES); } catch (StringPrepParseException ex) { errln("Unexpected exception: " + ex.getMessage()); } catch (ArrayIndexOutOfBoundsException ex) { errln("Got an ArrayIndexOutOfBoundsException calling convertIDNToUnicode(\"" + INVALID_DOMAIN_NAME + "\")"); } String domain = "xn--m\u00FCller.de"; try{ IDNA.convertIDNToUnicode(domain, IDNA.DEFAULT); }catch(StringPrepParseException ex){ logln("Got the expected exception. "+ex.getMessage()); }catch (Exception ex){ errln("Unexpected exception: " + ex.getMessage()); } try{ IDNA.convertIDNToUnicode(domain, IDNA.USE_STD3_RULES); }catch(StringPrepParseException ex){ logln("Got the expected exception. "+ex.getMessage()); }catch (Exception ex){ errln("Unexpected exception: " + ex.getMessage()); } try{ IDNA.convertToUnicode("xn--m\u00FCller", IDNA.DEFAULT); }catch(Exception ex){ errln("ToUnicode operation failed! "+ex.getMessage()); } try{ IDNA.convertToUnicode("xn--m\u00FCller", IDNA.USE_STD3_RULES); }catch(Exception ex){ errln("ToUnicode operation failed! "+ex.getMessage()); } try{ IDNA.convertIDNToUnicode("xn--m\u1234ller", IDNA.USE_STD3_RULES); }catch(StringPrepParseException ex){ errln("ToUnicode operation failed! "+ex.getMessage()); } } public void TestLength(){ String ul = "my_very_very_very_very_very_very_very_very_very_very_very_very_very_long_and_incredibly_uncreative_domain_label"; /* this unicode string is longer than MAX_LABEL_BUFFER_SIZE and produces an IDNA prepared string (including xn--)that is exactly 63 bytes long */ String ul1 ="\uC138\uACC4\uC758\uBAA8\uB4E0\uC0AC\uB78C\uB4E4\uC774"+ "\uD55C\uAD6D\uC5B4\uB97C\uC774\u00AD\u034F\u1806\u180B"+ "\u180C\u180D\u200B\u200C\u200D\u2060\uFE00\uFE01\uFE02"+ "\uFE03\uFE04\uFE05\uFE06\uFE07\uFE08\uFE09\uFE0A\uFE0B"+ "\uFE0C\uFE0D\uFE0E\uFE0F\uFEFF\uD574\uD55C\uB2E4\uBA74"+ "\uC138\u0041\u00AD\u034F\u1806\u180B\u180C\u180D\u200B"+ "\u200C\u200D\u2060\uFE00\uFE01\uFE02\uFE03\uFE04\uFE05"+ "\uFE06\uFE07\uFE08\uFE09\uFE0A\uFE0B\uFE0C\uFE0D\uFE0E"+ "\uFE0F\uFEFF\u00AD\u034F\u1806\u180B\u180C\u180D\u200B"+ "\u200C\u200D\u2060\uFE00\uFE01\uFE02\uFE03\uFE04\uFE05"+ "\uFE06\uFE07\uFE08\uFE09\uFE0A\uFE0B\uFE0C\uFE0D\uFE0E"+ "\uFE0F\uFEFF\u00AD\u034F\u1806\u180B\u180C\u180D\u200B"+ "\u200C\u200D\u2060\uFE00\uFE01\uFE02\uFE03\uFE04\uFE05"+ "\uFE06\uFE07\uFE08\uFE09\uFE0A\uFE0B\uFE0C\uFE0D\uFE0E"+ "\uFE0F\uFEFF"; try{ IDNA.convertToASCII(ul, IDNA.DEFAULT); errln("IDNA.convertToUnicode did not fail!"); }catch (StringPrepParseException ex){ if(ex.getError()!= StringPrepParseException.LABEL_TOO_LONG_ERROR){ errln("IDNA.convertToASCII failed with error: "+ex.toString()); }else{ logln("IDNA.convertToASCII(ul, IDNA.DEFAULT) Succeeded"); } } try{ IDNA.convertToASCII(ul1, IDNA.DEFAULT); }catch (StringPrepParseException ex){ errln("IDNA.convertToASCII failed with error: "+ex.toString()); } try{ IDNA.convertToUnicode(ul1, IDNA.DEFAULT); }catch (StringPrepParseException ex){ errln("IDNA.convertToASCII failed with error: "+ex.toString()); } try{ IDNA.convertToUnicode(ul, IDNA.DEFAULT); }catch (StringPrepParseException ex){ errln("IDNA.convertToASCII failed with error: "+ex.toString()); } String idn = "my_very_very_long_and_incredibly_uncreative_domain_label.my_very_very_long_and_incredibly_uncreative_domain_label.my_very_very_long_and_incredibly_uncreative_domain_label.my_very_very_long_and_incredibly_uncreative_domain_label.my_very_very_long_and_incredibly_uncreative_domain_label.my_very_very_long_and_incredibly_uncreative_domain_label.ibm.com"; try{ IDNA.convertIDNToASCII(idn, IDNA.DEFAULT); errln("IDNA.convertToUnicode did not fail!"); }catch (StringPrepParseException ex){ if(ex.getError()!= StringPrepParseException.DOMAIN_NAME_TOO_LONG_ERROR){ errln("IDNA.convertToASCII failed with error: "+ex.toString()); }else{ logln("IDNA.convertToASCII(idn, IDNA.DEFAULT) Succeeded"); } } try{ IDNA.convertIDNToUnicode(idn, IDNA.DEFAULT); errln("IDNA.convertToUnicode did not fail!"); }catch (StringPrepParseException ex){ if(ex.getError()!= StringPrepParseException.DOMAIN_NAME_TOO_LONG_ERROR){ errln("IDNA.convertToUnicode failed with error: "+ex.toString()); }else{ logln("IDNA.convertToUnicode(idn, IDNA.DEFAULT) Succeeded"); } } } /* Tests the method public static StringBuffer convertToASCII(String src, int options) */ public void TestConvertToASCII() { try { if (!IDNA.convertToASCII("dummy", 0).toString().equals("dummy")) { errln("IDNA.convertToASCII(String,int) was suppose to return the same string passed."); } } catch (Exception e) { errln("IDNA.convertToASCII(String,int) was not suppose to return an exception."); } } /* * Tests the method public static StringBuffer convertIDNToASCII(UCharacterIterator src, int options), method public * static StringBuffer public static StringBuffer convertIDNToASCII(StringBuffer src, int options), public static * StringBuffer convertIDNToASCII(UCharacterIterator src, int options) */ public void TestConvertIDNToASCII() { try { UCharacterIterator uci = UCharacterIterator.getInstance("dummy"); if (!IDNA.convertIDNToASCII(uci, 0).toString().equals("dummy")) { errln("IDNA.convertIDNToASCII(UCharacterIterator, int) was suppose to " + "return the same string passed."); } if (!IDNA.convertIDNToASCII(new StringBuffer("dummy"), 0).toString().equals("dummy")) { errln("IDNA.convertIDNToASCII(StringBuffer, int) was suppose to " + "return the same string passed."); } } catch (Exception e) { errln("IDNA.convertIDNToASCII was not suppose to return an exception."); } } /* * Tests the method public static StringBuffer convertToUnicode(String src, int options), public static StringBuffer * convertToUnicode(StringBuffer src, int options) */ public void TestConvertToUnicode() { try { if (!IDNA.convertToUnicode("dummy", 0).toString().equals("dummy")) { errln("IDNA.convertToUnicode(String, int) was suppose to " + "return the same string passed."); } if (!IDNA.convertToUnicode(new StringBuffer("dummy"), 0).toString().equals("dummy")) { errln("IDNA.convertToUnicode(StringBuffer, int) was suppose to " + "return the same string passed."); } } catch (Exception e) { errln("IDNA.convertToUnicode was not suppose to return an exception."); } } /* Tests the method public static StringBuffer convertIDNToUnicode(UCharacterIterator src, int options) */ public void TestConvertIDNToUnicode() { try { UCharacterIterator uci = UCharacterIterator.getInstance("dummy"); if (!IDNA.convertIDNToUnicode(uci, 0).toString().equals("dummy")) { errln("IDNA.convertIDNToUnicode(UCharacterIterator, int) was suppose to " + "return the same string passed."); } if (!IDNA.convertIDNToUnicode(new StringBuffer("dummy"), 0).toString().equals("dummy")) { errln("IDNA.convertIDNToUnicode(StringBuffer, int) was suppose to " + "return the same string passed."); } } catch (Exception e) { errln("IDNA.convertIDNToUnicode was not suppose to return an exception."); } } /* Tests the method public static int compare */ public void TestIDNACompare() { // Testing the method public static int compare(String s1, String s2, int options) try { IDNA.compare((String) null, (String) null, 0); errln("IDNA.compare((String)null,(String)null) was suppose to return an exception."); } catch (Exception e) { } try { IDNA.compare((String) null, "dummy", 0); errln("IDNA.compare((String)null,'dummy') was suppose to return an exception."); } catch (Exception e) { } try { IDNA.compare("dummy", (String) null, 0); errln("IDNA.compare('dummy',(String)null) was suppose to return an exception."); } catch (Exception e) { } try { if (IDNA.compare("dummy", "dummy", 0) != 0) { errln("IDNA.compare('dummy','dummy') was suppose to return a 0."); } } catch (Exception e) { errln("IDNA.compare('dummy','dummy') was not suppose to return an exception."); } // Testing the method public static int compare(StringBuffer s1, StringBuffer s2, int options) try { IDNA.compare((StringBuffer) null, (StringBuffer) null, 0); errln("IDNA.compare((StringBuffer)null,(StringBuffer)null) was suppose to return an exception."); } catch (Exception e) { } try { IDNA.compare((StringBuffer) null, new StringBuffer("dummy"), 0); errln("IDNA.compare((StringBuffer)null,'dummy') was suppose to return an exception."); } catch (Exception e) { } try { IDNA.compare(new StringBuffer("dummy"), (StringBuffer) null, 0); errln("IDNA.compare('dummy',(StringBuffer)null) was suppose to return an exception."); } catch (Exception e) { } try { if (IDNA.compare(new StringBuffer("dummy"), new StringBuffer("dummy"), 0) != 0) { errln("IDNA.compare(new StringBuffer('dummy'),new StringBuffer('dummy')) was suppose to return a 0."); } } catch (Exception e) { errln("IDNA.compare(new StringBuffer('dummy'),new StringBuffer('dummy')) was not suppose to return an exception."); } // Testing the method public static int compare(UCharacterIterator s1, UCharacterIterator s2, int options) UCharacterIterator uci = UCharacterIterator.getInstance("dummy"); try { IDNA.compare((UCharacterIterator) null, (UCharacterIterator) null, 0); errln("IDNA.compare((UCharacterIterator)null,(UCharacterIterator)null) was suppose to return an exception."); } catch (Exception e) { } try { IDNA.compare((UCharacterIterator) null, uci, 0); errln("IDNA.compare((UCharacterIterator)null,UCharacterIterator) was suppose to return an exception."); } catch (Exception e) { } try { IDNA.compare(uci, (UCharacterIterator) null, 0); errln("IDNA.compare(UCharacterIterator,(UCharacterIterator)null) was suppose to return an exception."); } catch (Exception e) { } try { if (IDNA.compare(uci, uci, 0) != 0) { errln("IDNA.compare(UCharacterIterator('dummy'),UCharacterIterator('dummy')) was suppose to return a 0."); } } catch (Exception e) { errln("IDNA.compare(UCharacterIterator('dummy'),UCharacterIterator('dummy')) was not suppose to return an exception."); } } }