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