17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*
27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2009, International Business Machines Corporation and         *
47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved.                                                *
57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.stringprep;
87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk;
107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.StringPrep;
117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.StringPrepParseException;
127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/**
147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @author Michael Ow
157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *
167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class TestStringPrepProfiles extends TestFmwk {
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static void main(String[] args) throws Exception {
197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        new TestStringPrepProfiles().run(args);
207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*
237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * The format of the test cases should be the following:
247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * {
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *     Profile name
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *     src string1
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *     expected result1
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *     src string2
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *     expected result2
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *     ...
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * }
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * *Note: For expected failures add FAIL to beginning of the source string and for expected result use "FAIL".
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static String[][] testCases = {
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "RFC4013_SASLPREP",
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "user:\u00A0\u0AC6\u1680\u00ADpassword1",
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "user: \u0AC6 password1"
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        },
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "RFC4011_MIB",
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "Policy\u034F\u200DBase\u0020d\u1806\u200C",
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "PolicyBase d"
457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        },
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "RFC4505_TRACE",
487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "Anony\u0020\u00A0mous\u3000\u0B9D\u034F\u00AD",
497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "Anony\u0020\u00A0mous\u3000\u0B9D\u034F\u00AD"
507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        },
517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "RFC4518_LDAP",
537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "Ldap\uFB01\u00ADTest\u0020\u00A0\u2062ing",
547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "LdapfiTest  ing"
557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        },
567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "RFC4518_LDAP_CI",
587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "Ldap\uFB01\u00ADTest\u0020\u00A0\u2062ing12345",
597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "ldapfitest  ing12345"
607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        },
617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "RFC3920_RESOURCEPREP",
637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "ServerXM\u2060\uFE00\uFE09PP s p ",
647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "ServerXMPP s p "
657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        },
667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "RFC3920_NODEPREP",
687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "Server\u200DXMPPGreEK\u03D0",
697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "serverxmppgreek\u03B2"
707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        },
717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "RFC3722_ISCSI",
737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "InternetSmallComputer\uFB01\u0032\u2075Interface",
747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "internetsmallcomputerfi25interface",
757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "FAILThisShouldFailBecauseOfThis\u002F",
767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "FAIL"
777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        },
787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "RFC3530_NFS4_CS_PREP",
807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "\u00ADUser\u2060Name@ \u06DDDOMAIN.com",
817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "UserName@ \u06DDDOMAIN.com"
827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        },
837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "RFC3530_NFS4_CS_PREP_CI",
857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "\u00ADUser\u2060Name@ \u06DDDOMAIN.com",
867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "username@ \u06DDdomain.com"
877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        },
887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "RFC3530_NFS4_CIS_PREP",
907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "AA\u200C\u200D @@DomAin.org",
917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "aa @@domain.org"
927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        },
937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "RFC3530_NFS4_MIXED_PREP_PREFIX",
957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "PrefixUser \u007F\uFB01End",
967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "PrefixUser \u007FfiEnd"
977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        },
987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        {
997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "RFC3530_NFS4_MIXED_PREP_SUFFIX",
1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "SuffixDomain \u007F\uFB01EnD",
1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "suffixdomain \u007Ffiend"
1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    };
1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private int getOptionFromProfileName(String profileName) {
1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (profileName.equals("RFC4013_SASLPREP")) {
1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return StringPrep.RFC4013_SASLPREP;
1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (profileName.equals("RFC4011_MIB")) {
1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return StringPrep.RFC4011_MIB;
1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (profileName.equals("RFC4505_TRACE")) {
1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return StringPrep.RFC4505_TRACE;
1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (profileName.equals("RFC4518_LDAP")) {
1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return StringPrep.RFC4518_LDAP;
1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (profileName.equals("RFC4518_LDAP_CI")) {
1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return StringPrep.RFC4518_LDAP_CI;
1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (profileName.equals("RFC3920_RESOURCEPREP")) {
1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return StringPrep.RFC3920_RESOURCEPREP;
1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (profileName.equals("RFC3920_NODEPREP")) {
1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return StringPrep.RFC3920_NODEPREP;
1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (profileName.equals("RFC3722_ISCSI")) {
1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return StringPrep.RFC3722_ISCSI;
1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (profileName.equals("RFC3530_NFS4_CS_PREP")) {
1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return StringPrep.RFC3530_NFS4_CS_PREP;
1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (profileName.equals("RFC3530_NFS4_CS_PREP_CI")) {
1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return StringPrep.RFC3530_NFS4_CS_PREP_CI;
1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (profileName.equals("RFC3530_NFS4_CIS_PREP")) {
1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return StringPrep.RFC3530_NFS4_CIS_PREP;
1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (profileName.equals("RFC3530_NFS4_MIXED_PREP_PREFIX")) {
1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return StringPrep.RFC3530_NFS4_MIXED_PREP_PREFIX;
1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (profileName.equals("RFC3530_NFS4_MIXED_PREP_SUFFIX")) {
1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return StringPrep.RFC3530_NFS4_MIXED_PREP_SUFFIX;
1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Should not happen.
1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return -1;
1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestProfiles() {
1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String profileName = null;
1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        StringPrep sprep = null;
1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String result = null;
1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String src = null;
1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String expected = null;
1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (int i = 0; i < testCases.length; i++) {
1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            for (int j = 0; j < testCases[i].length; j++) {
1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                if (j == 0) {
1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    profileName = testCases[i][j];
1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    sprep = StringPrep.getInstance(getOptionFromProfileName(profileName));
1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                } else {
1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    src = testCases[i][j];
1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    expected = testCases[i][++j];
1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    try {
1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        result = sprep.prepare(src, StringPrep.ALLOW_UNASSIGNED);
1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        if (src.startsWith("FAIL")) {
1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                            errln("Failed: Expected error for Test[" + i +"] Profile: " + profileName);
1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        } else if (!result.equals(expected)) {
1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                            errln("Failed: Test[" + i + "] Result string does not match expected string for StringPrep test for profile: " + profileName);
1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        }
1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    } catch (StringPrepParseException ex) {
1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        if (!src.startsWith("FAIL")) {
1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                            errln("Failed: Test[" + i + "] StringPrep profile " + profileName + " got error: " + ex);
1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        }
1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    }
1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
171