/*
*******************************************************************************
* Copyright (C) 2010-2014, International Business Machines
* Corporation and others.  All Rights Reserved.
*******************************************************************************
*/
package com.ibm.icu.dev.test.normalizer;

import java.util.Collections;
import java.util.EnumSet;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import com.ibm.icu.dev.test.TestFmwk;
import com.ibm.icu.impl.Normalizer2Impl.UTF16Plus;
import com.ibm.icu.text.IDNA;

/**
 * UTS #46 (IDNA2008) test.
 * @author Markus Scherer
 * @since 2010jul10
 */
public class UTS46Test extends TestFmwk {
    public static void main(String[] args) throws Exception {
        new UTS46Test().run(args);
    }
    public UTS46Test() {
        int commonOptions=
            IDNA.USE_STD3_RULES|IDNA.CHECK_BIDI|
            IDNA.CHECK_CONTEXTJ|IDNA.CHECK_CONTEXTO;
        trans=IDNA.getUTS46Instance(commonOptions);
        nontrans=IDNA.getUTS46Instance(commonOptions|
                                       IDNA.NONTRANSITIONAL_TO_ASCII|IDNA.NONTRANSITIONAL_TO_UNICODE);
    }

    public void TestAPI() {
        StringBuilder result=new StringBuilder();
        IDNA.Info info=new IDNA.Info();
        String input="www.eXample.cOm";
        String expected="www.example.com";
        trans.nameToASCII(input, result, info);
        if(info.hasErrors() || !UTF16Plus.equal(result, expected)) {
            errln(String.format("T.nameToASCII(www.example.com) info.errors=%s result matches=%b",
                                info.getErrors(), UTF16Plus.equal(result, expected)));
        }
        input="xn--bcher.de-65a";
        expected="xn--bcher\uFFFDde-65a";
        nontrans.labelToASCII(input, result, info);
        if( !info.getErrors().equals(EnumSet.of(IDNA.Error.LABEL_HAS_DOT, IDNA.Error.INVALID_ACE_LABEL)) ||
            !UTF16Plus.equal(result, expected)
        ) {
            errln(String.format("N.labelToASCII(label-with-dot) failed with errors %s",
                                info.getErrors()));
        }
        // Java API tests that are not parallel to C++ tests
        // because the C++ specifics (error codes etc.) do not apply here.
        String resultString=trans.nameToUnicode("fA\u00DF.de", result, info).toString();
        if(info.hasErrors() || !resultString.equals("fass.de")) {
            errln(String.format("T.nameToUnicode(fA\u00DF.de) info.errors=%s result matches=%b",
                                info.getErrors(), resultString.equals("fass.de")));
        }
        try {
            nontrans.labelToUnicode(result, result, info);
            errln("N.labelToUnicode(result, result) did not throw an Exception");
        } catch(Exception e) {
            // as expected (should be an IllegalArgumentException, or an ICU version of it)
        }
    }

    public void TestNotSTD3() {
        IDNA not3=IDNA.getUTS46Instance(IDNA.CHECK_BIDI);
        String input="\u0000A_2+2=4\n.e\u00DFen.net";
        StringBuilder result=new StringBuilder();
        IDNA.Info info=new IDNA.Info();
        if( !not3.nameToUnicode(input, result, info).toString().equals("\u0000a_2+2=4\n.essen.net") ||
            info.hasErrors()
        ) {
            errln(String.format("notSTD3.nameToUnicode(non-LDH ASCII) unexpected errors %s string %s",
                                info.getErrors(), prettify(result.toString())));
        }
        // A space (BiDi class WS) is not allowed in a BiDi domain name.
        input="a z.xn--4db.edu";
        not3.nameToASCII(input, result, info);
        if(!UTF16Plus.equal(result, input) || !info.getErrors().equals(EnumSet.of(IDNA.Error.BIDI))) {
            errln("notSTD3.nameToASCII(ASCII-with-space.alef.edu) failed");
        }
        // Characters that are canonically equivalent to sequences with non-LDH ASCII.
        input="a\u2260b\u226Ec\u226Fd";
        not3.nameToUnicode(input, result, info);
        if(!UTF16Plus.equal(result, input) || info.hasErrors()) {
            errln(String.format("notSTD3.nameToUnicode(equiv to non-LDH ASCII) unexpected errors %s string %s",
                                info.getErrors().toString(), prettify(result.toString())));
        }
    }

    private static final Map<String, IDNA.Error> errorNamesToErrors;
    static {
        errorNamesToErrors=new TreeMap<String, IDNA.Error>();
        errorNamesToErrors.put("UIDNA_ERROR_EMPTY_LABEL", IDNA.Error.EMPTY_LABEL);
        errorNamesToErrors.put("UIDNA_ERROR_LABEL_TOO_LONG", IDNA.Error.LABEL_TOO_LONG);
        errorNamesToErrors.put("UIDNA_ERROR_DOMAIN_NAME_TOO_LONG", IDNA.Error.DOMAIN_NAME_TOO_LONG);
        errorNamesToErrors.put("UIDNA_ERROR_LEADING_HYPHEN", IDNA.Error.LEADING_HYPHEN);
        errorNamesToErrors.put("UIDNA_ERROR_TRAILING_HYPHEN", IDNA.Error.TRAILING_HYPHEN);
        errorNamesToErrors.put("UIDNA_ERROR_HYPHEN_3_4", IDNA.Error.HYPHEN_3_4);
        errorNamesToErrors.put("UIDNA_ERROR_LEADING_COMBINING_MARK", IDNA.Error.LEADING_COMBINING_MARK);
        errorNamesToErrors.put("UIDNA_ERROR_DISALLOWED", IDNA.Error.DISALLOWED);
        errorNamesToErrors.put("UIDNA_ERROR_PUNYCODE", IDNA.Error.PUNYCODE);
        errorNamesToErrors.put("UIDNA_ERROR_LABEL_HAS_DOT", IDNA.Error.LABEL_HAS_DOT);
        errorNamesToErrors.put("UIDNA_ERROR_INVALID_ACE_LABEL", IDNA.Error.INVALID_ACE_LABEL);
        errorNamesToErrors.put("UIDNA_ERROR_BIDI", IDNA.Error.BIDI);
        errorNamesToErrors.put("UIDNA_ERROR_CONTEXTJ", IDNA.Error.CONTEXTJ);
        errorNamesToErrors.put("UIDNA_ERROR_CONTEXTO_PUNCTUATION", IDNA.Error.CONTEXTO_PUNCTUATION);
        errorNamesToErrors.put("UIDNA_ERROR_CONTEXTO_DIGITS", IDNA.Error.CONTEXTO_DIGITS);
    }

    private static final class TestCase {
        private TestCase() {
            errors=EnumSet.noneOf(IDNA.Error.class);
        }
        private void set(String[] data) {
            s=data[0];
            o=data[1];
            u=data[2];
            errors.clear();
            if(data[3].length()!=0) {
                for(String e: data[3].split("\\|")) {
                    errors.add(errorNamesToErrors.get(e));
                }
            }
        }
        // Input string and options string (Nontransitional/Transitional/Both).
        private String s, o;
        // Expected Unicode result string.
        private String u;
        private EnumSet<IDNA.Error> errors;
    };

    private static final String testCases[][]={
        { "www.eXample.cOm", "B",  // all ASCII
          "www.example.com", "" },
        { "B\u00FCcher.de", "B",  // u-umlaut
          "b\u00FCcher.de", "" },
        { "\u00D6BB", "B",  // O-umlaut
          "\u00F6bb", "" },
        { "fa\u00DF.de", "N",  // sharp s
          "fa\u00DF.de", "" },
        { "fa\u00DF.de", "T",  // sharp s
          "fass.de", "" },
        { "XN--fA-hia.dE", "B",  // sharp s in Punycode
          "fa\u00DF.de", "" },
        { "\u03B2\u03CC\u03BB\u03BF\u03C2.com", "N",  // Greek with final sigma
          "\u03B2\u03CC\u03BB\u03BF\u03C2.com", "" },
        { "\u03B2\u03CC\u03BB\u03BF\u03C2.com", "T",  // Greek with final sigma
          "\u03B2\u03CC\u03BB\u03BF\u03C3.com", "" },
        { "xn--nxasmm1c", "B",  // Greek with final sigma in Punycode
          "\u03B2\u03CC\u03BB\u03BF\u03C2", "" },
        { "www.\u0DC1\u0DCA\u200D\u0DBB\u0DD3.com", "N",  // "Sri" in "Sri Lanka" has a ZWJ
          "www.\u0DC1\u0DCA\u200D\u0DBB\u0DD3.com", "" },
        { "www.\u0DC1\u0DCA\u200D\u0DBB\u0DD3.com", "T",  // "Sri" in "Sri Lanka" has a ZWJ
          "www.\u0DC1\u0DCA\u0DBB\u0DD3.com", "" },
        { "www.xn--10cl1a0b660p.com", "B",  // "Sri" in Punycode
          "www.\u0DC1\u0DCA\u200D\u0DBB\u0DD3.com", "" },
        { "\u0646\u0627\u0645\u0647\u200C\u0627\u06CC", "N",  // ZWNJ
          "\u0646\u0627\u0645\u0647\u200C\u0627\u06CC", "" },
        { "\u0646\u0627\u0645\u0647\u200C\u0627\u06CC", "T",  // ZWNJ
          "\u0646\u0627\u0645\u0647\u0627\u06CC", "" },
        { "xn--mgba3gch31f060k.com", "B",  // ZWNJ in Punycode
          "\u0646\u0627\u0645\u0647\u200C\u0627\u06CC.com", "" },
        { "a.b\uFF0Ec\u3002d\uFF61", "B",
          "a.b.c.d.", "" },
        { "U\u0308.xn--tda", "B",  // U+umlaut.u-umlaut
          "\u00FC.\u00FC", "" },
        { "xn--u-ccb", "B",  // u+umlaut in Punycode
          "xn--u-ccb\uFFFD", "UIDNA_ERROR_INVALID_ACE_LABEL" },
        { "a\u2488com", "B",  // contains 1-dot
          "a\uFFFDcom", "UIDNA_ERROR_DISALLOWED" },
        { "xn--a-ecp.ru", "B",  // contains 1-dot in Punycode
          "xn--a-ecp\uFFFD.ru", "UIDNA_ERROR_INVALID_ACE_LABEL" },
        { "xn--0.pt", "B",  // invalid Punycode
          "xn--0\uFFFD.pt", "UIDNA_ERROR_PUNYCODE" },
        { "xn--a.pt", "B",  // U+0080
          "xn--a\uFFFD.pt", "UIDNA_ERROR_INVALID_ACE_LABEL" },
        { "xn--a-\u00C4.pt", "B",  // invalid Punycode
          "xn--a-\u00E4.pt", "UIDNA_ERROR_PUNYCODE" },
        { "\u65E5\u672C\u8A9E\u3002\uFF2A\uFF30", "B",  // Japanese with fullwidth ".jp"
          "\u65E5\u672C\u8A9E.jp", "" },
        { "\u2615", "B", "\u2615", "" },  // Unicode 4.0 HOT BEVERAGE
        // some characters are disallowed because they are canonically equivalent
        // to sequences with non-LDH ASCII
        { "a\u2260b\u226Ec\u226Fd", "B",
          "a\uFFFDb\uFFFDc\uFFFDd", "UIDNA_ERROR_DISALLOWED" },
        // many deviation characters, test the special mapping code
        { "1.a\u00DF\u200C\u200Db\u200C\u200Dc\u00DF\u00DF\u00DF\u00DFd"+
          "\u03C2\u03C3\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DFe"+
          "\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DFx"+
          "\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DFy"+
          "\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u0302\u00DFz", "N",
          "1.a\u00DF\u200C\u200Db\u200C\u200Dc\u00DF\u00DF\u00DF\u00DFd"+
          "\u03C2\u03C3\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DFe"+
          "\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DFx"+
          "\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DFy"+
          "\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u0302\u00DFz",
          "UIDNA_ERROR_LABEL_TOO_LONG|UIDNA_ERROR_CONTEXTJ" },
        { "1.a\u00DF\u200C\u200Db\u200C\u200Dc\u00DF\u00DF\u00DF\u00DFd"+
          "\u03C2\u03C3\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DFe"+
          "\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DFx"+
          "\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DFy"+
          "\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u00DF\u0302\u00DFz", "T",
          "1.assbcssssssssd"+
          "\u03C3\u03C3sssssssssssssssse"+
          "ssssssssssssssssssssx"+
          "ssssssssssssssssssssy"+
          "sssssssssssssss\u015Dssz", "UIDNA_ERROR_LABEL_TOO_LONG" },
        // "xn--bss" with deviation characters
        { "\u200Cx\u200Dn\u200C-\u200D-b\u00DF", "N",
          "\u200Cx\u200Dn\u200C-\u200D-b\u00DF", "UIDNA_ERROR_CONTEXTJ" },
        { "\u200Cx\u200Dn\u200C-\u200D-b\u00DF", "T",
          "\u5919", "" },
        // "xn--bssffl" written as:
        // 02E3 MODIFIER LETTER SMALL X
        // 034F COMBINING GRAPHEME JOINER (ignored)
        // 2115 DOUBLE-STRUCK CAPITAL N
        // 200B ZERO WIDTH SPACE (ignored)
        // FE63 SMALL HYPHEN-MINUS
        // 00AD SOFT HYPHEN (ignored)
        // FF0D FULLWIDTH HYPHEN-MINUS
        // 180C MONGOLIAN FREE VARIATION SELECTOR TWO (ignored)
        // 212C SCRIPT CAPITAL B
        // FE00 VARIATION SELECTOR-1 (ignored)
        // 017F LATIN SMALL LETTER LONG S
        // 2064 INVISIBLE PLUS (ignored)
        // 1D530 MATHEMATICAL FRAKTUR SMALL S
        // E01EF VARIATION SELECTOR-256 (ignored)
        // FB04 LATIN SMALL LIGATURE FFL
        { "\u02E3\u034F\u2115\u200B\uFE63\u00AD\uFF0D\u180C"+
          "\u212C\uFE00\u017F\u2064"+"\uD835\uDD30\uDB40\uDDEF"/*1D530 E01EF*/+"\uFB04", "B",
          "\u5921\u591E\u591C\u5919", "" },
        { "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789012345678901", "B",
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789012345678901", "" },
        { "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789012345678901.", "B",
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789012345678901.", "" },
        // Domain name >256 characters, forces slow path in UTF-8 processing.
        { "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "12345678901234567890123456789012345678901234567890123456789012", "B",
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "12345678901234567890123456789012345678901234567890123456789012",
          "UIDNA_ERROR_DOMAIN_NAME_TOO_LONG" },
        { "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789\u05D0", "B",
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789\u05D0",
          "UIDNA_ERROR_DOMAIN_NAME_TOO_LONG|UIDNA_ERROR_BIDI" },
        { "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789012345678901234."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890", "B",
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789012345678901234."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890",
          "UIDNA_ERROR_LABEL_TOO_LONG" },
        { "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789012345678901234."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890.", "B",
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789012345678901234."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890.",
          "UIDNA_ERROR_LABEL_TOO_LONG" },
        { "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789012345678901234."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789012345678901", "B",
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789012345678901234."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789012345678901",
          "UIDNA_ERROR_LABEL_TOO_LONG|UIDNA_ERROR_DOMAIN_NAME_TOO_LONG" },
        // label length 63: xn--1234567890123456789012345678901234567890123456789012345-9te
        { "\u00E41234567890123456789012345678901234567890123456789012345", "B",
          "\u00E41234567890123456789012345678901234567890123456789012345", "" },
        { "1234567890\u00E41234567890123456789012345678901234567890123456", "B",
          "1234567890\u00E41234567890123456789012345678901234567890123456", "UIDNA_ERROR_LABEL_TOO_LONG" },
        { "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890\u00E4123456789012345678901234567890123456789012345."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789012345678901", "B",
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890\u00E4123456789012345678901234567890123456789012345."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789012345678901", "" },
        { "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890\u00E4123456789012345678901234567890123456789012345."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789012345678901.", "B",
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890\u00E4123456789012345678901234567890123456789012345."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789012345678901.", "" },
        { "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890\u00E4123456789012345678901234567890123456789012345."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "12345678901234567890123456789012345678901234567890123456789012", "B",
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890\u00E4123456789012345678901234567890123456789012345."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "12345678901234567890123456789012345678901234567890123456789012",
          "UIDNA_ERROR_DOMAIN_NAME_TOO_LONG" },
        { "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890\u00E41234567890123456789012345678901234567890123456."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890", "B",
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890\u00E41234567890123456789012345678901234567890123456."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890",
          "UIDNA_ERROR_LABEL_TOO_LONG" },
        { "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890\u00E41234567890123456789012345678901234567890123456."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890.", "B",
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890\u00E41234567890123456789012345678901234567890123456."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "123456789012345678901234567890123456789012345678901234567890.",
          "UIDNA_ERROR_LABEL_TOO_LONG" },
        { "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890\u00E41234567890123456789012345678901234567890123456."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789012345678901", "B",
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890\u00E41234567890123456789012345678901234567890123456."+
          "123456789012345678901234567890123456789012345678901234567890123."+
          "1234567890123456789012345678901234567890123456789012345678901",
          "UIDNA_ERROR_LABEL_TOO_LONG|UIDNA_ERROR_DOMAIN_NAME_TOO_LONG" },
        // hyphen errors and empty-label errors
        { ".", "B", ".", "UIDNA_ERROR_EMPTY_LABEL" },
        { "\uFF0E", "B", ".", "UIDNA_ERROR_EMPTY_LABEL" },
        // "xn---q----jra"=="-q--a-umlaut-"
        { "a.b..-q--a-.e", "B", "a.b..-q--a-.e",
          "UIDNA_ERROR_EMPTY_LABEL|UIDNA_ERROR_LEADING_HYPHEN|UIDNA_ERROR_TRAILING_HYPHEN|"+
          "UIDNA_ERROR_HYPHEN_3_4" },
        { "a.b..-q--\u00E4-.e", "B", "a.b..-q--\u00E4-.e",
          "UIDNA_ERROR_EMPTY_LABEL|UIDNA_ERROR_LEADING_HYPHEN|UIDNA_ERROR_TRAILING_HYPHEN|"+
          "UIDNA_ERROR_HYPHEN_3_4" },
        { "a.b..xn---q----jra.e", "B", "a.b..-q--\u00E4-.e",
          "UIDNA_ERROR_EMPTY_LABEL|UIDNA_ERROR_LEADING_HYPHEN|UIDNA_ERROR_TRAILING_HYPHEN|"+
          "UIDNA_ERROR_HYPHEN_3_4" },
        { "a..c", "B", "a..c", "UIDNA_ERROR_EMPTY_LABEL" },
        { "a.-b.", "B", "a.-b.", "UIDNA_ERROR_LEADING_HYPHEN" },
        { "a.b-.c", "B", "a.b-.c", "UIDNA_ERROR_TRAILING_HYPHEN" },
        { "a.-.c", "B", "a.-.c", "UIDNA_ERROR_LEADING_HYPHEN|UIDNA_ERROR_TRAILING_HYPHEN" },
        { "a.bc--de.f", "B", "a.bc--de.f", "UIDNA_ERROR_HYPHEN_3_4" },
        { "\u00E4.\u00AD.c", "B", "\u00E4..c", "UIDNA_ERROR_EMPTY_LABEL" },
        { "\u00E4.-b.", "B", "\u00E4.-b.", "UIDNA_ERROR_LEADING_HYPHEN" },
        { "\u00E4.b-.c", "B", "\u00E4.b-.c", "UIDNA_ERROR_TRAILING_HYPHEN" },
        { "\u00E4.-.c", "B", "\u00E4.-.c", "UIDNA_ERROR_LEADING_HYPHEN|UIDNA_ERROR_TRAILING_HYPHEN" },
        { "\u00E4.bc--de.f", "B", "\u00E4.bc--de.f", "UIDNA_ERROR_HYPHEN_3_4" },
        { "a.b.\u0308c.d", "B", "a.b.\uFFFDc.d", "UIDNA_ERROR_LEADING_COMBINING_MARK" },
        { "a.b.xn--c-bcb.d", "B",
          "a.b.xn--c-bcb\uFFFD.d", "UIDNA_ERROR_LEADING_COMBINING_MARK|UIDNA_ERROR_INVALID_ACE_LABEL" },
        // BiDi
        { "A0", "B", "a0", "" },
        { "0A", "B", "0a", "" },  // all-LTR is ok to start with a digit (EN)
        { "0A.\u05D0", "B",  // ASCII label does not start with L/R/AL
          "0a.\u05D0", "UIDNA_ERROR_BIDI" },
        { "c.xn--0-eha.xn--4db", "B",  // 2nd label does not start with L/R/AL
          "c.0\u00FC.\u05D0", "UIDNA_ERROR_BIDI" },
        { "b-.\u05D0", "B",  // label does not end with L/EN
          "b-.\u05D0", "UIDNA_ERROR_TRAILING_HYPHEN|UIDNA_ERROR_BIDI" },
        { "d.xn----dha.xn--4db", "B",  // 2nd label does not end with L/EN
          "d.\u00FC-.\u05D0", "UIDNA_ERROR_TRAILING_HYPHEN|UIDNA_ERROR_BIDI" },
        { "a\u05D0", "B", "a\u05D0", "UIDNA_ERROR_BIDI" },  // first dir != last dir
        { "\u05D0\u05C7", "B", "\u05D0\u05C7", "" },
        { "\u05D09\u05C7", "B", "\u05D09\u05C7", "" },
        { "\u05D0a\u05C7", "B", "\u05D0a\u05C7", "UIDNA_ERROR_BIDI" },  // first dir != last dir
        { "\u05D0\u05EA", "B", "\u05D0\u05EA", "" },
        { "\u05D0\u05F3\u05EA", "B", "\u05D0\u05F3\u05EA", "" },
        { "a\u05D0Tz", "B", "a\u05D0tz", "UIDNA_ERROR_BIDI" },  // mixed dir
        { "\u05D0T\u05EA", "B", "\u05D0t\u05EA", "UIDNA_ERROR_BIDI" },  // mixed dir
        { "\u05D07\u05EA", "B", "\u05D07\u05EA", "" },
        { "\u05D0\u0667\u05EA", "B", "\u05D0\u0667\u05EA", "" },  // Arabic 7 in the middle
        { "a7\u0667z", "B", "a7\u0667z", "UIDNA_ERROR_BIDI" },  // AN digit in LTR
        { "\u05D07\u0667\u05EA", "B",  // mixed EN/AN digits in RTL
          "\u05D07\u0667\u05EA", "UIDNA_ERROR_BIDI" },
        // ZWJ
        { "\u0BB9\u0BCD\u200D", "N", "\u0BB9\u0BCD\u200D", "" },  // Virama+ZWJ
        { "\u0BB9\u200D", "N", "\u0BB9\u200D", "UIDNA_ERROR_CONTEXTJ" },  // no Virama
        { "\u200D", "N", "\u200D", "UIDNA_ERROR_CONTEXTJ" },  // no Virama
        // ZWNJ
        { "\u0BB9\u0BCD\u200C", "N", "\u0BB9\u0BCD\u200C", "" },  // Virama+ZWNJ
        { "\u0BB9\u200C", "N", "\u0BB9\u200C", "UIDNA_ERROR_CONTEXTJ" },  // no Virama
        { "\u200C", "N", "\u200C", "UIDNA_ERROR_CONTEXTJ" },  // no Virama
        { "\u0644\u0670\u200C\u06ED\u06EF", "N",  // Joining types D T ZWNJ T R
          "\u0644\u0670\u200C\u06ED\u06EF", "" },
        { "\u0644\u0670\u200C\u06EF", "N",  // D T ZWNJ R
          "\u0644\u0670\u200C\u06EF", "" },
        { "\u0644\u200C\u06ED\u06EF", "N",  // D ZWNJ T R
          "\u0644\u200C\u06ED\u06EF", "" },
        { "\u0644\u200C\u06EF", "N",  // D ZWNJ R
          "\u0644\u200C\u06EF", "" },
        { "\u0644\u0670\u200C\u06ED", "N",  // D T ZWNJ T
          "\u0644\u0670\u200C\u06ED", "UIDNA_ERROR_BIDI|UIDNA_ERROR_CONTEXTJ" },
        { "\u06EF\u200C\u06EF", "N",  // R ZWNJ R
          "\u06EF\u200C\u06EF", "UIDNA_ERROR_CONTEXTJ" },
        { "\u0644\u200C", "N",  // D ZWNJ
          "\u0644\u200C", "UIDNA_ERROR_BIDI|UIDNA_ERROR_CONTEXTJ" },
        { "\u0660\u0661", "B",  // Arabic-Indic Digits alone
          "\u0660\u0661", "UIDNA_ERROR_BIDI" },
        { "\u06F0\u06F1", "B",  // Extended Arabic-Indic Digits alone
          "\u06F0\u06F1", "" },
        { "\u0660\u06F1", "B",  // Mixed Arabic-Indic Digits
          "\u0660\u06F1", "UIDNA_ERROR_CONTEXTO_DIGITS|UIDNA_ERROR_BIDI" },
        // All of the CONTEXTO "Would otherwise have been DISALLOWED" characters
        // in their correct contexts,
        // then each in incorrect context.
        { "l\u00B7l\u4E00\u0375\u03B1\u05D0\u05F3\u05F4\u30FB", "B",
          "l\u00B7l\u4E00\u0375\u03B1\u05D0\u05F3\u05F4\u30FB", "UIDNA_ERROR_BIDI" },
        { "l\u00B7", "B",
          "l\u00B7", "UIDNA_ERROR_CONTEXTO_PUNCTUATION" },
        { "\u00B7l", "B",
          "\u00B7l", "UIDNA_ERROR_CONTEXTO_PUNCTUATION" },
        { "\u0375", "B",
          "\u0375", "UIDNA_ERROR_CONTEXTO_PUNCTUATION" },
        { "\u03B1\u05F3", "B",
          "\u03B1\u05F3", "UIDNA_ERROR_CONTEXTO_PUNCTUATION|UIDNA_ERROR_BIDI" },
        { "\u05F4", "B",
          "\u05F4", "UIDNA_ERROR_CONTEXTO_PUNCTUATION" },
        { "l\u30FB", "B",
          "l\u30FB", "UIDNA_ERROR_CONTEXTO_PUNCTUATION" },
        // { "", "B",
        //   "", "" },
    };

    public void TestSomeCases() {
        StringBuilder aT=new StringBuilder(), uT=new StringBuilder();
        StringBuilder aN=new StringBuilder(), uN=new StringBuilder();
        IDNA.Info aTInfo=new IDNA.Info(), uTInfo=new IDNA.Info();
        IDNA.Info aNInfo=new IDNA.Info(), uNInfo=new IDNA.Info();

        StringBuilder aTuN=new StringBuilder(), uTaN=new StringBuilder();
        StringBuilder aNuN=new StringBuilder(), uNaN=new StringBuilder();
        IDNA.Info aTuNInfo=new IDNA.Info(), uTaNInfo=new IDNA.Info();
        IDNA.Info aNuNInfo=new IDNA.Info(), uNaNInfo=new IDNA.Info();

        StringBuilder aTL=new StringBuilder(), uTL=new StringBuilder();
        StringBuilder aNL=new StringBuilder(), uNL=new StringBuilder();
        IDNA.Info aTLInfo=new IDNA.Info(), uTLInfo=new IDNA.Info();
        IDNA.Info aNLInfo=new IDNA.Info(), uNLInfo=new IDNA.Info();

        EnumSet<IDNA.Error> uniErrors=EnumSet.noneOf(IDNA.Error.class);

        TestCase testCase=new TestCase();
        int i;
        for(i=0; i<testCases.length; ++i) {
            testCase.set(testCases[i]);
            String input=testCase.s;
            String expected=testCase.u;
            // ToASCII/ToUnicode, transitional/nontransitional
            try {
                trans.nameToASCII(input, aT, aTInfo);
                trans.nameToUnicode(input, uT, uTInfo);
                nontrans.nameToASCII(input, aN, aNInfo);
                nontrans.nameToUnicode(input, uN, uNInfo);
            } catch(Exception e) {
                errln(String.format("first-level processing [%d/%s] %s - %s",
                                    i, testCase.o, testCase.s, e));
                continue;
            }
            // ToUnicode does not set length errors.
            uniErrors.clear();
            uniErrors.addAll(testCase.errors);
            uniErrors.removeAll(lengthErrors);
            char mode=testCase.o.charAt(0);
            if(mode=='B' || mode=='N') {
                if(!sameErrors(uNInfo, uniErrors)) {
                    errln(String.format("N.nameToUnicode([%d] %s) unexpected errors %s",
                                        i, testCase.s, uNInfo.getErrors()));
                    continue;
                }
                if(!UTF16Plus.equal(uN, expected)) {
                    errln(String.format("N.nameToUnicode([%d] %s) unexpected string %s",
                                        i, testCase.s, prettify(uN.toString())));
                    continue;
                }
                if(!sameErrors(aNInfo, testCase.errors)) {
                    errln(String.format("N.nameToASCII([%d] %s) unexpected errors %s",
                                        i, testCase.s, aNInfo.getErrors()));
                    continue;
                }
            }
            if(mode=='B' || mode=='T') {
                if(!sameErrors(uTInfo, uniErrors)) {
                    errln(String.format("T.nameToUnicode([%d] %s) unexpected errors %s",
                                        i, testCase.s, uTInfo.getErrors()));
                    continue;
                }
                if(!UTF16Plus.equal(uT, expected)) {
                    errln(String.format("T.nameToUnicode([%d] %s) unexpected string %s",
                                        i, testCase.s, prettify(uT.toString())));
                    continue;
                }
                if(!sameErrors(aTInfo, testCase.errors)) {
                    errln(String.format("T.nameToASCII([%d] %s) unexpected errors %s",
                                        i, testCase.s, aTInfo.getErrors()));
                    continue;
                }
            }
            // ToASCII is all-ASCII if no severe errors
            if(!hasCertainErrors(aNInfo, severeErrors) && !isASCII(aN)) {
                errln(String.format("N.nameToASCII([%d] %s) (errors %s) result is not ASCII %s",
                                    i, testCase.s, aNInfo.getErrors(), prettify(aN.toString())));
                continue;
            }
            if(!hasCertainErrors(aTInfo, severeErrors) && !isASCII(aT)) {
                errln(String.format("T.nameToASCII([%d] %s) (errors %s) result is not ASCII %s",
                                    i, testCase.s, aTInfo.getErrors(), prettify(aT.toString())));
                continue;
            }
            if(isVerbose()) {
                char m= mode=='B' ? mode : 'N';
                logln(String.format("%c.nameToASCII([%d] %s) (errors %s) result string: %s",
                                    m, i, testCase.s, aNInfo.getErrors(), prettify(aN.toString())));
                if(mode!='B') {
                    logln(String.format("T.nameToASCII([%d] %s) (errors %s) result string: %s",
                                        i, testCase.s, aTInfo.getErrors(), prettify(aT.toString())));
                }
            }
            // second-level processing
            try {
                nontrans.nameToUnicode(aT, aTuN, aTuNInfo);
                nontrans.nameToASCII(uT, uTaN, uTaNInfo);
                nontrans.nameToUnicode(aN, aNuN, aNuNInfo);
                nontrans.nameToASCII(uN, uNaN, uNaNInfo);
            } catch(Exception e) {
                errln(String.format("second-level processing [%d/%s] %s - %s",
                                    i, testCase.o, testCase.s, e));
                continue;
            }
            if(!UTF16Plus.equal(aN, uNaN)) {
                errln(String.format("N.nameToASCII([%d] %s)!=N.nameToUnicode().N.nameToASCII() "+
                                    "(errors %s) %s vs. %s",
                                    i, testCase.s, aNInfo.getErrors(),
                                    prettify(aN.toString()), prettify(uNaN.toString())));
                continue;
            }
            if(!UTF16Plus.equal(aT, uTaN)) {
                errln(String.format("T.nameToASCII([%d] %s)!=T.nameToUnicode().N.nameToASCII() "+
                                    "(errors %s) %s vs. %s",
                                    i, testCase.s, aNInfo.getErrors(),
                                    prettify(aT.toString()), prettify(uTaN.toString())));
                continue;
            }
            if(!UTF16Plus.equal(uN, aNuN)) {
                errln(String.format("N.nameToUnicode([%d] %s)!=N.nameToASCII().N.nameToUnicode() "+
                                    "(errors %s) %s vs. %s",
                                    i, testCase.s, uNInfo.getErrors(), prettify(uN.toString()), prettify(aNuN.toString())));
                continue;
            }
            if(!UTF16Plus.equal(uT, aTuN)) {
                errln(String.format("T.nameToUnicode([%d] %s)!=T.nameToASCII().N.nameToUnicode() "+
                                    "(errors %s) %s vs. %s",
                                    i, testCase.s, uNInfo.getErrors(),
                                    prettify(uT.toString()), prettify(aTuN.toString())));
                continue;
            }
            // labelToUnicode
            try {
                trans.labelToASCII(input, aTL, aTLInfo);
                trans.labelToUnicode(input, uTL, uTLInfo);
                nontrans.labelToASCII(input, aNL, aNLInfo);
                nontrans.labelToUnicode(input, uNL, uNLInfo);
            } catch(Exception e) {
                errln(String.format("labelToXYZ processing [%d/%s] %s - %s",
                                    i, testCase.o, testCase.s, e));
                continue;
            }
            if(aN.indexOf(".")<0) {
                if(!UTF16Plus.equal(aN, aNL) || !sameErrors(aNInfo, aNLInfo)) {
                    errln(String.format("N.nameToASCII([%d] %s)!=N.labelToASCII() "+
                                        "(errors %s vs %s) %s vs. %s",
                                        i, testCase.s, aNInfo.getErrors().toString(), aNLInfo.getErrors().toString(),
                                        prettify(aN.toString()), prettify(aNL.toString())));
                    continue;
                }
            } else {
                if(!hasError(aNLInfo, IDNA.Error.LABEL_HAS_DOT)) {
                    errln(String.format("N.labelToASCII([%d] %s) errors %s missing UIDNA_ERROR_LABEL_HAS_DOT",
                                        i, testCase.s, aNLInfo.getErrors()));
                    continue;
                }
            }
            if(aT.indexOf(".")<0) {
                if(!UTF16Plus.equal(aT, aTL) || !sameErrors(aTInfo, aTLInfo)) {
                    errln(String.format("T.nameToASCII([%d] %s)!=T.labelToASCII() "+
                                        "(errors %s vs %s) %s vs. %s",
                                        i, testCase.s, aTInfo.getErrors().toString(), aTLInfo.getErrors().toString(),
                                        prettify(aT.toString()), prettify(aTL.toString())));
                    continue;
                }
            } else {
                if(!hasError(aTLInfo, IDNA.Error.LABEL_HAS_DOT)) {
                    errln(String.format("T.labelToASCII([%d] %s) errors %s missing UIDNA_ERROR_LABEL_HAS_DOT",
                                        i, testCase.s, aTLInfo.getErrors()));
                    continue;
                }
            }
            if(uN.indexOf(".")<0) {
                if(!UTF16Plus.equal(uN, uNL) || !sameErrors(uNInfo, uNLInfo)) {
                    errln(String.format("N.nameToUnicode([%d] %s)!=N.labelToUnicode() "+
                                        "(errors %s vs %s) %s vs. %s",
                                        i, testCase.s, uNInfo.getErrors().toString(), uNLInfo.getErrors().toString(),
                                        prettify(uN.toString()), prettify(uNL.toString())));
                    continue;
                }
            } else {
                if(!hasError(uNLInfo, IDNA.Error.LABEL_HAS_DOT)) {
                    errln(String.format("N.labelToUnicode([%d] %s) errors %s missing UIDNA_ERROR_LABEL_HAS_DOT",
                                        i, testCase.s, uNLInfo.getErrors()));
                    continue;
                }
            }
            if(uT.indexOf(".")<0) {
                if(!UTF16Plus.equal(uT, uTL) || !sameErrors(uTInfo, uTLInfo)) {
                    errln(String.format("T.nameToUnicode([%d] %s)!=T.labelToUnicode() "+
                                        "(errors %s vs %s) %s vs. %s",
                                        i, testCase.s, uTInfo.getErrors().toString(), uTLInfo.getErrors().toString(),
                                        prettify(uT.toString()), prettify(uTL.toString())));
                    continue;
                }
            } else {
                if(!hasError(uTLInfo, IDNA.Error.LABEL_HAS_DOT)) {
                    errln(String.format("T.labelToUnicode([%d] %s) errors %s missing UIDNA_ERROR_LABEL_HAS_DOT",
                                        i, testCase.s, uTLInfo.getErrors()));
                    continue;
                }
            }
            // Differences between transitional and nontransitional processing
            if(mode=='B') {
                if( aNInfo.isTransitionalDifferent() ||
                    aTInfo.isTransitionalDifferent() ||
                    uNInfo.isTransitionalDifferent() ||
                    uTInfo.isTransitionalDifferent() ||
                    aNLInfo.isTransitionalDifferent() ||
                    aTLInfo.isTransitionalDifferent() ||
                    uNLInfo.isTransitionalDifferent() ||
                    uTLInfo.isTransitionalDifferent()
                ) {
                    errln(String.format("B.process([%d] %s) isTransitionalDifferent()", i, testCase.s));
                    continue;
                }
                if( !UTF16Plus.equal(aN, aT) || !UTF16Plus.equal(uN, uT) ||
                    !UTF16Plus.equal(aNL, aTL) || !UTF16Plus.equal(uNL, uTL) ||
                    !sameErrors(aNInfo, aTInfo) || !sameErrors(uNInfo, uTInfo) ||
                    !sameErrors(aNLInfo, aTLInfo) || !sameErrors(uNLInfo, uTLInfo)
                ) {
                    errln(String.format("N.process([%d] %s) vs. T.process() different errors or result strings",
                                        i, testCase.s));
                    continue;
                }
            } else {
                if( !aNInfo.isTransitionalDifferent() ||
                    !aTInfo.isTransitionalDifferent() ||
                    !uNInfo.isTransitionalDifferent() ||
                    !uTInfo.isTransitionalDifferent() ||
                    !aNLInfo.isTransitionalDifferent() ||
                    !aTLInfo.isTransitionalDifferent() ||
                    !uNLInfo.isTransitionalDifferent() ||
                    !uTLInfo.isTransitionalDifferent()
                ) {
                    errln(String.format("%s.process([%d] %s) !isTransitionalDifferent()",
                                        testCase.o, i, testCase.s));
                    continue;
                }
                if( UTF16Plus.equal(aN, aT) || UTF16Plus.equal(uN, uT) ||
                    UTF16Plus.equal(aNL, aTL) || UTF16Plus.equal(uNL, uTL)
                ) {
                    errln(String.format("N.process([%d] %s) vs. T.process() same result strings",
                                        i, testCase.s));
                    continue;
                }
            }
        }
    }

    private final IDNA trans, nontrans;

    private static final EnumSet<IDNA.Error> severeErrors=EnumSet.of(
        IDNA.Error.LEADING_COMBINING_MARK,
        IDNA.Error.DISALLOWED,
        IDNA.Error.PUNYCODE,
        IDNA.Error.LABEL_HAS_DOT,
        IDNA.Error.INVALID_ACE_LABEL);
    private static final EnumSet<IDNA.Error> lengthErrors=EnumSet.of(
            IDNA.Error.EMPTY_LABEL,
            IDNA.Error.LABEL_TOO_LONG,
            IDNA.Error.DOMAIN_NAME_TOO_LONG);

    private boolean hasError(IDNA.Info info, IDNA.Error error) {
        return info.getErrors().contains(error);
    }
    // assumes that certainErrors is not empty
    private boolean hasCertainErrors(Set<IDNA.Error> errors, Set<IDNA.Error> certainErrors) {
        return !errors.isEmpty() && !Collections.disjoint(errors, certainErrors);
    }
    private boolean hasCertainErrors(IDNA.Info info, Set<IDNA.Error> certainErrors) {
        return hasCertainErrors(info.getErrors(), certainErrors);
    }
    private boolean sameErrors(Set<IDNA.Error> a, Set<IDNA.Error> b) {
        return a.equals(b);
    }
    private boolean sameErrors(IDNA.Info a, IDNA.Info b) {
        return sameErrors(a.getErrors(), b.getErrors());
    }
    private boolean sameErrors(IDNA.Info a, Set<IDNA.Error> b) {
        return sameErrors(a.getErrors(), b);
    }

    private static boolean
    isASCII(CharSequence str) {
        int length=str.length();
        for(int i=0; i<length; ++i) {
            if(str.charAt(i)>=0x80) {
                return false;
            }
        }
        return true;
    }
}
