1aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/* GENERATED SOURCE. DO NOT MODIFY. */
2f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// © 2016 and later: Unicode, Inc. and others.
3f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License
4aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/*
5aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin *******************************************************************************
6aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Copyright (C) 2009, International Business Machines Corporation and         *
7aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * others. All Rights Reserved.                                                *
8aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin *******************************************************************************
9aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */
10aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinpackage android.icu.dev.test.stringprep;
11aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
12f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertimport org.junit.Test;
13f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
14aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.dev.test.TestFmwk;
15aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.text.StringPrep;
16aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.text.StringPrepParseException;
17aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
18aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/**
19aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * @author Michael Ow
20aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin *
21aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */
22aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinpublic class TestStringPrepProfiles extends TestFmwk {
23aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    /*
24aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     * The format of the test cases should be the following:
25aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     * {
26aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     *     Profile name
27aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     *     src string1
28aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     *     expected result1
29aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     *     src string2
30aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     *     expected result2
31aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     *     ...
32aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     * }
33aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     *
34aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     * *Note: For expected failures add FAIL to beginning of the source string and for expected result use "FAIL".
35aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     */
36aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    private static String[][] testCases = {
37aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        {
38aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "RFC4013_SASLPREP",
39aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "user:\u00A0\u0AC6\u1680\u00ADpassword1",
40aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "user: \u0AC6 password1"
41aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        },
42aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        {
43aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "RFC4011_MIB",
44aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "Policy\u034F\u200DBase\u0020d\u1806\u200C",
45aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "PolicyBase d"
46aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        },
47aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        {
48aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "RFC4505_TRACE",
49aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "Anony\u0020\u00A0mous\u3000\u0B9D\u034F\u00AD",
50aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "Anony\u0020\u00A0mous\u3000\u0B9D\u034F\u00AD"
51aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        },
52aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        {
53aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "RFC4518_LDAP",
54aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "Ldap\uFB01\u00ADTest\u0020\u00A0\u2062ing",
55aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "LdapfiTest  ing"
56aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        },
57aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        {
58aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "RFC4518_LDAP_CI",
59aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "Ldap\uFB01\u00ADTest\u0020\u00A0\u2062ing12345",
60aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "ldapfitest  ing12345"
61aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        },
62aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        {
63aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "RFC3920_RESOURCEPREP",
64aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "ServerXM\u2060\uFE00\uFE09PP s p ",
65aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "ServerXMPP s p "
66aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        },
67aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        {
68aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "RFC3920_NODEPREP",
69aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "Server\u200DXMPPGreEK\u03D0",
70aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "serverxmppgreek\u03B2"
71aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        },
72aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        {
73aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "RFC3722_ISCSI",
74aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "InternetSmallComputer\uFB01\u0032\u2075Interface",
75aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "internetsmallcomputerfi25interface",
76aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "FAILThisShouldFailBecauseOfThis\u002F",
77aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "FAIL"
78aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        },
79aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        {
80aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "RFC3530_NFS4_CS_PREP",
81aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "\u00ADUser\u2060Name@ \u06DDDOMAIN.com",
82aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "UserName@ \u06DDDOMAIN.com"
83aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        },
84aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        {
85aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "RFC3530_NFS4_CS_PREP_CI",
86aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "\u00ADUser\u2060Name@ \u06DDDOMAIN.com",
87aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "username@ \u06DDdomain.com"
88aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        },
89aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        {
90aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "RFC3530_NFS4_CIS_PREP",
91aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "AA\u200C\u200D @@DomAin.org",
92aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "aa @@domain.org"
93aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        },
94aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        {
95aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "RFC3530_NFS4_MIXED_PREP_PREFIX",
96aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "PrefixUser \u007F\uFB01End",
97aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "PrefixUser \u007FfiEnd"
98aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        },
99aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        {
100aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "RFC3530_NFS4_MIXED_PREP_SUFFIX",
101aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "SuffixDomain \u007F\uFB01EnD",
102aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            "suffixdomain \u007Ffiend"
103aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
104aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    };
105aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
106aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    private int getOptionFromProfileName(String profileName) {
107aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (profileName.equals("RFC4013_SASLPREP")) {
108aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            return StringPrep.RFC4013_SASLPREP;
109aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } else if (profileName.equals("RFC4011_MIB")) {
110aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            return StringPrep.RFC4011_MIB;
111aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } else if (profileName.equals("RFC4505_TRACE")) {
112aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            return StringPrep.RFC4505_TRACE;
113aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } else if (profileName.equals("RFC4518_LDAP")) {
114aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            return StringPrep.RFC4518_LDAP;
115aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } else if (profileName.equals("RFC4518_LDAP_CI")) {
116aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            return StringPrep.RFC4518_LDAP_CI;
117aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } else if (profileName.equals("RFC3920_RESOURCEPREP")) {
118aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            return StringPrep.RFC3920_RESOURCEPREP;
119aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } else if (profileName.equals("RFC3920_NODEPREP")) {
120aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            return StringPrep.RFC3920_NODEPREP;
121aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } else if (profileName.equals("RFC3722_ISCSI")) {
122aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            return StringPrep.RFC3722_ISCSI;
123aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } else if (profileName.equals("RFC3530_NFS4_CS_PREP")) {
124aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            return StringPrep.RFC3530_NFS4_CS_PREP;
125aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } else if (profileName.equals("RFC3530_NFS4_CS_PREP_CI")) {
126aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            return StringPrep.RFC3530_NFS4_CS_PREP_CI;
127aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } else if (profileName.equals("RFC3530_NFS4_CIS_PREP")) {
128aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            return StringPrep.RFC3530_NFS4_CIS_PREP;
129aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } else if (profileName.equals("RFC3530_NFS4_MIXED_PREP_PREFIX")) {
130aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            return StringPrep.RFC3530_NFS4_MIXED_PREP_PREFIX;
131aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } else if (profileName.equals("RFC3530_NFS4_MIXED_PREP_SUFFIX")) {
132aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            return StringPrep.RFC3530_NFS4_MIXED_PREP_SUFFIX;
133aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
134aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
135aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        // Should not happen.
136aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        return -1;
137aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
138aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
139f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
140aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestProfiles() {
141aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String profileName = null;
142aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        StringPrep sprep = null;
143aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String result = null;
144aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String src = null;
145aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String expected = null;
146aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
147aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        for (int i = 0; i < testCases.length; i++) {
148aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            for (int j = 0; j < testCases[i].length; j++) {
149aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                if (j == 0) {
150aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    profileName = testCases[i][j];
151aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
152aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    sprep = StringPrep.getInstance(getOptionFromProfileName(profileName));
153aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                } else {
154aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    src = testCases[i][j];
155aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    expected = testCases[i][++j];
156aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    try {
157aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        result = sprep.prepare(src, StringPrep.ALLOW_UNASSIGNED);
158aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        if (src.startsWith("FAIL")) {
159aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            errln("Failed: Expected error for Test[" + i +"] Profile: " + profileName);
160aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        } else if (!result.equals(expected)) {
161aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            errln("Failed: Test[" + i + "] Result string does not match expected string for StringPrep test for profile: " + profileName);
162aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        }
163aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    } catch (StringPrepParseException ex) {
164aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        if (!src.startsWith("FAIL")) {
165aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            errln("Failed: Test[" + i + "] StringPrep profile " + profileName + " got error: " + ex);
166aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        }
167aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    }
168aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
169aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
170aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
171aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
172aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin}
173