// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
 *******************************************************************************
 * Copyright (C) 2003-2011, International Business Machines Corporation and    *
 * others. All Rights Reserved.                                                *
 *******************************************************************************
*/
package com.ibm.icu.dev.test.stringprep;

import com.ibm.icu.text.IDNA;
import com.ibm.icu.text.StringPrepParseException;

/**
 * @author ram
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class TestData {
    public static final char[][] unicodeIn ={
        { 
            0x0644, 0x064A, 0x0647, 0x0645, 0x0627, 0x0628, 0x062A, 0x0643, 0x0644,
            0x0645, 0x0648, 0x0634, 0x0639, 0x0631, 0x0628, 0x064A, 0x061F
        },
        {
            0x4ED6, 0x4EEC, 0x4E3A, 0x4EC0, 0x4E48, 0x4E0D, 0x8BF4, 0x4E2D, 0x6587, 
           
        },
        {
            0x0050, 0x0072, 0x006F, 0x010D, 0x0070, 0x0072, 0x006F, 0x0073, 0x0074,
            0x011B, 0x006E, 0x0065, 0x006D, 0x006C, 0x0075, 0x0076, 0x00ED, 0x010D,
            0x0065, 0x0073, 0x006B, 0x0079,
        },
        {
            0x05DC, 0x05DE, 0x05D4, 0x05D4, 0x05DD, 0x05E4, 0x05E9, 0x05D5, 0x05D8,
            0x05DC, 0x05D0, 0x05DE, 0x05D3, 0x05D1, 0x05E8, 0x05D9, 0x05DD, 0x05E2,
            0x05D1, 0x05E8, 0x05D9, 0x05EA,
        },
        {
            0x092F, 0x0939, 0x0932, 0x094B, 0x0917, 0x0939, 0x093F, 0x0928, 0x094D,
            0x0926, 0x0940, 0x0915, 0x094D, 0x092F, 0x094B, 0x0902, 0x0928, 0x0939,
            0x0940, 0x0902, 0x092C, 0x094B, 0x0932, 0x0938, 0x0915, 0x0924, 0x0947,
            0x0939, 0x0948, 0x0902,
        },
        {
            0x306A, 0x305C, 0x307F, 0x3093, 0x306A, 0x65E5, 0x672C, 0x8A9E, 0x3092,
            0x8A71, 0x3057, 0x3066, 0x304F, 0x308C, 0x306A, 0x3044, 0x306E, 0x304B,
           
        },
    /*  
        {
            0xC138, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774,
            0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0xD574, 0xD55C, 0xB2E4, 0xBA74,
            0xC5BC, 0xB9C8, 0xB098, 0xC88B, 0xC744, 0xAE4C,
        },
    */
        {   
            0x043F, 0x043E, 0x0447, 0x0435, 0x043C, 0x0443, 0x0436, 0x0435, 0x043E,
            0x043D, 0x0438, 0x043D, 0x0435, 0x0433, 0x043E, 0x0432, 0x043E, 0x0440,
            0x044F, 0x0442, 0x043F, 0x043E, 0x0440, 0x0443, 0x0441, 0x0441, 0x043A,
            0x0438,
        },
        {
            0x0050, 0x006F, 0x0072, 0x0071, 0x0075, 0x00E9, 0x006E, 0x006F, 0x0070,
            0x0075, 0x0065, 0x0064, 0x0065, 0x006E, 0x0073, 0x0069, 0x006D, 0x0070,
            0x006C, 0x0065, 0x006D, 0x0065, 0x006E, 0x0074, 0x0065, 0x0068, 0x0061,
            0x0062, 0x006C, 0x0061, 0x0072, 0x0065, 0x006E, 0x0045, 0x0073, 0x0070,
            0x0061, 0x00F1, 0x006F, 0x006C,
        },
        {
            0x4ED6, 0x5011, 0x7232, 0x4EC0, 0x9EBD, 0x4E0D, 0x8AAA, 0x4E2D, 0x6587,
           
        },
        {
            0x0054, 0x1EA1, 0x0069, 0x0073, 0x0061, 0x006F, 0x0068, 0x1ECD, 0x006B,
            0x0068, 0x00F4, 0x006E, 0x0067, 0x0074, 0x0068, 0x1EC3, 0x0063, 0x0068,
            0x1EC9, 0x006E, 0x00F3, 0x0069, 0x0074, 0x0069, 0x1EBF, 0x006E, 0x0067,
            0x0056, 0x0069, 0x1EC7, 0x0074,
        },
        {
            0x0033, 0x5E74, 0x0042, 0x7D44, 0x91D1, 0x516B, 0x5148, 0x751F,
        },
        {
            0x5B89, 0x5BA4, 0x5948, 0x7F8E, 0x6075, 0x002D, 0x0077, 0x0069, 0x0074,
            0x0068, 0x002D, 0x0053, 0x0055, 0x0050, 0x0045, 0x0052, 0x002D, 0x004D,
            0x004F, 0x004E, 0x004B, 0x0045, 0x0059, 0x0053,
        },
        {
            0x0048, 0x0065, 0x006C, 0x006C, 0x006F, 0x002D, 0x0041, 0x006E, 0x006F,
            0x0074, 0x0068, 0x0065, 0x0072, 0x002D, 0x0057, 0x0061, 0x0079, 0x002D,
            0x305D, 0x308C, 0x305E, 0x308C, 0x306E, 0x5834, 0x6240,
        },
        {
            0x3072, 0x3068, 0x3064, 0x5C4B, 0x6839, 0x306E, 0x4E0B, 0x0032,
        },
        {
            0x004D, 0x0061, 0x006A, 0x0069, 0x3067, 0x004B, 0x006F, 0x0069, 0x3059,
            0x308B, 0x0035, 0x79D2, 0x524D,
        },
        {
            0x30D1, 0x30D5, 0x30A3, 0x30FC, 0x0064, 0x0065, 0x30EB, 0x30F3, 0x30D0,
           
        },
        {
            0x305D, 0x306E, 0x30B9, 0x30D4, 0x30FC, 0x30C9, 0x3067,
        },
        // test non-BMP code points
        {    
            0xD800, 0xDF00, 0xD800, 0xDF01, 0xD800, 0xDF02, 0xD800, 0xDF03, 0xD800, 0xDF05,
            0xD800, 0xDF06, 0xD800, 0xDF07, 0xD800, 0xDF09, 0xD800, 0xDF0A, 0xD800, 0xDF0B,
           
        },
        {
            0xD800, 0xDF0D, 0xD800, 0xDF0C, 0xD800, 0xDF1E, 0xD800, 0xDF0F, 0xD800, 0xDF16,
            0xD800, 0xDF15, 0xD800, 0xDF14, 0xD800, 0xDF12, 0xD800, 0xDF10, 0xD800, 0xDF20,
            0xD800, 0xDF21,
           
        },
        // Greek
        {
            0x03b5, 0x03bb, 0x03bb, 0x03b7, 0x03bd, 0x03b9, 0x03ba, 0x03ac
        },
        // Maltese
        {
            0x0062, 0x006f, 0x006e, 0x0121, 0x0075, 0x0073, 0x0061, 0x0127,
            0x0127, 0x0061
        },
        // Russian
        {
            0x043f, 0x043e, 0x0447, 0x0435, 0x043c, 0x0443, 0x0436, 0x0435,
            0x043e, 0x043d, 0x0438, 0x043d, 0x0435, 0x0433, 0x043e, 0x0432,
            0x043e, 0x0440, 0x044f, 0x0442, 0x043f, 0x043e, 0x0440, 0x0443,
            0x0441, 0x0441, 0x043a, 0x0438
        },
   
    };

    public static final String[] asciiIn = {
        "xn--egbpdaj6bu4bxfgehfvwxn",
        "xn--ihqwcrb4cv8a8dqg056pqjye",
        "xn--Proprostnemluvesky-uyb24dma41a",
        "xn--4dbcagdahymbxekheh6e0a7fei0b",
        "xn--i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd",
        "xn--n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa",
    /*  "xn--989aomsvi5e83db1d2a355cv1e0vak1dwrv93d5xbh15a0dt30a5jpsd879ccm6fea98c",*/
        "xn--b1abfaaepdrnnbgefbaDotcwatmq2g4l",
        "xn--PorqunopuedensimplementehablarenEspaol-fmd56a",
        "xn--ihqwctvzc91f659drss3x8bo0yb",
        "xn--TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g",
        "xn--3B-ww4c5e180e575a65lsy2b",
        "xn---with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n",
        "xn--Hello-Another-Way--fc4qua05auwb3674vfr0b",
        "xn--2-u9tlzr9756bt3uc0v",
        "xn--MajiKoi5-783gue6qz075azm5e",
        "xn--de-jg4avhby1noc0d",
        "xn--d9juau41awczczp",
        "XN--097CCDEKGHQJK",
        "XN--db8CBHEJLGH4E0AL",
        "xn--hxargifdar",                       // Greek
        "xn--bonusaa-5bb1da",                   // Maltese
        "xn--b1abfaaepdrnnbgefbadotcwatmq2g4l", // Russian (Cyrillic)
       };

    public static final String[] domainNames = {
        "slip129-37-118-146.nc.us.ibm.net",
        "saratoga.pe.utexas.edu",
        "dial-120-45.ots.utexas.edu",
        "woo-085.dorms.waller.net",
        "hd30-049.hil.compuserve.com",
        "pem203-31.pe.ttu.edu",
        "56K-227.MaxTNT3.pdq.net",
        "dial-36-2.ots.utexas.edu",
        "slip129-37-23-152.ga.us.ibm.net",
        "ts45ip119.cadvision.com",
        "sdn-ts-004txaustP05.dialsprint.net",
        "bar-tnt1s66.erols.com",
        "101.st-louis-15.mo.dial-access.att.net",
        "h92-245.Arco.COM",
        "dial-13-2.ots.utexas.edu",
        "net-redynet29.datamarkets.com.ar",
        "ccs-shiva28.reacciun.net.ve",
        "7.houston-11.tx.dial-access.att.net",
        "ingw129-37-120-26.mo.us.ibm.net",
        "dialup6.austintx.com",
        "dns2.tpao.gov.tr",
        "slip129-37-119-194.nc.us.ibm.net",
        "cs7.dillons.co.uk.203.119.193.in-addr.arpa",
        "swprd1.innovplace.saskatoon.sk.ca",
        "bikini.bologna.maraut.it",
        "node91.subnet159-198-79.baxter.com",
        "cust19.max5.new-york.ny.ms.uu.net",
        "balexander.slip.andrew.cmu.edu",
        "pool029.max2.denver.co.dynip.alter.net",
        "cust49.max9.new-york.ny.ms.uu.net",
        "s61.abq-dialin2.hollyberry.com",

    };
    
    public static final String[] domainNames1Uni = {
        "\u0917\u0928\u0947\u0936.sanjose.ibm.com",
        "www.\u0121.com",
        //"www.\u00E0\u00B3\u00AF.com",
        "www.\u00C2\u00A4.com",
        "www.\u00C2\u00A3.com",
        // "\\u0025", //'%' (0x0025) produces U_IDNA_STD3_ASCII_RULES_ERROR
        // "\\u005C\\u005C", //'\' (0x005C) produces U_IDNA_STD3_ASCII_RULES_ERROR
        //"@",
        //"\\u002F",
        //"www.\\u0021.com",
        //"www.\\u0024.com",
        //"\\u003f",
        // These yeild U_IDNA_PROHIBITED_ERROR
        //"\\u00CF\\u0082.com",
        //"\\u00CE\\u00B2\\u00C3\\u009Fss.com",
        //"\\u00E2\\u0098\\u00BA.com",
        "\u00C3\u00BC.com"
    };
    public static final String[] domainNamesToASCIIOut = {
        "xn--31b8a2bwd.sanjose.ibm.com",
        "www.xn--vea.com",
        //"www.xn--3 -iia80t.com",
        "www.xn--bba7j.com",
        "www.xn--9a9j.com",
       // "\u0025",
       // "\u005C\u005C",
       // "@",
       // "\u002F",
       // "www.\u0021.com",
       // "www.\u0024.com",
       // "\u003f",
        "xn--14-ria7423a.com"
        
    };

    public static final String[] domainNamesToUnicodeOut = {
        "\u0917\u0928\u0947\u0936.sanjose.ibm.com",
        "www.\u0121.com",
        //"www.\u00E0\u0033\u0020\u0304.com",
        "www.\u00E2\u00A4.com",
        "www.\u00E2\u00A3.com",
       // "\u0025",
       // "\u005C\u005C",
       // "@",
       // "\u002F",
       // "www.\u0021.com",
       // "www.\u0024.com",
       // "\u003f",
        "\u00E3\u0031\u2044\u0034.com"
        
    };


    public static class ErrorCase{

        public char[] unicode;
        public String ascii;
        public Exception expected;
        public boolean useSTD3ASCIIRules;
        public boolean testToUnicode;
        public boolean testLabel;
        ErrorCase(char[] uniIn, String asciiIn, Exception ex,
                   boolean std3, boolean testToUni, boolean testlabel){
            unicode = uniIn;
            ascii = asciiIn;
            expected = ex;
            useSTD3ASCIIRules = std3;
            testToUnicode = testToUni;
            testLabel = testlabel; 
            
        }
    }
    public static final ErrorCase[] errorCases = {
          
        
        new ErrorCase( new char[]{ 
            0x0077, 0x0077, 0x0077, 0x002e, /* www. */
            0xC138, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774,
            0x070F,/*prohibited*/
            0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0xD574, 0xD55C, 0xB2E4, 0xBA74,
            0x002e, 0x0063, 0x006f, 0x006d, /* com. */
           
        },
        "www.xn--8mb5595fsoa28orucya378bqre2tcwop06c5qbw82a1rffmae0361dea96b.com",
        new StringPrepParseException("",StringPrepParseException.PROHIBITED_ERROR),
        false, true, true),

        new ErrorCase( new char[]{ 
                0x0077, 0x0077, 0x0077, 0x002e, /* www. */
                0xC138, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774,
                0x0221, 0x0234/*Unassigned code points*/,
                0x002e, 0x0063, 0x006f, 0x006d, /* com. */
               
            },
            "www.xn--6la2bz548fj1gua391bf1gb1n59ab29a7ia.com",

            new StringPrepParseException("",StringPrepParseException.UNASSIGNED_ERROR),
            false, true, true
        ),
       new ErrorCase( new char[]{ 
                0x0077, 0x0077, 0x0077, 0x002e, /* www. */
                0xC138, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774,
                0x0644, 0x064A, 0x0647,/*Arabic code points. Cannot mix RTL with LTR*/
                0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0xD574, 0xD55C, 0xB2E4, 0xBA74,
                0x002e, 0x0063, 0x006f, 0x006d, /* com. */
               
            },
            "www.xn--ghBGI4851OiyA33VqrD6Az86C4qF83CtRv93D5xBk15AzfG0nAgA0578DeA71C.com",
            new StringPrepParseException("",StringPrepParseException.CHECK_BIDI_ERROR),
            false, true, true
        ),
        new ErrorCase( new char[]{ 
                0x0077, 0x0077, 0x0077, 0x002e, /* www. */
                /* labels cannot begin with an HYPHEN */
                0x002D, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774,
                0x002E, 
                0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0xD574, 0xD55C, 0xB2E4, 0xBA74,
                0x002e, 0x0063, 0x006f, 0x006d, /* com. */
               
            
            },
            "www.xn----b95Ew8SqA315Ao5FbuMlnNmhA.com",
            new StringPrepParseException("",StringPrepParseException.STD3_ASCII_RULES_ERROR),
            true, true, false
        ),
        new ErrorCase( new char[]{ 
                /* correct ACE-prefix followed by unicode */
                0x0077, 0x0077, 0x0077, 0x002e, /* www. */
                0x0078, 0x006e, 0x002d,0x002d,  /* ACE Prefix */
                0x002D, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774,
                0x002D, 
                0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0xD574, 0xD55C, 0xB2E4, 0xBA74,
                0x002e, 0x0063, 0x006f, 0x006d, /* com. */
               
            
            },
            /* wrong ACE-prefix followed by valid ACE-encoded ASCII */ 
            "www.XY-----b91I0V65S96C2A355Cw1E5yCeQr19CsnP1mFfmAE0361DeA96B.com",
            new StringPrepParseException("",StringPrepParseException.ACE_PREFIX_ERROR),
            false, false, false
        ),
        /* cannot verify U_IDNA_VERIFICATION_ERROR */

        new ErrorCase( new char[]{
            0x0077, 0x0077, 0x0077, 0x002e, /* www. */
            0xC138, 0xACC4, 0xC758, 0xBAA8, 0xB4E0, 0xC0AC, 0xB78C, 0xB4E4, 0xC774,
            0xD55C, 0xAD6D, 0xC5B4, 0xB97C, 0xC774, 0xD574, 0xD55C, 0xB2E4, 0xBA74,
            0xC5BC, 0xB9C8, 0xB098, 0xC88B, 0xC744, 0xAE4C, 
            0x002e, 0x0063, 0x006f, 0x006d, /* com. */
           
          },
          "www.xn--989AoMsVi5E83Db1D2A355Cv1E0vAk1DwRv93D5xBh15A0Dt30A5JpSD879Ccm6FeA98C.com",
          new StringPrepParseException("",StringPrepParseException.LABEL_TOO_LONG_ERROR),
          false, true, true
        ),  
        new ErrorCase( new char[]{
            0x0077, 0x0077, 0x0077, 0x002e, /* www. */
            0x0030, 0x0644, 0x064A, 0x0647, 0x0031, /* Arabic code points squashed between EN codepoints */
            0x002e, 0x0063, 0x006f, 0x006d, /* com. */
           
          },
          "www.xn--01-tvdmo.com",
          new StringPrepParseException("",StringPrepParseException.CHECK_BIDI_ERROR),
          false, true, true
        ),  
    
        new ErrorCase( new char[]{
            0x0077, 0x0077, 0x0077, 0x002e, // www. 
            0x206C, 0x0644, 0x064A, 0x0647, 0x206D, // Arabic code points squashed between BN codepoints 
            0x002e, 0x0063, 0x006f, 0x006d, // com. 
           
          },
          "www.XN--ghbgi278xia.com",
          new StringPrepParseException("",StringPrepParseException.PROHIBITED_ERROR),
          false, true, true
        ),
        new ErrorCase( new char[] {
            0x0077, 0x0077, 0x0077, 0x002e, // www. 
            0x002D, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, // HYPHEN at the start of label 
            0x002e, 0x0063, 0x006f, 0x006d, // com. 
           
          },
          "www.-abcde.com",
          new StringPrepParseException("",StringPrepParseException.STD3_ASCII_RULES_ERROR),
          true, false /* ToUnicode preserves casing for this case */, false
        ),
        new ErrorCase( new char[] {
            0x0077, 0x0077, 0x0077, 0x002e, // www. 
            0x0041, 0x0042, 0x0043, 0x0044, 0x0045,0x002D, // HYPHEN at the end of the label
            0x002e, 0x0063, 0x006f, 0x006d, // com. 
           
          },
          "www.abcde-.com",
          new StringPrepParseException("",StringPrepParseException.STD3_ASCII_RULES_ERROR),
          true, false /* ToUnicode preserves casing for this case */, false
        ),
        new ErrorCase( new char[]{
            0x0077, 0x0077, 0x0077, 0x002e, // www. 
            0x0041, 0x0042, 0x0043, 0x0044, 0x0045,0x0040, // Containing non LDH code point
            0x002e, 0x0063, 0x006f, 0x006d, // com. 
           
          },
          "www.abcde@.com",
          new StringPrepParseException("",StringPrepParseException.STD3_ASCII_RULES_ERROR),
          true, false /* ToUnicode preserves casing for this case */, false
        ),
        new ErrorCase( new char[]{
            0x0077, 0x0077, 0x0077, 0x002e, // www. 
             // zero length label
            0x002e, 0x0063, 0x006f, 0x006d, // com. 
          },
          "www..com",
          new StringPrepParseException("",StringPrepParseException.ZERO_LENGTH_LABEL),
          true, true, false
        ),
    };


     public static final class ConformanceTestCase{
         String comment;
         String input;
         String output;
         String profile;
         int flags;
         Exception expected;
         private static byte[] getBytes(String in){
             if(in==null){
                 return null;
             }
             byte[] bytes = new byte[in.length()];
             for(int i=0; i < in.length();i++){
                 bytes[i] = (byte)in.charAt(i);
             }
             return bytes;
         }
         ConformanceTestCase(String comt, String in, String out,
                              String prof, int flg, Exception ex)
                              {
                                  
             try{
                 comment = comt;
                 byte[] bytes = getBytes(in);
                 input = new String(bytes,"UTF-8");
                 bytes = getBytes(out);
                 output = (bytes==null)? null : new String(bytes,"UTF-8");
                 profile = prof;
                 flags = flg;
                 expected = ex;
             }catch (Exception e){
                 e.printStackTrace();
                 throw new RuntimeException();
             }
         }
       }
       
       public static final ConformanceTestCase[] conformanceTestCases =
       {
  
         new ConformanceTestCase(
           "Case folding ASCII U+0043 U+0041 U+0046 U+0045",
           "\u0043\u0041\u0046\u0045", "\u0063\u0061\u0066\u0065",
           "Nameprep", IDNA.DEFAULT, 
           null

         ),
         new ConformanceTestCase(
           "Case folding 8bit U+00DF (german sharp s)",
           "\u00C3\u009F", "\u0073\u0073", 
           "Nameprep", IDNA.DEFAULT, 
           null
         ),
         new ConformanceTestCase(
           "Non-ASCII multibyte space character U+1680",
           "\u00E1\u009A\u0080", null, 
           "Nameprep", IDNA.DEFAULT,
           new StringPrepParseException("",StringPrepParseException.PROHIBITED_ERROR)
         ),
         new ConformanceTestCase(
           "Non-ASCII 8bit control character U+0085",
           "\u00C2\u0085", null, 
           "Nameprep", IDNA.DEFAULT,
           new StringPrepParseException("",StringPrepParseException.PROHIBITED_ERROR)
         ),
         new ConformanceTestCase(
           "Non-ASCII multibyte control character U+180E",
           "\u00E1\u00A0\u008E", null, 
           "Nameprep", IDNA.DEFAULT,
           new StringPrepParseException("",StringPrepParseException.PROHIBITED_ERROR)
         ),
         new ConformanceTestCase(
           "Non-ASCII control character U+1D175",
           "\u00F0\u009D\u0085\u00B5", null, 
           "Nameprep", IDNA.DEFAULT,
           new StringPrepParseException("",StringPrepParseException.PROHIBITED_ERROR)
         ),
         new ConformanceTestCase(
           "Plane 0 private use character U+F123",
           "\u00EF\u0084\u00A3", null, 
           "Nameprep", IDNA.DEFAULT,
           new StringPrepParseException("",StringPrepParseException.PROHIBITED_ERROR)
         ),
         new ConformanceTestCase(
           "Plane 15 private use character U+F1234",
           "\u00F3\u00B1\u0088\u00B4", null, 
           "Nameprep", IDNA.DEFAULT,
           new StringPrepParseException("",StringPrepParseException.PROHIBITED_ERROR)
         ),
         new ConformanceTestCase(
           "Plane 16 private use character U+10F234",
           "\u00F4\u008F\u0088\u00B4", null, 
           "Nameprep", IDNA.DEFAULT,
           new StringPrepParseException("",StringPrepParseException.PROHIBITED_ERROR)
         ),
         new ConformanceTestCase(
           "Non-character code point U+8FFFE",
           "\u00F2\u008F\u00BF\u00BE", null, 
           "Nameprep", IDNA.DEFAULT,
           new StringPrepParseException("",StringPrepParseException.PROHIBITED_ERROR)
         ),
         new ConformanceTestCase(
           "Non-character code point U+10FFFF",
           "\u00F4\u008F\u00BF\u00BF", null,
           "Nameprep", IDNA.DEFAULT,
           new StringPrepParseException("",StringPrepParseException.PROHIBITED_ERROR)
         ),
     /* 
         {
           "Surrogate code U+DF42",
           "\u00ED\u00BD\u0082", null, "Nameprep", InternationalizedDomainNames.DEFAULT,
           U_IDNA_PROHIBITED_ERROR
         },
    */
         new ConformanceTestCase(
           "Non-plain text character U+FFFD",
           "\u00EF\u00BF\u00BD", null, 
           "Nameprep", IDNA.DEFAULT,
           new StringPrepParseException("",StringPrepParseException.PROHIBITED_ERROR)
         ),
         new ConformanceTestCase(
           "Ideographic description character U+2FF5",
           "\u00E2\u00BF\u00B5", null, 
           "Nameprep", IDNA.DEFAULT,
           new StringPrepParseException("",StringPrepParseException.PROHIBITED_ERROR)
         ),
         new ConformanceTestCase(
           "Display property character U+0341",
           "\u00CD\u0081", "\u00CC\u0081",
           "Nameprep", IDNA.DEFAULT, 
           null

         ),

         new ConformanceTestCase(
           "Left-to-right mark U+200E",
           "\u00E2\u0080\u008E", "\u00CC\u0081", 
           "Nameprep", IDNA.DEFAULT,
           new StringPrepParseException("",StringPrepParseException.PROHIBITED_ERROR)
         ),
         new ConformanceTestCase(

           "Deprecated U+202A",
           "\u00E2\u0080\u00AA", "\u00CC\u0081", 
           "Nameprep", IDNA.DEFAULT,
           new StringPrepParseException("",StringPrepParseException.PROHIBITED_ERROR)
         ),
         new ConformanceTestCase(
           "Language tagging character U+E0001",
           "\u00F3\u00A0\u0080\u0081", "\u00CC\u0081", 
           "Nameprep", IDNA.DEFAULT,
           new StringPrepParseException("",StringPrepParseException.PROHIBITED_ERROR)
         ),
         new ConformanceTestCase(
           "Language tagging character U+E0042",
           "\u00F3\u00A0\u0081\u0082", null, 
           "Nameprep", IDNA.DEFAULT,
           new StringPrepParseException("",StringPrepParseException.PROHIBITED_ERROR)
         ),
         new ConformanceTestCase(
           "Bidi: RandALCat character U+05BE and LCat characters",
           "\u0066\u006F\u006F\u00D6\u00BE\u0062\u0061\u0072", null, 
           "Nameprep", IDNA.DEFAULT,
           new StringPrepParseException("",StringPrepParseException.CHECK_BIDI_ERROR)
         ),
         new ConformanceTestCase(
           "Bidi: RandALCat character U+FD50 and LCat characters",
           "\u0066\u006F\u006F\u00EF\u00B5\u0090\u0062\u0061\u0072", null,
           "Nameprep",IDNA.DEFAULT ,
           new StringPrepParseException("",StringPrepParseException.CHECK_BIDI_ERROR)
         ),
         new ConformanceTestCase(
           "Bidi: RandALCat character U+FB38 and LCat characters",
           "\u0066\u006F\u006F\u00EF\u00B9\u00B6\u0062\u0061\u0072", "\u0066\u006F\u006F \u00d9\u008e\u0062\u0061\u0072",
           "Nameprep", IDNA.DEFAULT,
           null
         ),
         new ConformanceTestCase(
           "Bidi: RandALCat without trailing RandALCat U+0627 U+0031",
           "\u00D8\u00A7\u0031", null, 
           "Nameprep", IDNA.DEFAULT,
           new StringPrepParseException("",StringPrepParseException.CHECK_BIDI_ERROR)
         ),
         new ConformanceTestCase(
           "Bidi: RandALCat character U+0627 U+0031 U+0628",
           "\u00D8\u00A7\u0031\u00D8\u00A8", "\u00D8\u00A7\u0031\u00D8\u00A8",
           "Nameprep", IDNA.DEFAULT,
           null
         ),
         new ConformanceTestCase(
           "Unassigned code point U+E0002",
           "\u00F3\u00A0\u0080\u0082", null, 
           "Nameprep", IDNA.DEFAULT,
           new StringPrepParseException("",StringPrepParseException.UNASSIGNED_ERROR)
         ),

    /*  // Invalid UTF-8
         {
           "Larger test (shrinking)",
           "X\u00C2\u00AD\u00C3\u00DF\u00C4\u00B0\u00E2\u0084\u00A1\u006a\u00cc\u008c\u00c2\u00a0\u00c2"
           "\u00aa\u00ce\u00b0\u00e2\u0080\u0080", "xssi\u00cc\u0087""tel\u00c7\u00b0 a\u00ce\u00b0 ",
           "Nameprep",
           InternationalizedDomainNames.DEFAULT, U_ZERO_ERROR
         },
        {

           "Larger test (expanding)",
           "X\u00C3\u00DF\u00e3\u008c\u0096\u00C4\u00B0\u00E2\u0084\u00A1\u00E2\u0092\u009F\u00E3\u008c\u0080",
           "xss\u00e3\u0082\u00ad\u00e3\u0083\u00ad\u00e3\u0083\u00a1\u00e3\u0083\u00bc\u00e3\u0083\u0088"
           "\u00e3\u0083\u00ab""i\u00cc\u0087""tel\u0028""d\u0029\u00e3\u0082\u00a2\u00e3\u0083\u0091"
           "\u00e3\u0083\u00bc\u00e3\u0083\u0088"
           "Nameprep",
           InternationalizedDomainNames.DEFAULT, U_ZERO_ERROR
         },
      */
    };
}
