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