17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*
27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert**********************************************************************
37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* Copyright (c) 2002-2010, International Business Machines
47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* Corporation and others.  All Rights Reserved.
57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert**********************************************************************
67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* Author: Alan Liu
77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* Created: November 5 2002
87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* Since: ICU 2.4
97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert**********************************************************************
107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert*/
117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.lang;
127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk;
147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.lang.UCharacter;
157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.lang.UProperty;
167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class UPropertyAliasesTest extends TestFmwk {
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public UPropertyAliasesTest() {}
207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static void main(String[] args) throws Exception {
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        new UPropertyAliasesTest().run(args);
237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Test the property names and property value names API.
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestPropertyNames() {
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int p, v, choice, rev;
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (p=0; ; ++p) {
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            boolean sawProp = false;
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            for (choice=0; ; ++choice) {
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                String name = null;
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                try {
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    name = UCharacter.getPropertyName(p, choice);
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    if (!sawProp) log("prop " + p + ":");
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    String n = (name != null) ? ("\"" + name + '"') : "null";
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    log(" " + choice + "=" + n);
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    sawProp = true;
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                } catch (IllegalArgumentException e) {
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    if (choice > 0) break;
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                if (name != null) {
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    /* test reverse mapping */
457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    rev = UCharacter.getPropertyEnum(name);
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    if (rev != p) {
477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        errln("Property round-trip failure: " + p + " -> " +
487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                              name + " -> " + rev);
497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    }
507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (sawProp) {
537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                /* looks like a valid property; check the values */
547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                String pname = UCharacter.getPropertyName(p, UProperty.NameChoice.LONG);
557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                int max = 0;
567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                if (p == UProperty.CANONICAL_COMBINING_CLASS) {
577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    max = 255;
587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                } else if (p == UProperty.GENERAL_CATEGORY_MASK) {
597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    /* it's far too slow to iterate all the way up to
607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                       the real max, U_GC_P_MASK */
617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    max = 0x1000; // U_GC_NL_MASK;
627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                } else if (p == UProperty.BLOCK) {
637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    /* UBlockCodes, unlike other values, start at 1 */
647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    max = 1;
657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                logln("");
677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                for (v=-1; ; ++v) {
687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    boolean sawValue = false;
697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    for (choice=0; ; ++choice) {
707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        String vname = null;
717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        try {
727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                            vname = UCharacter.getPropertyValueName(p, v, choice);
737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                            String n = (vname != null) ? ("\"" + vname + '"') : "null";
747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                            if (!sawValue) log(" " + pname + ", value " + v + ":");
757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                            log(" " + choice + "=" + n);
767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                            sawValue = true;
777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        }
787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        catch (IllegalArgumentException e) {
797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                            if (choice>0) break;
807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        }
817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        if (vname != null) {
827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                            /* test reverse mapping */
837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                            rev = UCharacter.getPropertyValueEnum(p, vname);
847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                            if (rev != v) {
857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                                errln("Value round-trip failure (" + pname +
867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                                      "): " + v + " -> " +
877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                                      vname + " -> " + rev);
887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                            }
897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        }
907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    }
917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    if (sawValue) {
927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        logln("");
937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    }
947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    if (!sawValue && v>=max) break;
957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (!sawProp) {
987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                if (p>=UProperty.STRING_LIMIT) {
997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    break;
1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                } else if (p>=UProperty.DOUBLE_LIMIT) {
1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    p = UProperty.STRING_START - 1;
1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                } else if (p>=UProperty.MASK_LIMIT) {
1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    p = UProperty.DOUBLE_START - 1;
1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                } else if (p>=UProperty.INT_LIMIT) {
1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    p = UProperty.MASK_START - 1;
1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                } else if (p>=UProperty.BINARY_LIMIT) {
1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    p = UProperty.INT_START - 1;
1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int i = UCharacter.getIntPropertyMinValue(
1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                                        UProperty.CANONICAL_COMBINING_CLASS);
1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            for (; i <= UCharacter.getIntPropertyMaxValue(
1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                                          UProperty.CANONICAL_COMBINING_CLASS);
1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                 i ++) {
1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                 UCharacter.getPropertyValueName(
1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                                           UProperty.CANONICAL_COMBINING_CLASS,
1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                                           i, UProperty.NameChoice.LONG);
1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        catch (IllegalArgumentException e) {
1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("0x" + Integer.toHexString(i)
1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                  + " should have a null property value name");
1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestUnknownPropertyNames() {
1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            int p = UCharacter.getPropertyEnum("??");
1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("UCharacter.getPropertyEnum(??) returned " + p +
1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                  " rather than throwing an exception");
1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch (IllegalArgumentException e) {
1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // ok
1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            int p = UCharacter.getPropertyValueEnum(UProperty.LINE_BREAK, "?!");
1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("UCharacter.getPropertyValueEnum(UProperty.LINE_BREAK, ?!) returned " + p +
1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                  " rather than throwing an exception");
1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch (IllegalArgumentException e) {
1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // ok
1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
146