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