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) 2002-2010, International Business Machines
7aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin* Corporation and others.  All Rights Reserved.
8aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin**********************************************************************
9aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin* Author: Alan Liu
10aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin* Created: November 5 2002
11aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin* Since: ICU 2.4
12aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin**********************************************************************
13aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin*/
14aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinpackage android.icu.dev.test.lang;
15aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
16f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertimport org.junit.Test;
1705fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport org.junit.runner.RunWith;
1805fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport org.junit.runners.JUnit4;
19f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
20aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.dev.test.TestFmwk;
21aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.lang.UCharacter;
22aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.lang.UProperty;
232e13a2bdade5cd0a635f0bd89805931a6fd710daPete Gillinimport android.icu.testsharding.MainTestShard;
24aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
252e13a2bdade5cd0a635f0bd89805931a6fd710daPete Gillin@MainTestShard
2605fa7802d0874812c234a29745586677ee5837eaFredrik Roubert@RunWith(JUnit4.class)
27aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinpublic class UPropertyAliasesTest extends TestFmwk {
2805fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
29aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public UPropertyAliasesTest() {}
3005fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
31aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    /**
32aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     * Test the property names and property value names API.
33aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     */
34f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
35aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestPropertyNames() {
36aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        int p, v, choice, rev;
37aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        for (p=0; ; ++p) {
38aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            boolean sawProp = false;
39aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            for (choice=0; ; ++choice) {
40aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                String name = null;
41aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                try {
42aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    name = UCharacter.getPropertyName(p, choice);
43aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    if (!sawProp) log("prop " + p + ":");
44aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    String n = (name != null) ? ("\"" + name + '"') : "null";
45aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    log(" " + choice + "=" + n);
46aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    sawProp = true;
47aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                } catch (IllegalArgumentException e) {
48aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    if (choice > 0) break;
49aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
50aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                if (name != null) {
51aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    /* test reverse mapping */
52aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    rev = UCharacter.getPropertyEnum(name);
53aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    if (rev != p) {
54aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        errln("Property round-trip failure: " + p + " -> " +
55aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                              name + " -> " + rev);
56aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    }
57aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
58aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
59aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (sawProp) {
60aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                /* looks like a valid property; check the values */
61aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                String pname = UCharacter.getPropertyName(p, UProperty.NameChoice.LONG);
62aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                int max = 0;
63aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                if (p == UProperty.CANONICAL_COMBINING_CLASS) {
64aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    max = 255;
65aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                } else if (p == UProperty.GENERAL_CATEGORY_MASK) {
66aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    /* it's far too slow to iterate all the way up to
67aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                       the real max, U_GC_P_MASK */
68aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    max = 0x1000; // U_GC_NL_MASK;
69aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                } else if (p == UProperty.BLOCK) {
70aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    /* UBlockCodes, unlike other values, start at 1 */
71aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    max = 1;
72aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
73aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                logln("");
74aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                for (v=-1; ; ++v) {
75aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    boolean sawValue = false;
76aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    for (choice=0; ; ++choice) {
77aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        String vname = null;
78aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        try {
79aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            vname = UCharacter.getPropertyValueName(p, v, choice);
80aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            String n = (vname != null) ? ("\"" + vname + '"') : "null";
81aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            if (!sawValue) log(" " + pname + ", value " + v + ":");
82aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            log(" " + choice + "=" + n);
83aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            sawValue = true;
84aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        }
85aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        catch (IllegalArgumentException e) {
86aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            if (choice>0) break;
87aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        }
88aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        if (vname != null) {
89aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            /* test reverse mapping */
90aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            rev = UCharacter.getPropertyValueEnum(p, vname);
91aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            if (rev != v) {
92aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                errln("Value round-trip failure (" + pname +
93aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                      "): " + v + " -> " +
94aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                      vname + " -> " + rev);
95aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            }
96aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        }
97aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    }
98aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    if (sawValue) {
99aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        logln("");
100aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    }
101aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    if (!sawValue && v>=max) break;
102aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
103aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
104aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (!sawProp) {
105aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                if (p>=UProperty.STRING_LIMIT) {
106aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    break;
107aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                } else if (p>=UProperty.DOUBLE_LIMIT) {
108aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    p = UProperty.STRING_START - 1;
109aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                } else if (p>=UProperty.MASK_LIMIT) {
110aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    p = UProperty.DOUBLE_START - 1;
111aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                } else if (p>=UProperty.INT_LIMIT) {
112aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    p = UProperty.MASK_START - 1;
113aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                } else if (p>=UProperty.BINARY_LIMIT) {
114aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    p = UProperty.INT_START - 1;
115aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
116aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
117aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
11805fa7802d0874812c234a29745586677ee5837eaFredrik Roubert
119aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        int i = UCharacter.getIntPropertyMinValue(
120aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                        UProperty.CANONICAL_COMBINING_CLASS);
121aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
122aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            for (; i <= UCharacter.getIntPropertyMaxValue(
123aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                          UProperty.CANONICAL_COMBINING_CLASS);
12405fa7802d0874812c234a29745586677ee5837eaFredrik Roubert                 i ++) {
125aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                 UCharacter.getPropertyValueName(
126aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                           UProperty.CANONICAL_COMBINING_CLASS,
127aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                           i, UProperty.NameChoice.LONG);
128aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
12905fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        }
130aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        catch (IllegalArgumentException e) {
13105fa7802d0874812c234a29745586677ee5837eaFredrik Roubert            errln("0x" + Integer.toHexString(i)
132aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                  + " should have a null property value name");
133aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
134aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
135aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
136f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
137aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestUnknownPropertyNames() {
138aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
139aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            int p = UCharacter.getPropertyEnum("??");
140aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("UCharacter.getPropertyEnum(??) returned " + p +
141aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                  " rather than throwing an exception");
142aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalArgumentException e) {
143aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            // ok
144aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
145aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
146aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            int p = UCharacter.getPropertyValueEnum(UProperty.LINE_BREAK, "?!");
147aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("UCharacter.getPropertyValueEnum(UProperty.LINE_BREAK, ?!) returned " + p +
148aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                  " rather than throwing an exception");
149aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalArgumentException e) {
150aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            // ok
151aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
152aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
153aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin}
154