UCharacterTest.java revision bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7
17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/** 2aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert ******************************************************************************* 3aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert * Copyright (C) 1996-2015, International Business Machines Corporation and 4aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert * others. All Rights Reserved. 5aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert ******************************************************************************* 6aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert */ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.lang; 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.BufferedReader; 11aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubertimport java.io.IOException; 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Arrays; 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Locale; 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk; 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestUtil; 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.Norm2AllModes; 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.Normalizer2Impl; 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.PatternProps; 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.UCharacterName; 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.Utility; 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.lang.UCharacter; 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.lang.UCharacterCategory; 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.lang.UCharacterDirection; 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.lang.UCharacterEnums; 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.lang.UProperty; 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.lang.UScript; 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.Normalizer2; 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.UTF16; 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.UnicodeSet; 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.UnicodeSetIterator; 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.RangeValueIterator; 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.ULocale; 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.ValueIterator; 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.VersionInfo; 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/** 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* Testing class for UCharacter 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* Mostly following the test cases for ICU 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* @author Syn Wee Quek 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* @since nov 04 2000 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert*/ 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic final class UCharacterTest extends TestFmwk 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert{ 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // private variables ============================================= 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 48bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Expected Unicode version. 49bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */ 50bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert private final VersionInfo VERSION_ = VersionInfo.getInstance(8); 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // constructor =================================================== 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Constructor 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public UCharacterTest() 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // public methods ================================================ 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void main(String[] arg) 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacterTest test = new UCharacterTest(); 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert test.run(arg); 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert catch (Exception e) 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert e.printStackTrace(); 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Testing the letter and number determination in UCharacter 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestLetterNumber() 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0x0041; i < 0x005B; i ++) 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isLetter(i)) 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(i) + " expected to be a letter"); 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0x0660; i < 0x066A; i ++) 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isLetter(i)) 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(i) + " expected not to be a letter"); 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0x0660; i < 0x066A; i ++) 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isDigit(i)) 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(i) + " expected to be a digit"); 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0x0041; i < 0x005B; i ++) 947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isLetterOrDigit(i)) 957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(i) + " expected not to be a digit"); 967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0x0660; i < 0x066A; i ++) 987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isLetterOrDigit(i)) 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(i) + 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "expected to be either a letter or a digit"); 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following checks work only starting from Unicode 4.0. 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Check the version number here. 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert VersionInfo version = UCharacter.getUnicodeVersion(); 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(version.getMajor()<4 || version.equals(VersionInfo.getInstance(4, 0, 1))) { 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Sanity check: 1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Verify that exactly the digit characters have decimal digit values. 1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * This assumption is used in the implementation of u_digit() 1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * (which checks nt=de) 1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * compared with the parallel java.lang.Character.digit() 1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * (which checks Nd). 1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * 1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * This was not true in Unicode 3.2 and earlier. 1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Unicode 4.0 fixed discrepancies. 1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Unicode 4.0.1 re-introduced problems in this area due to an 1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * unintentionally incomplete last-minute change. 1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String digitsPattern = "[:Nd:]"; 1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String decimalValuesPattern = "[:Numeric_Type=Decimal:]"; 1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet digits, decimalValues; 1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert digits= new UnicodeSet(digitsPattern); 1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert decimalValues=new UnicodeSet(decimalValuesPattern); 1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert compareUSets(digits, decimalValues, "[:Nd:]", "[:Numeric_Type=Decimal:]", true); 1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests for space determination in UCharacter 1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestSpaces() 1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int spaces[] = {0x0020, 0x00a0, 0x2000, 0x2001, 0x2005}; 1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int nonspaces[] = {0x0061, 0x0062, 0x0063, 0x0064, 0x0074}; 1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int whitespaces[] = {0x2008, 0x2009, 0x200a, 0x001c, 0x000c /* ,0x200b */}; // 0x200b was "Zs" in Unicode 4.0, but it is "Cf" in Unicode 4.1 1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int nonwhitespaces[] = {0x0061, 0x0062, 0x003c, 0x0028, 0x003f, 0x00a0, 0x2007, 0x202f, 0xfefe, 0x200b}; 1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int size = spaces.length; 1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < size; i ++) 1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isSpaceChar(spaces[i])) 1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(spaces[i]) + 1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected to be a space character"); 1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isSpaceChar(nonspaces[i])) 1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(nonspaces[i]) + 1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected not to be space character"); 1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isWhitespace(whitespaces[i])) 1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(whitespaces[i]) + 1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected to be a white space character"); 1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isWhitespace(nonwhitespaces[i])) 1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(nonwhitespaces[i]) + 1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected not to be a space character"); 1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Ok \\u" + hex(spaces[i]) + " and \\u" + 1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert hex(nonspaces[i]) + " and \\u" + hex(whitespaces[i]) + 1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " and \\u" + hex(nonwhitespaces[i])); 1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int patternWhiteSpace[] = {0x9, 0xd, 0x20, 0x85, 1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x200e, 0x200f, 0x2028, 0x2029}; 1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int nonPatternWhiteSpace[] = {0x8, 0xe, 0x21, 0x86, 0xa0, 0xa1, 1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x1680, 0x1681, 0x180e, 0x180f, 1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x1FFF, 0x2000, 0x200a, 0x200b, 1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x2010, 0x202f, 0x2030, 0x205f, 1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x2060, 0x3000, 0x3001}; 1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < patternWhiteSpace.length; i ++) { 1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!PatternProps.isWhiteSpace(patternWhiteSpace[i])) { 1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("\\u" + Utility.hex(patternWhiteSpace[i], 4) 1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + " expected to be a Pattern_White_Space"); 1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < nonPatternWhiteSpace.length; i ++) { 1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (PatternProps.isWhiteSpace(nonPatternWhiteSpace[i])) { 1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("\\u" + Utility.hex(nonPatternWhiteSpace[i], 4) 2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + " expected to be a non-Pattern_White_Space"); 2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO: propose public API for constants like uchar.h's U_GC_*_MASK 2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // (http://bugs.icu-project.org/trac/ticket/7461) 2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int GC_Z_MASK = 2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert (1 << UCharacter.SPACE_SEPARATOR) | 2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert (1 << UCharacter.LINE_SEPARATOR) | 2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert (1 << UCharacter.PARAGRAPH_SEPARATOR); 2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // UCharacter.isWhitespace(c) should be the same as Character.isWhitespace(). 2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // This uses logln() because Character.isWhitespace() differs between Java versions, thus 2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // it is not necessarily an error if there is a difference between 2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // particular Java and ICU versions. 2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // However, you need to run tests with -v to see the output. 2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Also note that, at least as of Unicode 5.2, 2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // there are no supplementary white space characters. 2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int c = 0; c <= 0xffff; ++c) { 2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean j = Character.isWhitespace(c); 2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean i = UCharacter.isWhitespace(c); 2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean u = UCharacter.isUWhiteSpace(c); 2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean z = (UCharacter.getIntPropertyValue(c, UProperty.GENERAL_CATEGORY_MASK) & 2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert GC_Z_MASK) != 0; 2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (j != i) { 2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(String.format( 2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "isWhitespace(U+%04x) difference: JDK %5b ICU %5b Unicode WS %5b Z Separator %5b", 2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c, j, i, u, z)); 2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else if (j || i || u || z) { 2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(String.format( 2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "isWhitespace(U+%04x) FYI: JDK %5b ICU %5b Unicode WS %5b Z Separator %5b", 2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c, j, i, u, z)); 2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (char c = 0; c <= 0xff; ++c) { 2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean j = Character.isSpace(c); 2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean i = UCharacter.isSpace(c); 2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean z = (UCharacter.getIntPropertyValue(c, UProperty.GENERAL_CATEGORY_MASK) & 2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert GC_Z_MASK) != 0; 2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (j != i) { 2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(String.format( 2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "isSpace(U+%04x) difference: JDK %5b ICU %5b Z Separator %5b", 2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert (int)c, j, i, z)); 2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else if (j || i || z) { 2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(String.format( 2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "isSpace(U+%04x) FYI: JDK %5b ICU %5b Z Separator %5b", 2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert (int)c, j, i, z)); 2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test various implementations of Pattern_Syntax & Pattern_White_Space. 2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestPatternProperties() { 2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet syn_pp = new UnicodeSet(); 2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet syn_prop = new UnicodeSet("[:Pattern_Syntax:]"); 2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet syn_list = new UnicodeSet( 2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "[!-/\\:-@\\[-\\^`\\{-~"+ 2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u00A1-\u00A7\u00A9\u00AB\u00AC\u00AE\u00B0\u00B1\u00B6\u00BB\u00BF\u00D7\u00F7"+ 2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u2010-\u2027\u2030-\u203E\u2041-\u2053\u2055-\u205E\u2190-\u245F\u2500-\u2775"+ 2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u2794-\u2BFF\u2E00-\u2E7F\u3001-\u3003\u3008-\u3020\u3030\uFD3E\uFD3F\uFE45\uFE46]"); 2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet ws_pp = new UnicodeSet(); 2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet ws_prop = new UnicodeSet("[:Pattern_White_Space:]"); 2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet ws_list = new UnicodeSet("[\\u0009-\\u000D\\ \\u0085\\u200E\\u200F\\u2028\\u2029]"); 2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet syn_ws_pp = new UnicodeSet(); 2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet syn_ws_prop = new UnicodeSet(syn_prop).addAll(ws_prop); 2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int c=0; c<=0xffff; ++c) { 2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(PatternProps.isSyntax(c)) { 2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert syn_pp.add(c); 2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(PatternProps.isWhiteSpace(c)) { 2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ws_pp.add(c); 2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(PatternProps.isSyntaxOrWhiteSpace(c)) { 2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert syn_ws_pp.add(c); 2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert compareUSets(syn_pp, syn_prop, 2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "PatternProps.isSyntax()", "[:Pattern_Syntax:]", true); 2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert compareUSets(syn_pp, syn_list, 2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "PatternProps.isSyntax()", "[Pattern_Syntax ranges]", true); 2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert compareUSets(ws_pp, ws_prop, 2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "PatternProps.isWhiteSpace()", "[:Pattern_White_Space:]", true); 2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert compareUSets(ws_pp, ws_list, 2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "PatternProps.isWhiteSpace()", "[Pattern_White_Space ranges]", true); 2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert compareUSets(syn_ws_pp, syn_ws_prop, 2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "PatternProps.isSyntaxOrWhiteSpace()", 2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "[[:Pattern_Syntax:][:Pattern_White_Space:]]", true); 2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests for defined and undefined characters 2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestDefined() 2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int undefined[] = {0xfff1, 0xfff7, 0xfa6e}; 2977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int defined[] = {0x523E, 0x004f88, 0x00fffd}; 2987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int size = undefined.length; 3007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < size; i ++) 3017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 3027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isDefined(undefined[i])) 3037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 3047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(undefined[i]) + 3057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected not to be defined"); 3067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 3077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isDefined(defined[i])) 3097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 3107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(defined[i]) + " expected defined"); 3117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 3127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 3177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests for base characters and their cellwidth 3187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 3197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestBase() 3207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 3217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int base[] = {0x0061, 0x000031, 0x0003d2}; 3227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int nonbase[] = {0x002B, 0x000020, 0x00203B}; 3237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int size = base.length; 3247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < size; i ++) 3257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 3267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isBaseForm(nonbase[i])) 3277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 3287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(nonbase[i]) + 3297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected not to be a base character"); 3307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 3317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isBaseForm(base[i])) 3337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 3347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(base[i]) + 3357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected to be a base character"); 3367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 3377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 3427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests for digit characters 3437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 3447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestDigits() 3457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 3467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int digits[] = {0x0030, 0x000662, 0x000F23, 0x000ED5, 0x002160}; 3477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //special characters not in the properties table 3497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int digits2[] = {0x3007, 0x004e00, 0x004e8c, 0x004e09, 0x0056d8, 3507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x004e94, 0x00516d, 0x4e03, 0x00516b, 0x004e5d}; 3517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int nondigits[] = {0x0010, 0x000041, 0x000122, 0x0068FE}; 3527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int digitvalues[] = {0, 2, 3, 5, 1}; 3547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int digitvalues2[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 3557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int size = digits.length; 3577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < size; i ++) { 3587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isDigit(digits[i]) && 3597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.digit(digits[i]) != digitvalues[i]) 3607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 3617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(digits[i]) + 3627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected digit with value " + digitvalues[i]); 3637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 3647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert size = nondigits.length; 3677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < size; i ++) 3687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isDigit(nondigits[i])) 3697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 3707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(nondigits[i]) + " expected nondigit"); 3717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 3727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert size = digits2.length; 3757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < 10; i ++) { 3767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isDigit(digits2[i]) && 3777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.digit(digits2[i]) != digitvalues2[i]) 3787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 3797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(digits2[i]) + 3807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected digit with value " + digitvalues2[i]); 3817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 3827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 3877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests for numeric characters 3887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 3897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestNumeric() 3907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 3917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.getNumericValue(0x00BC) != -2) { 3927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Numeric value of 0x00BC expected to be -2"); 3937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = '0'; i < '9'; i ++) { 3967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int n1 = UCharacter.getNumericValue(i); 3977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert double n2 = UCharacter.getUnicodeNumericValue(i); 3987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (n1 != n2 || n1 != (i - '0')) { 3997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Numeric value of " + (char)i + " expected to be " + 4007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert (i - '0')); 4017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 'A'; i < 'F'; i ++) { 4047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int n1 = UCharacter.getNumericValue(i); 4057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert double n2 = UCharacter.getUnicodeNumericValue(i); 4067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (n2 != UCharacter.NO_NUMERIC_VALUE || n1 != (i - 'A' + 10)) { 4077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Numeric value of " + (char)i + " expected to be " + 4087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert (i - 'A' + 10)); 4097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0xFF21; i < 0xFF26; i ++) { 4127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // testing full wideth latin characters A-F 4137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int n1 = UCharacter.getNumericValue(i); 4147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert double n2 = UCharacter.getUnicodeNumericValue(i); 4157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (n2 != UCharacter.NO_NUMERIC_VALUE || n1 != (i - 0xFF21 + 10)) { 4167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Numeric value of " + (char)i + " expected to be " + 4177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert (i - 0xFF21 + 10)); 4187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // testing han numbers 4217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int han[] = {0x96f6, 0, 0x58f9, 1, 0x8cb3, 2, 0x53c3, 3, 4227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x8086, 4, 0x4f0d, 5, 0x9678, 6, 0x67d2, 7, 4237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x634c, 8, 0x7396, 9, 0x5341, 10, 0x62fe, 10, 4247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x767e, 100, 0x4f70, 100, 0x5343, 1000, 0x4edf, 1000, 4257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x824c, 10000, 0x5104, 100000000}; 4267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < han.length; i += 2) { 4277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.getHanNumericValue(han[i]) != han[i + 1]) { 4287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Numeric value of \\u" + 4297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(han[i]) + " expected to be " + 4307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert han[i + 1]); 4317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 4367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests for version 4377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 4387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestVersion() 4397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 4407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.getUnicodeVersion().equals(VERSION_)) 4417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL expected: " + VERSION_ + " got: " + UCharacter.getUnicodeVersion()); 4427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 4457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests for control characters 4467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 4477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestISOControl() 4487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 4497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int control[] = {0x001b, 0x000097, 0x000082}; 4507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int noncontrol[] = {0x61, 0x000031, 0x0000e2}; 4517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int size = control.length; 4537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < size; i ++) 4547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 4557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isISOControl(control[i])) 4567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 4577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL 0x" + Integer.toHexString(control[i]) + 4587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected to be a control character"); 4597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 4607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isISOControl(noncontrol[i])) 4627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 4637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL 0x" + Integer.toHexString(noncontrol[i]) + 4647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected to be not a control character"); 4657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 4667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Ok 0x" + Integer.toHexString(control[i]) + " and 0x" + 4697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(noncontrol[i])); 4707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 4747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test Supplementary 4757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 4767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestSupplementary() 4777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 4787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < 0x10000; i ++) { 4797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isSupplementary(i)) { 4807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Codepoint \\u" + Integer.toHexString(i) + 4817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " is not supplementary"); 4827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0x10000; i < 0x10FFFF; i ++) { 4857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isSupplementary(i)) { 4867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Codepoint \\u" + Integer.toHexString(i) + 4877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " is supplementary"); 4887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 4937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test mirroring 4947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 4957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestMirror() 4967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 4977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!(UCharacter.isMirrored(0x28) && UCharacter.isMirrored(0xbb) && 4987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.isMirrored(0x2045) && UCharacter.isMirrored(0x232a) 4997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert && !UCharacter.isMirrored(0x27) && 5007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert !UCharacter.isMirrored(0x61) && !UCharacter.isMirrored(0x284) 5017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert && !UCharacter.isMirrored(0x3400))) { 5027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("isMirrored() does not work correctly"); 5037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!(UCharacter.getMirror(0x3c) == 0x3e && 5067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getMirror(0x5d) == 0x5b && 5077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getMirror(0x208d) == 0x208e && 5087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getMirror(0x3017) == 0x3016 && 5097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getMirror(0xbb) == 0xab && 5117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getMirror(0x2215) == 0x29F5 && 5127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getMirror(0x29F5) == 0x2215 && /* large delta between the code points */ 5137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getMirror(0x2e) == 0x2e && 5157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getMirror(0x6f3) == 0x6f3 && 5167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getMirror(0x301c) == 0x301c && 5177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getMirror(0xa4ab) == 0xa4ab && 5187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* see Unicode Corrigendum #6 at http://www.unicode.org/versions/corrigendum6.html */ 5207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getMirror(0x2018) == 0x2018 && 5217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getMirror(0x201b) == 0x201b && 5227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getMirror(0x301d) == 0x301d)) { 5237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("getMirror() does not work correctly"); 5247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* verify that Bidi_Mirroring_Glyph roundtrips */ 5277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet set=new UnicodeSet("[:Bidi_Mirrored:]"); 5287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSetIterator iter=new UnicodeSetIterator(set); 5297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int start, end, c2, c3; 5307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while(iter.nextRange() && (start=iter.codepoint)>=0) { 5317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert end=iter.codepointEnd; 5327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert do { 5337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c2=UCharacter.getMirror(start); 5347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c3=UCharacter.getMirror(c2); 5357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(c3!=start) { 5367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("getMirror() does not roundtrip: U+"+hex(start)+"->U+"+hex(c2)+"->U+"+hex(c3)); 5377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c3=UCharacter.getBidiPairedBracket(start); 5397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getIntPropertyValue(start, UProperty.BIDI_PAIRED_BRACKET_TYPE)==UCharacter.BidiPairedBracketType.NONE) { 5407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(c3!=start) { 5417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("u_getBidiPairedBracket(U+"+hex(start)+") != self for bpt(c)==None"); 5427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 5447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(c3!=c2) { 5457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("u_getBidiPairedBracket(U+"+hex(start)+") != U+"+hex(c2)+" = bmg(c)'"); 5467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } while(++start<=end); 5497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // verify that Unicode Corrigendum #6 reverts mirrored status of the following 5527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isMirrored(0x2018) || 5537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.isMirrored(0x201d) || 5547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.isMirrored(0x201f) || 5557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.isMirrored(0x301e)) { 5567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Unicode Corrigendum #6 conflict, one or more of 2018/201d/201f/301e has mirrored property"); 5577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 5617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests for printable characters 5627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 5637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestPrint() 5647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 5657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int printable[] = {0x0042, 0x00005f, 0x002014}; 5667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int nonprintable[] = {0x200c, 0x00009f, 0x00001b}; 5677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int size = printable.length; 5697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < size; i ++) 5707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 5717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isPrintable(printable[i])) 5727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 5737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(printable[i]) + 5747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected to be a printable character"); 5757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 5767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isPrintable(nonprintable[i])) 5787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 5797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(nonprintable[i]) + 5807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected not to be a printable character"); 5817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 5827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Ok \\u" + hex(printable[i]) + " and \\u" + 5847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert hex(nonprintable[i])); 5857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // test all ISO 8 controls 5887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int ch = 0; ch <= 0x9f; ++ ch) { 5897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (ch == 0x20) { 5907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // skip ASCII graphic characters and continue with DEL 5917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ch = 0x7f; 5927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isPrintable(ch)) { 5947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Fail \\u" + hex(ch) + 5957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " is a ISO 8 control character hence not printable\n"); 5967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* test all Latin-1 graphic characters */ 6007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int ch = 0x20; ch <= 0xff; ++ ch) { 6017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (ch == 0x7f) { 6027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ch = 0xa0; 6037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isPrintable(ch) 6057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert && ch != 0x00AD/* Unicode 4.0 changed the defintion of soft hyphen to be a Cf*/) { 6067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Fail \\u" + hex(ch) + 6077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " is a Latin-1 graphic character\n"); 6087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 6137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Testing for identifier characters 6147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 6157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestIdentifier() 6167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 6177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int unicodeidstart[] = {0x0250, 0x0000e2, 0x000061}; 6187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int nonunicodeidstart[] = {0x2000, 0x00000a, 0x002019}; 6197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int unicodeidpart[] = {0x005f, 0x000032, 0x000045}; 6207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int nonunicodeidpart[] = {0x2030, 0x0000a3, 0x000020}; 6217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int idignore[] = {0x0006, 0x0010, 0x206b}; 6227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int nonidignore[] = {0x0075, 0x0000a3, 0x000061}; 6237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int size = unicodeidstart.length; 6257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < size; i ++) 6267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 6277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isUnicodeIdentifierStart(unicodeidstart[i])) 6287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 6297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(unicodeidstart[i]) + 6307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected to be a unicode identifier start character"); 6317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 6327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isUnicodeIdentifierStart(nonunicodeidstart[i])) 6347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 6357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(nonunicodeidstart[i]) + 6367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected not to be a unicode identifier start " + 6377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "character"); 6387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 6397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isUnicodeIdentifierPart(unicodeidpart[i])) 6417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 6427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(unicodeidpart[i]) + 6437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected to be a unicode identifier part character"); 6447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 6457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isUnicodeIdentifierPart(nonunicodeidpart[i])) 6477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 6487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(nonunicodeidpart[i]) + 6497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected not to be a unicode identifier part " + 6507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "character"); 6517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 6527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isIdentifierIgnorable(idignore[i])) 6547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 6557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(idignore[i]) + 6567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected to be a ignorable unicode character"); 6577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 6587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isIdentifierIgnorable(nonidignore[i])) 6607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 6617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(nonidignore[i]) + 6627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected not to be a ignorable unicode character"); 6637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 6647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Ok \\u" + hex(unicodeidstart[i]) + " and \\u" + 6667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert hex(nonunicodeidstart[i]) + " and \\u" + 6677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert hex(unicodeidpart[i]) + " and \\u" + 6687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert hex(nonunicodeidpart[i]) + " and \\u" + 6697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert hex(idignore[i]) + " and \\u" + hex(nonidignore[i])); 6707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 6747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests for the character types, direction.<br> 6757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * This method reads in UnicodeData.txt file for testing purposes. A 6767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * default path is provided relative to the src path, however the user 6777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * could set a system property to change the directory path.<br> 6787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * e.g. java -DUnicodeData="data_directory_path" 6797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * com.ibm.icu.dev.test.lang.UCharacterTest 6807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 6817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestUnicodeData() 6827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 6837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // this is the 2 char category types used in the UnicodeData file 6847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final String TYPE = 6857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "LuLlLtLmLoMnMeMcNdNlNoZsZlZpCcCfCoCsPdPsPePcPoSmScSkSoPiPf"; 6867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // directorionality types used in the UnicodeData file 6887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // padded by spaces to make each type size 4 6897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final String DIR = 6907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "L R EN ES ET AN CS B S WS ON LRE LRO AL RLE RLO PDF NSM BN FSI LRI RLI PDI "; 6917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Normalizer2 nfc = Normalizer2.getNFCInstance(); 6937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Normalizer2 nfkc = Normalizer2.getNFKCInstance(); 6947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 695aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert BufferedReader input = null; 696aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert try { 697aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert input = TestUtil.getDataReader("unicode/UnicodeData.txt"); 6987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int numErrors = 0; 6997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (;;) { 7017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String s = input.readLine(); 7027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(s == null) { 7037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 7047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(s.length()<4 || s.startsWith("#")) { 7067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert continue; 7077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] fields = s.split(";", -1); 7097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assert (fields.length == 15 ) : "Number of fields is " + fields.length + ": " + s; 7107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int ch = Integer.parseInt(fields[0], 16); 7127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // testing the general category 7147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int type = TYPE.indexOf(fields[2]); 7157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (type < 0) 7167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert type = 0; 7177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert else 7187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert type = (type >> 1) + 1; 7197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.getType(ch) != type) 7207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 7217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(ch) + " expected type " + type); 7227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 7237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.getIntPropertyValue(ch, 7267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UProperty.GENERAL_CATEGORY_MASK) != (1 << type)) { 7277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: getIntPropertyValue(\\u" + 7287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(ch) + 7297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ", UProperty.GENERAL_CATEGORY_MASK) != " + 7307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "getMask(getType(ch))"); 7317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // testing combining class 7347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int cc = Integer.parseInt(fields[3]); 7357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.getCombiningClass(ch) != cc) 7367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 7377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(ch) + " expected combining " + 7387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "class " + cc); 7397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 7407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (nfkc.getCombiningClass(ch) != cc) 7427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 7437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(ch) + " expected NFKC combining " + 7447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "class " + cc); 7457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 7467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // testing the direction 7497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String d = fields[4]; 7507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (d.length() == 1) 7517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert d = d + " "; 7527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int dir = DIR.indexOf(d) >> 2; 7547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.getDirection(ch) != dir) 7557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 7567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(ch) + 7577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected direction " + dir + " but got " + UCharacter.getDirection(ch)); 7587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 7597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert byte bdir = (byte)dir; 7627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.getDirectionality(ch) != bdir) 7637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 7647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(ch) + 7657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected directionality " + bdir + " but got " + 7667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getDirectionality(ch)); 7677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 7687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* get Decomposition_Type & Decomposition_Mapping, field 5 */ 7717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int dt; 7727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(fields[5].length()==0) { 7737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* no decomposition, except UnicodeData.txt omits Hangul syllable decompositions */ 7747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(ch==0xac00 || ch==0xd7a3) { 7757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert dt=UCharacter.DecompositionType.CANONICAL; 7767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 7777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert dt=UCharacter.DecompositionType.NONE; 7787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 7807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert d=fields[5]; 7817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert dt=-1; 7827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(d.charAt(0)=='<') { 7837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int end=d.indexOf('>', 1); 7847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(end>=0) { 7857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert dt=UCharacter.getPropertyValueEnum(UProperty.DECOMPOSITION_TYPE, d.substring(1, end)); 7867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while(d.charAt(++end)==' ') {} // skip spaces 7877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert d=d.substring(end); 7887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 7907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert dt=UCharacter.DecompositionType.CANONICAL; 7917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String dm; 7947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(dt>UCharacter.DecompositionType.NONE) { 7957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(ch==0xac00) { 7967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert dm="\u1100\u1161"; 7977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else if(ch==0xd7a3) { 7987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert dm="\ud788\u11c2"; 7997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 8007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] dmChars=d.split(" +"); 8017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringBuilder dmb=new StringBuilder(dmChars.length); 8027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(String dmc : dmChars) { 8037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert dmb.appendCodePoint(Integer.parseInt(dmc, 16)); 8047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert dm=dmb.toString(); 8067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 8087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert dm=null; 8097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(dt<0) { 8117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln(String.format("error in UnicodeData.txt: syntax error in U+%04lX decomposition field", ch)); 8127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 8137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int i=UCharacter.getIntPropertyValue(ch, UProperty.DECOMPOSITION_TYPE); 8157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals( 8167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String.format("error: UCharacter.getIntPropertyValue(U+%04x, UProperty.DECOMPOSITION_TYPE) is wrong", ch), 8177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert dt, i); 8187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Expect Decomposition_Mapping=nfkc.getRawDecomposition(c). */ 8197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String mapping=nfkc.getRawDecomposition(ch); 8207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals( 8217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String.format("error: nfkc.getRawDecomposition(U+%04x) is wrong", ch), 8227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert dm, mapping); 8237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* For canonical decompositions only, expect Decomposition_Mapping=nfc.getRawDecomposition(c). */ 8247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(dt!=UCharacter.DecompositionType.CANONICAL) { 8257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert dm=null; 8267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert mapping=nfc.getRawDecomposition(ch); 8287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals( 8297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String.format("error: nfc.getRawDecomposition(U+%04x) is wrong", ch), 8307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert dm, mapping); 8317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* recompose */ 8327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(dt==UCharacter.DecompositionType.CANONICAL 8337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert && !UCharacter.hasBinaryProperty(ch, UProperty.FULL_COMPOSITION_EXCLUSION)) { 8347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int a=dm.codePointAt(0); 8357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int b=dm.codePointBefore(dm.length()); 8367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int composite=nfc.composePair(a, b); 8377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals( 8387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String.format( 8397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "error: nfc U+%04X decomposes to U+%04X+U+%04X "+ 8407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "but does not compose back (instead U+%04X)", 8417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ch, a, b, composite), 8427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ch, composite); 8437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 8447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Note: NFKC has fewer round-trip mappings than NFC, 8457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * so we can't just test nfkc.composePair(a, b) here without further data. 8467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 8477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 8497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // testing iso comment 8507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 8517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String isocomment = fields[11]; 8527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String comment = UCharacter.getISOComment(ch); 8537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (comment == null) { 8547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert comment = ""; 8557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!comment.equals(isocomment)) { 8577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(ch) + 8587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected iso comment " + isocomment); 8597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 8607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }catch(Exception e){ 8627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(e.getMessage().indexOf("unames.icu") >= 0){ 8637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert numErrors++; 8647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }else{ 8657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert throw e; 8667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 8697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String upper = fields[12]; 8707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int tempchar = ch; 8717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (upper.length() > 0) { 8727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert tempchar = Integer.parseInt(upper, 16); 8737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int resultCp = UCharacter.toUpperCase(ch); 8757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (resultCp != tempchar) { 8767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + Utility.hex(ch, 4) 8777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + " expected uppercase \\u" 8787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + Utility.hex(tempchar, 4) 8797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + " but got \\u" 8807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + Utility.hex(resultCp, 4)); 8817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 8827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 8847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String lower = fields[13]; 8857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert tempchar = ch; 8867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (lower.length() > 0) { 8877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert tempchar = Integer.parseInt(lower, 16); 8887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.toLowerCase(ch) != tempchar) { 8907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + Utility.hex(ch, 4) 8917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + " expected lowercase \\u" 8927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + Utility.hex(tempchar, 4)); 8937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 8947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 8957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 8967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 8977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 8987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String title = fields[14]; 8997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert tempchar = ch; 9007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (title.length() > 0) { 9017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert tempchar = Integer.parseInt(title, 16); 9027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.toTitleCase(ch) != tempchar) { 9047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + Utility.hex(ch, 4) 9057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + " expected titlecase \\u" 9067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + Utility.hex(tempchar, 4)); 9077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 9087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(numErrors > 0){ 9117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert warnln("Could not find unames.icu"); 9127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 913aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert } catch (Exception e) { 9147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert e.printStackTrace(); 915aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert } finally { 916aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert if (input != null) { 917aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert try { 918aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert input.close(); 919aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert } catch (IOException ignored) { 920aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert } 921aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert } 9227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 9247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.UnicodeBlock.of(0x0041) 9257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert != UCharacter.UnicodeBlock.BASIC_LATIN 9267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || UCharacter.getIntPropertyValue(0x41, UProperty.BLOCK) 9277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert != UCharacter.UnicodeBlock.BASIC_LATIN.getID()) { 9287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.UnicodeBlock.of(\\u0041) property failed! " 9297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "Expected : " 9307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + UCharacter.UnicodeBlock.BASIC_LATIN.getID() + " got " 9317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + UCharacter.UnicodeBlock.of(0x0041)); 9327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 9347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // sanity check on repeated properties 9357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int ch = 0xfffe; ch <= 0x10ffff;) { 9367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int type = UCharacter.getType(ch); 9377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.getIntPropertyValue(ch, 9387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UProperty.GENERAL_CATEGORY_MASK) 9397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert != (1 << type)) { 9407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyValue(\\u" 9417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + Integer.toHexString(ch) 9427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + ", UProperty.GENERAL_CATEGORY_MASK) != " 9437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "getMask(getType())"); 9447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (type != UCharacterCategory.UNASSIGNED) { 9467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getType(\\u" + Utility.hex(ch, 4) 9477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + " != UCharacterCategory.UNASSIGNED (returns " 9487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + UCharacterCategory.toString(UCharacter.getType(ch)) 9497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + ")"); 9507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if ((ch & 0xffff) == 0xfffe) { 9527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ++ ch; 9537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert else { 9557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ch += 0xffff; 9567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 9597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // test that PUA is not "unassigned" 9607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int ch = 0xe000; ch <= 0x10fffd;) { 9617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int type = UCharacter.getType(ch); 9627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.getIntPropertyValue(ch, 9637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UProperty.GENERAL_CATEGORY_MASK) 9647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert != (1 << type)) { 9657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyValue(\\u" 9667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + Integer.toHexString(ch) 9677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + ", UProperty.GENERAL_CATEGORY_MASK) != " 9687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "getMask(getType())"); 9697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 9717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (type == UCharacterCategory.UNASSIGNED) { 9727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getType(\\u" 9737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + Utility.hex(ch, 4) 9747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + ") == UCharacterCategory.UNASSIGNED"); 9757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert else if (type != UCharacterCategory.PRIVATE_USE) { 9777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PUA override: UCharacter.getType(\\u" 9787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + Utility.hex(ch, 4) + ")=" + type); 9797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (ch == 0xf8ff) { 9817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ch = 0xf0000; 9827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert else if (ch == 0xffffd) { 9847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ch = 0x100000; 9857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert else { 9877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ++ ch; 9887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 9917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 9927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 9937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 9947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test for the character names 9957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 9967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestNames() 9977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 9987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 9997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int length = UCharacterName.INSTANCE.getMaxCharNameLength(); 10007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (length < 83) { // Unicode 3.2 max char name length 10017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("getMaxCharNameLength()=" + length + " is too short"); 10027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int c[] = {0x0061, //LATIN SMALL LETTER A 10057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x000284, //LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK 10067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x003401, //CJK UNIFIED IDEOGRAPH-3401 10077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x007fed, //CJK UNIFIED IDEOGRAPH-7FED 10087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x00ac00, //HANGUL SYLLABLE GA 10097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x00d7a3, //HANGUL SYLLABLE HIH 10107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x00d800, 0x00dc00, //LINEAR B SYLLABLE B008 A 10117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0xff08, //FULLWIDTH LEFT PARENTHESIS 10127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x00ffe5, //FULLWIDTH YEN SIGN 10137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x00ffff, //null 10147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x0023456 //CJK UNIFIED IDEOGRAPH-23456 10157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 10167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String name[] = { 10177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "LATIN SMALL LETTER A", 10187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK", 10197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "CJK UNIFIED IDEOGRAPH-3401", 10207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "CJK UNIFIED IDEOGRAPH-7FED", 10217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "HANGUL SYLLABLE GA", 10227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "HANGUL SYLLABLE HIH", 10237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "", 10247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "", 10257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "FULLWIDTH LEFT PARENTHESIS", 10267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "FULLWIDTH YEN SIGN", 10277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "", 10287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "CJK UNIFIED IDEOGRAPH-23456" 10297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 10307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String oldname[] = {"", "", "", 10317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "", 10327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "", "", "", "", "", "", 10337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "", ""}; 10347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String extendedname[] = {"LATIN SMALL LETTER A", 10357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK", 10367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "CJK UNIFIED IDEOGRAPH-3401", 10377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "CJK UNIFIED IDEOGRAPH-7FED", 10387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "HANGUL SYLLABLE GA", 10397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "HANGUL SYLLABLE HIH", 10407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<lead surrogate-D800>", 10417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<trail surrogate-DC00>", 10427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "FULLWIDTH LEFT PARENTHESIS", 10437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "FULLWIDTH YEN SIGN", 10447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "<noncharacter-FFFF>", 10457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "CJK UNIFIED IDEOGRAPH-23456"}; 10467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int size = c.length; 10487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String str; 10497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int uc; 10507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < size; i ++) 10527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 10537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // modern Unicode character name 10547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert str = UCharacter.getName(c[i]); 10557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if ((str == null && name[i].length() > 0) || 10567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert (str != null && !str.equals(name[i]))) 10577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 10587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(c[i]) + " expected name " + 10597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert name[i]); 10607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 10617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 1.0 Unicode character name 10647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert str = UCharacter.getName1_0(c[i]); 10657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if ((str == null && oldname[i].length() > 0) || 10667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert (str != null && !str.equals(oldname[i]))) 10677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 10687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(c[i]) + " expected 1.0 name " + 10697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert oldname[i]); 10707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 10717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // extended character name 10747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert str = UCharacter.getExtendedName(c[i]); 10757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (str == null || !str.equals(extendedname[i])) 10767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 10777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(c[i]) + " expected extended name " + 10787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert extendedname[i]); 10797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 10807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // retrieving unicode character from modern name 10837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert uc = UCharacter.getCharFromName(name[i]); 10847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (uc != c[i] && name[i].length() != 0) 10857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 10867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL " + name[i] + " expected character \\u" + 10877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert hex(c[i])); 10887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 10897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //retrieving unicode character from 1.0 name 10927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert uc = UCharacter.getCharFromName1_0(oldname[i]); 10937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (uc != c[i] && oldname[i].length() != 0) 10947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 10957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL " + oldname[i] + " expected 1.0 character \\u" + 10967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert hex(c[i])); 10977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 10987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 10997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //retrieving unicode character from 1.0 name 11017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert uc = UCharacter.getCharFromExtendedName(extendedname[i]); 11027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (uc != c[i] && i != 0 && (i == 1 || i == 6)) 11037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 11047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL " + extendedname[i] + 11057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " expected extended character \\u" + hex(c[i])); 11067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 11077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // test getName works with mixed-case names (new in 2.0) 11117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (0x61 != UCharacter.getCharFromName("LATin smALl letTER A")) { 11127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: 'LATin smALl letTER A' should result in character " 11137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "U+0061"); 11147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (getInclusion() >= 5) { 11177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // extra testing different from icu 11187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = UCharacter.MIN_VALUE; i < UCharacter.MAX_VALUE; i ++) 11197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 11207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert str = UCharacter.getName(i); 11217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (str != null && UCharacter.getCharFromName(str) != i) 11227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 11237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(i) + " " + str + 11247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " retrieval of name and vice versa" ); 11257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 11267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Test getCharNameCharacters 11317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (getInclusion() >= 10) { 11327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean map[] = new boolean[256]; 11337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet set = new UnicodeSet(1, 0); // empty set 11357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet dumb = new UnicodeSet(1, 0); // empty set 11367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // uprv_getCharNameCharacters() will likely return more lowercase 11387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // letters than actual character names contain because 11397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // it includes all the characters in lowercased names of 11407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // general categories, for the full possible set of extended names. 11417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacterName.INSTANCE.getCharNameCharacters(set); 11427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // build set the dumb (but sure-fire) way 11447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Arrays.fill(map, false); 11457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int maxLength = 0; 11477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int cp = 0; cp < 0x110000; ++ cp) { 11487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String n = UCharacter.getExtendedName(cp); 11497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int len = n.length(); 11507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (len > maxLength) { 11517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert maxLength = len; 11527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < len; ++ i) { 11557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char ch = n.charAt(i); 11567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!map[ch & 0xff]) { 11577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert dumb.add(ch); 11587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert map[ch & 0xff] = true; 11597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert length = UCharacterName.INSTANCE.getMaxCharNameLength(); 11647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (length != maxLength) { 11657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("getMaxCharNameLength()=" + length 11667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + " differs from the maximum length " + maxLength 11677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + " of all extended names"); 11687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // compare the sets. Where is my uset_equals?!! 11717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean ok = true; 11727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < 256; ++ i) { 11737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (set.contains(i) != dumb.contains(i)) { 11747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (0x61 <= i && i <= 0x7a // a-z 11757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert && set.contains(i) && !dumb.contains(i)) { 11767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // ignore lowercase a-z that are in set but not in dumb 11777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ok = true; 11787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert else { 11807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ok = false; 11817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 11827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern1 = set.toPattern(true); 11877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern2 = dumb.toPattern(true); 11887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 11897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!ok) { 11907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: getCharNameCharacters() returned " + pattern1 11917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + " expected " + pattern2 11927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + " (too many lowercase a-z are ok)"); 11937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 11947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Ok: getCharNameCharacters() returned " + pattern1); 11957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 11977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // improve code coverage 11987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String expected = "LATIN SMALL LETTER A|LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK|"+ 11997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "CJK UNIFIED IDEOGRAPH-3401|CJK UNIFIED IDEOGRAPH-7FED|HANGUL SYLLABLE GA|"+ 12007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "HANGUL SYLLABLE HIH|LINEAR B SYLLABLE B008 A|FULLWIDTH LEFT PARENTHESIS|"+ 12017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "FULLWIDTH YEN SIGN|"+ 12027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "null|"+ // getName returns null because 0xFFFF does not have a name, but has an extended name! 12037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "CJK UNIFIED IDEOGRAPH-23456"; 12047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String separator= "|"; 12057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String source = Utility.valueOf(c); 12067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String result = UCharacter.getName(source, separator); 12077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(!result.equals(expected)){ 12087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getName did not return the expected result.\n\t Expected: "+ expected+"\n\t Got: "+ result); 12097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }catch(IllegalArgumentException e){ 12127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(e.getMessage().indexOf("unames.icu") >= 0){ 12137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert warnln("Could not find unames.icu"); 12147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }else{ 12157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert throw e; 12167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestUCharFromNameUnderflow() { 12227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Ticket #10889: Underflow crash when there is no dash. 12237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int c = UCharacter.getCharFromExtendedName("<NO BREAK SPACE>"); 12247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(c >= 0) { 12257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getCharFromExtendedName(<NO BREAK SPACE>) = U+" + hex(c) + 12267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " but should fail (-1)"); 12277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Test related edge cases. 12307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c = UCharacter.getCharFromExtendedName("<-00a0>"); 12317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(c >= 0) { 12327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getCharFromExtendedName(<-00a0>) = U+" + hex(c) + 12337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " but should fail (-1)"); 12347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c = UCharacter.getCharFromExtendedName("<control->"); 12377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(c >= 0) { 12387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getCharFromExtendedName(<control->) = U+" + hex(c) + 12397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " but should fail (-1)"); 12407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert c = UCharacter.getCharFromExtendedName("<control-111111>"); 12437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(c >= 0) { 12447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getCharFromExtendedName(<control-111111>) = U+" + hex(c) + 12457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " but should fail (-1)"); 12467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 12507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Testing name iteration 12517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 12527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestNameIteration()throws Exception 12537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 12547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 12557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ValueIterator iterator = UCharacter.getExtendedNameIterator(); 12567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ValueIterator.Element element = new ValueIterator.Element(); 12577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ValueIterator.Element old = new ValueIterator.Element(); 12587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // testing subrange 12597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert iterator.setRange(-10, -5); 12607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (iterator.next(element)) { 12617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Fail, expected iterator to return false when range is set outside the meaningful range"); 12627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert iterator.setRange(0x110000, 0x111111); 12647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (iterator.next(element)) { 12657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Fail, expected iterator to return false when range is set outside the meaningful range"); 12667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 12687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert iterator.setRange(50, 10); 12697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Fail, expected exception when encountered invalid range"); 12707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 12717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert iterator.setRange(-10, 10); 12747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!iterator.next(element) || element.integer != 0) { 12757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Fail, expected iterator to return 0 when range start limit is set outside the meaningful range"); 12767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert iterator.setRange(0x10FFFE, 0x200000); 12797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int last = 0; 12807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (iterator.next(element)) { 12817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert last = element.integer; 12827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (last != 0x10FFFF) { 12847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Fail, expected iterator to return 0x10FFFF when range end limit is set outside the meaningful range"); 12857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 12877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert iterator = UCharacter.getNameIterator(); 12887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert iterator.setRange(0xF, 0x45); 12897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (iterator.next(element)) { 12907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (element.integer <= old.integer) { 12917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL next returned a less codepoint \\u" + 12927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(element.integer) + " than \\u" + 12937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(old.integer)); 12947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 12957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 12967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.getName(element.integer).equals(element.value)) 12977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 12987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL next codepoint \\u" + 12997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(element.integer) + 13007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " does not have the expected name " + 13017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getName(element.integer) + 13027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " instead have the name " + (String)element.value); 13037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 13047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert old.integer = element.integer; 13067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 13087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert iterator.reset(); 13097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert iterator.next(element); 13107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (element.integer != 0x20) { 13117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL reset in iterator"); 13127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 13147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert iterator.setRange(0, 0x110000); 13157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert old.integer = 0; 13167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (iterator.next(element)) { 13177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (element.integer != 0 && element.integer <= old.integer) { 13187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL next returned a less codepoint \\u" + 13197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(element.integer) + " than \\u" + 13207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(old.integer)); 13217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 13227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.getName(element.integer).equals(element.value)) 13247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 13257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL next codepoint \\u" + 13267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(element.integer) + 13277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " does not have the expected name " + 13287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getName(element.integer) + 13297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " instead have the name " + (String)element.value); 13307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 13317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = old.integer + 1; i < element.integer; i ++) { 13337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.getName(i) != null) { 13347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL between codepoints are not null \\u" + 13357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(old.integer) + " and " + 13367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(element.integer) + " has " + 13377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(i) + " with a name " + 13387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getName(i)); 13397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 13407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert old.integer = element.integer; 13437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 13457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert iterator = UCharacter.getExtendedNameIterator(); 13467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert old.integer = 0; 13477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (iterator.next(element)) { 13487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (element.integer != 0 && element.integer != old.integer) { 13497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL next returned a codepoint \\u" + 13507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(element.integer) + 13517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " different from \\u" + 13527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(old.integer)); 13537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 13547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.getExtendedName(element.integer).equals( 13567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert element.value)) { 13577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL next codepoint \\u" + 13587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(element.integer) + 13597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " name should be " 13607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + UCharacter.getExtendedName(element.integer) + 13617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " instead of " + (String)element.value); 13627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 13637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert old.integer++; 13657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert iterator = UCharacter.getName1_0Iterator(); 13677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert old.integer = 0; 13687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (iterator.next(element)) { 13697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(Integer.toHexString(element.integer) + " " + 13707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert (String)element.value); 13717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (element.integer != 0 && element.integer <= old.integer) { 13727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL next returned a less codepoint \\u" + 13737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(element.integer) + " than \\u" + 13747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(old.integer)); 13757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 13767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!element.value.equals(UCharacter.getName1_0( 13787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert element.integer))) { 13797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL next codepoint \\u" + 13807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(element.integer) + 13817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " name cannot be null"); 13827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 13837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = old.integer + 1; i < element.integer; i ++) { 13857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.getName1_0(i) != null) { 13867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL between codepoints are not null \\u" + 13877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(old.integer) + " and " + 13887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(element.integer) + " has " + 13897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(i) + " with a name " + 13907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getName1_0(i)); 13917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 13927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert old.integer = element.integer; 13957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 13967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 13977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // !!! wouldn't preflighting be simpler? This looks like 13987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // it is effectively be doing that. It seems that for every 13997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // true error the code will call errln, which will throw the error, which 14007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // this will catch, which this will then rethrow the error. Just seems 14017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // cumbersome. 14027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(e.getMessage().indexOf("unames.icu") >= 0){ 14037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert warnln("Could not find unames.icu"); 14047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 14057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln(e.getMessage()); 14067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 14117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Testing the for illegal characters 14127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 14137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestIsLegal() 14147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 14157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int illegal[] = {0xFFFE, 0x00FFFF, 0x005FFFE, 0x005FFFF, 0x0010FFFE, 14167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x0010FFFF, 0x110000, 0x00FDD0, 0x00FDDF, 0x00FDE0, 14177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x00FDEF, 0xD800, 0xDC00, -1}; 14187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int legal[] = {0x61, 0x00FFFD, 0x0010000, 0x005FFFD, 0x0060000, 14197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x0010FFFD, 0xFDCF, 0x00FDF0}; 14207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < illegal.length; count ++) { 14217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isLegal(illegal[count])) { 14227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(illegal[count]) + 14237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " is not a legal character"); 14247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < legal.length; count ++) { 14287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isLegal(legal[count])) { 14297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(legal[count]) + 14307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " is a legal character"); 14317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String illegalStr = "This is an illegal string "; 14357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String legalStr = "This is a legal string "; 14367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < illegal.length; count ++) { 14387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringBuffer str = new StringBuffer(illegalStr); 14397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (illegal[count] < 0x10000) { 14407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert str.append((char)illegal[count]); 14417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert else { 14437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char lead = UTF16.getLeadSurrogate(illegal[count]); 14447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char trail = UTF16.getTrailSurrogate(illegal[count]); 14457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert str.append(lead); 14467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert str.append(trail); 14477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isLegal(str.toString())) { 14497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL " + hex(str.toString()) + 14507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " is not a legal string"); 14517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int count = 0; count < legal.length; count ++) { 14557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringBuffer str = new StringBuffer(legalStr); 14567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (legal[count] < 0x10000) { 14577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert str.append((char)legal[count]); 14587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert else { 14607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char lead = UTF16.getLeadSurrogate(legal[count]); 14617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char trail = UTF16.getTrailSurrogate(legal[count]); 14627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert str.append(lead); 14637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert str.append(trail); 14647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isLegal(str.toString())) { 14667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL " + hex(str.toString()) + " is a legal string"); 14677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 14717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 14727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test getCodePoint 14737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 14747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCodePoint() 14757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 14767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int ch = 0x10000; 14777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (char i = 0xD800; i < 0xDC00; i ++) { 14787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (char j = 0xDC00; j <= 0xDFFF; j ++) { 14797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.getCodePoint(i, j) != ch) { 14807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Error getting codepoint for surrogate " + 14817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "characters \\u" 14827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + Integer.toHexString(i) + " \\u" + 14837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(j)); 14847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ch ++; 14867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try 14897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 14907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getCodePoint((char)0xD7ff, (char)0xDC00); 14917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Invalid surrogate characters should not form a " + 14927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "supplementary"); 14937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e) { 14947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 14957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (char i = 0; i < 0xFFFF; i++) { 14967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (i == 0xFFFE || 14977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert (i >= 0xD800 && i <= 0xDFFF) || 14987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert (i >= 0xFDD0 && i <= 0xFDEF)) { 14997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // not a character 15007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 15017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getCodePoint(i); 15027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Not a character is not a valid codepoint"); 15037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 15047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert else { 15077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.getCodePoint(i) != i) { 15087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("A valid codepoint should return itself"); 15097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 15157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * This method is a little different from the type test in icu4c. 15167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * But combined with testUnicodeData, they basically do the same thing. 15177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 15187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestIteration() 15197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 15207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int limit = 0; 15217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int prevtype = -1; 15227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int shouldBeDir; 15237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int test[][]={{0x41, UCharacterCategory.UPPERCASE_LETTER}, 15247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {0x308, UCharacterCategory.NON_SPACING_MARK}, 15257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {0xfffe, UCharacterCategory.GENERAL_OTHER_TYPES}, 15267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {0xe0041, UCharacterCategory.FORMAT}, 15277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {0xeffff, UCharacterCategory.UNASSIGNED}}; 15287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // default Bidi classes for unassigned code points, from the DerivedBidiClass.txt header 15307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int defaultBidi[][]={ 15317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0590, UCharacterDirection.LEFT_TO_RIGHT }, 15327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0600, UCharacterDirection.RIGHT_TO_LEFT }, 15337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x07C0, UCharacterDirection.RIGHT_TO_LEFT_ARABIC }, 15347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x08A0, UCharacterDirection.RIGHT_TO_LEFT }, 15357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0900, UCharacterDirection.RIGHT_TO_LEFT_ARABIC }, /* Unicode 6.1 changes U+08A0..U+08FF from R to AL */ 15367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x20A0, UCharacterDirection.LEFT_TO_RIGHT }, 15377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x20D0, UCharacterDirection.EUROPEAN_NUMBER_TERMINATOR }, /* Unicode 6.3 changes the currency symbols block U+20A0..U+20CF to default to ET not L */ 15387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xFB1D, UCharacterDirection.LEFT_TO_RIGHT }, 15397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xFB50, UCharacterDirection.RIGHT_TO_LEFT }, 15407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xFE00, UCharacterDirection.RIGHT_TO_LEFT_ARABIC }, 15417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xFE70, UCharacterDirection.LEFT_TO_RIGHT }, 15427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xFF00, UCharacterDirection.RIGHT_TO_LEFT_ARABIC }, 15437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10800, UCharacterDirection.LEFT_TO_RIGHT }, 15447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x11000, UCharacterDirection.RIGHT_TO_LEFT }, 15457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1E800, UCharacterDirection.LEFT_TO_RIGHT }, /* new default-R range in Unicode 5.2: U+1E800 - U+1EFFF */ 15467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1EE00, UCharacterDirection.RIGHT_TO_LEFT }, 15477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1EF00, UCharacterDirection.RIGHT_TO_LEFT_ARABIC }, /* Unicode 6.1 changes U+1EE00..U+1EEFF from R to AL */ 15487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1F000, UCharacterDirection.RIGHT_TO_LEFT }, 15497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x110000, UCharacterDirection.LEFT_TO_RIGHT } 15507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 15517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RangeValueIterator iterator = UCharacter.getTypeIterator(); 15537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RangeValueIterator.Element result = new RangeValueIterator.Element(); 15547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (iterator.next(result)) { 15557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (result.start != limit) { 15567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacterIteration failed: Ranges not continuous " + 15577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "0x" + Integer.toHexString(result.start)); 15587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert limit = result.limit; 15617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (result.value == prevtype) { 15627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Type of the next set of enumeration should be different"); 15637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert prevtype = result.value; 15657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = result.start; i < limit; i ++) { 15677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int temptype = UCharacter.getType(i); 15687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (temptype != result.value) { 15697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacterIteration failed: Codepoint \\u" + 15707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(i) + " should be of type " + 15717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert temptype + " not " + result.value); 15727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < test.length; ++ i) { 15767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (result.start <= test[i][0] && test[i][0] < result.limit) { 15777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (result.value != test[i][1]) { 15787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: getTypes() has range [" 15797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + Integer.toHexString(result.start) + ", " 15807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + Integer.toHexString(result.limit) 15817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "] with type " + result.value 15827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + " instead of [" 15837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + Integer.toHexString(test[i][0]) + ", " 15847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + Integer.toHexString(test[i][1])); 15857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 15887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 15897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // LineBreak.txt specifies: 15907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // # - Assigned characters that are not listed explicitly are given the value 15917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // # "AL". 15927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // # - Unassigned characters are given the value "XX". 15937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 15947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // PUA characters are listed explicitly with "XX". 15957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Verify that no assigned character has "XX". 15967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (result.value != UCharacterCategory.UNASSIGNED 15977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert && result.value != UCharacterCategory.PRIVATE_USE) { 15987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int c = result.start; 15997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (c < result.limit) { 16007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (0 == UCharacter.getIntPropertyValue(c, 16017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UProperty.LINE_BREAK)) { 16027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("error UProperty.LINE_BREAK(assigned \\u" 16037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + Utility.hex(c, 4) + ")=XX"); 16047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ++ c; 16067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 16097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 16107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Verify default Bidi classes. 16117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * For recent Unicode versions, see UCD.html. 16127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * 16137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * For older Unicode versions: 16147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * See table 3-7 "Bidirectional Character Types" in UAX #9. 16157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * http://www.unicode.org/reports/tr9/ 16167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * 16177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * See also DerivedBidiClass.txt for Cn code points! 16187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * 16197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Unicode 4.0.1/Public Review Issue #28 (http://www.unicode.org/review/resolved-pri.html) 16207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * changed some default values. 16217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * In particular, non-characters and unassigned Default Ignorable Code Points 16227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * change from L to BN. 16237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * 16247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * UCD.html version 4.0.1 does not yet reflect these changes. 16257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 16267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (result.value == UCharacterCategory.UNASSIGNED 16277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || result.value == UCharacterCategory.PRIVATE_USE) { 16287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int c = result.start; 16297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < defaultBidi.length && c < result.limit; 16307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ++ i) { 16317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (c < defaultBidi[i][0]) { 16327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (c < result.limit && c < defaultBidi[i][0]) { 16337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO change to public UCharacter.isNonCharacter(c) once it's available 16347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(com.ibm.icu.impl.UCharacterUtility.isNonCharacter(c) || UCharacter.hasBinaryProperty(c, UProperty.DEFAULT_IGNORABLE_CODE_POINT)) { 16357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert shouldBeDir=UCharacter.BOUNDARY_NEUTRAL; 16367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 16377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert shouldBeDir=defaultBidi[i][1]; 16387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 16407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.getDirection(c) != shouldBeDir 16417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || UCharacter.getIntPropertyValue(c, 16427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UProperty.BIDI_CLASS) 16437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert != shouldBeDir) { 16447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: getDirection(unassigned/PUA " 16457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + Integer.toHexString(c) 16467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + ") should be " 16477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + shouldBeDir); 16487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ++ c; 16507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 16567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert iterator.reset(); 16577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (iterator.next(result) == false || result.start != 0) { 16587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.out.println("result " + result.start); 16597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacterIteration reset() failed"); 16607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 16637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 16647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Testing getAge 16657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 16667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetAge() 16677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 16687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int ages[] = {0x41, 1, 1, 0, 0, 16697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0xffff, 1, 1, 0, 0, 16707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x20ab, 2, 0, 0, 0, 16717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x2fffe, 2, 0, 0, 0, 16727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x20ac, 2, 1, 0, 0, 16737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0xfb1d, 3, 0, 0, 0, 16747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x3f4, 3, 1, 0, 0, 16757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x10300, 3, 1, 0, 0, 16767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x220, 3, 2, 0, 0, 16777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0xff60, 3, 2, 0, 0}; 16787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < ages.length; i += 5) { 16797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert VersionInfo age = UCharacter.getAge(ages[i]); 16807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (age != VersionInfo.getInstance(ages[i + 1], ages[i + 2], 16817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ages[i + 3], ages[i + 4])) { 16827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: getAge(\\u" + Integer.toHexString(ages[i]) + 16837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ") == " + age.toString() + " instead of " + 16847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ages[i + 1] + "." + ages[i + 2] + "." + ages[i + 3] + 16857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "." + ages[i + 4]); 16867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 16887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 16897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] valid_tests = { 16907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.MIN_VALUE, UCharacter.MIN_VALUE+1, 16917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.MAX_VALUE-1, UCharacter.MAX_VALUE}; 16927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] invalid_tests = { 16937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.MIN_VALUE-1, UCharacter.MIN_VALUE-2, 16947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.MAX_VALUE+1, UCharacter.MAX_VALUE+2}; 16957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 16967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i< valid_tests.length; i++){ 16977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 16987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getAge(valid_tests[i]); 16997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 17007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getAge(int) was not suppose to have " + 17017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "an exception. Value passed: " + valid_tests[i]); 17027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i< invalid_tests.length; i++){ 17067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 17077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getAge(invalid_tests[i]); 17087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getAge(int) was suppose to have " + 17097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "an exception. Value passed: " + invalid_tests[i]); 17107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 17117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 17147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 17167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test binary non core properties 17177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 17187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestAdditionalProperties() 17197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 17207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // test data for hasBinaryProperty() 17217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int props[][] = { // code point, property 17227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0627, UProperty.ALPHABETIC, 1 }, 17237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1034a, UProperty.ALPHABETIC, 1 }, 17247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2028, UProperty.ALPHABETIC, 0 }, 17257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0066, UProperty.ASCII_HEX_DIGIT, 1 }, 17277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0067, UProperty.ASCII_HEX_DIGIT, 0 }, 17287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x202c, UProperty.BIDI_CONTROL, 1 }, 17307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x202f, UProperty.BIDI_CONTROL, 0 }, 17317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x003c, UProperty.BIDI_MIRRORED, 1 }, 17337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x003d, UProperty.BIDI_MIRRORED, 0 }, 17347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* see Unicode Corrigendum #6 at http://www.unicode.org/versions/corrigendum6.html */ 17367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2018, UProperty.BIDI_MIRRORED, 0 }, 17377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x201d, UProperty.BIDI_MIRRORED, 0 }, 17387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x201f, UProperty.BIDI_MIRRORED, 0 }, 17397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x301e, UProperty.BIDI_MIRRORED, 0 }, 17407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x058a, UProperty.DASH, 1 }, 17427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x007e, UProperty.DASH, 0 }, 17437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0c4d, UProperty.DIACRITIC, 1 }, 17457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x3000, UProperty.DIACRITIC, 0 }, 17467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0e46, UProperty.EXTENDER, 1 }, 17487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0020, UProperty.EXTENDER, 0 }, 17497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xfb1d, UProperty.FULL_COMPOSITION_EXCLUSION, 1 }, 17517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1d15f, UProperty.FULL_COMPOSITION_EXCLUSION, 1 }, 17527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xfb1e, UProperty.FULL_COMPOSITION_EXCLUSION, 0 }, 17537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x110a, UProperty.NFD_INERT, 1 }, /* Jamo L */ 17557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0308, UProperty.NFD_INERT, 0 }, 17567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1164, UProperty.NFKD_INERT, 1 }, /* Jamo V */ 17587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1d79d, UProperty.NFKD_INERT, 0 }, /* math compat version of xi */ 17597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0021, UProperty.NFC_INERT, 1 }, /* ! */ 17617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0061, UProperty.NFC_INERT, 0 }, /* a */ 17627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x00e4, UProperty.NFC_INERT, 0 }, /* a-umlaut */ 17637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0102, UProperty.NFC_INERT, 0 }, /* a-breve */ 17647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xac1c, UProperty.NFC_INERT, 0 }, /* Hangul LV */ 17657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xac1d, UProperty.NFC_INERT, 1 }, /* Hangul LVT */ 17667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1d79d, UProperty.NFKC_INERT, 0 }, /* math compat version of xi */ 17687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2a6d6, UProperty.NFKC_INERT, 1 }, /* Han, last of CJK ext. B */ 17697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x00e4, UProperty.SEGMENT_STARTER, 1 }, 17717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0308, UProperty.SEGMENT_STARTER, 0 }, 17727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x110a, UProperty.SEGMENT_STARTER, 1 }, /* Jamo L */ 17737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1164, UProperty.SEGMENT_STARTER, 0 },/* Jamo V */ 17747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xac1c, UProperty.SEGMENT_STARTER, 1 }, /* Hangul LV */ 17757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xac1d, UProperty.SEGMENT_STARTER, 1 }, /* Hangul LVT */ 17767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0044, UProperty.HEX_DIGIT, 1 }, 17787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xff46, UProperty.HEX_DIGIT, 1 }, 17797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0047, UProperty.HEX_DIGIT, 0 }, 17807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x30fb, UProperty.HYPHEN, 1 }, 17827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xfe58, UProperty.HYPHEN, 0 }, 17837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2172, UProperty.ID_CONTINUE, 1 }, 17857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0307, UProperty.ID_CONTINUE, 1 }, 17867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x005c, UProperty.ID_CONTINUE, 0 }, 17877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2172, UProperty.ID_START, 1 }, 17897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x007a, UProperty.ID_START, 1 }, 17907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0039, UProperty.ID_START, 0 }, 17917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x4db5, UProperty.IDEOGRAPHIC, 1 }, 17937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2f999, UProperty.IDEOGRAPHIC, 1 }, 17947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2f99, UProperty.IDEOGRAPHIC, 0 }, 17957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x200c, UProperty.JOIN_CONTROL, 1 }, 17977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2029, UProperty.JOIN_CONTROL, 0 }, 17987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 17997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1d7bc, UProperty.LOWERCASE, 1 }, 18007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0345, UProperty.LOWERCASE, 1 }, 18017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0030, UProperty.LOWERCASE, 0 }, 18027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1d7a9, UProperty.MATH, 1 }, 18047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2135, UProperty.MATH, 1 }, 18057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0062, UProperty.MATH, 0 }, 18067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xfde1, UProperty.NONCHARACTER_CODE_POINT, 1 }, 18087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10ffff, UProperty.NONCHARACTER_CODE_POINT, 1 }, 18097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10fffd, UProperty.NONCHARACTER_CODE_POINT, 0 }, 18107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0022, UProperty.QUOTATION_MARK, 1 }, 18127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xff62, UProperty.QUOTATION_MARK, 1 }, 18137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xd840, UProperty.QUOTATION_MARK, 0 }, 18147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x061f, UProperty.TERMINAL_PUNCTUATION, 1 }, 18167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xe003f, UProperty.TERMINAL_PUNCTUATION, 0 }, 18177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1d44a, UProperty.UPPERCASE, 1 }, 18197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2162, UProperty.UPPERCASE, 1 }, 18207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0345, UProperty.UPPERCASE, 0 }, 18217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0020, UProperty.WHITE_SPACE, 1 }, 18237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x202f, UProperty.WHITE_SPACE, 1 }, 18247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x3001, UProperty.WHITE_SPACE, 0 }, 18257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0711, UProperty.XID_CONTINUE, 1 }, 18277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1d1aa, UProperty.XID_CONTINUE, 1 }, 18287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x007c, UProperty.XID_CONTINUE, 0 }, 18297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x16ee, UProperty.XID_START, 1 }, 18317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x23456, UProperty.XID_START, 1 }, 18327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1d1aa, UProperty.XID_START, 0 }, 18337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 18357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Version break: 18367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following properties are only supported starting with the 18377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Unicode version indicated in the second field. 18387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 18397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { -1, 0x320, 0 }, 18407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x180c, UProperty.DEFAULT_IGNORABLE_CODE_POINT, 1 }, 18427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xfe02, UProperty.DEFAULT_IGNORABLE_CODE_POINT, 1 }, 18437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1801, UProperty.DEFAULT_IGNORABLE_CODE_POINT, 0 }, 18447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0149, UProperty.DEPRECATED, 1 }, /* changed in Unicode 5.2 */ 18467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0341, UProperty.DEPRECATED, 0 }, /* changed in Unicode 5.2 */ 1847bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert { 0xe0001, UProperty.DEPRECATED, 1 }, /* Changed from Unicode 5 to 5.1 */ 18487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xe0100, UProperty.DEPRECATED, 0 }, 18497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x00a0, UProperty.GRAPHEME_BASE, 1 }, 18517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0a4d, UProperty.GRAPHEME_BASE, 0 }, 18527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xff9d, UProperty.GRAPHEME_BASE, 1 }, 18537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xff9f, UProperty.GRAPHEME_BASE, 0 }, /* changed from Unicode 3.2 to 4 and again 5 to 5.1 */ 18547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0300, UProperty.GRAPHEME_EXTEND, 1 }, 18567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xff9d, UProperty.GRAPHEME_EXTEND, 0 }, 18577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xff9f, UProperty.GRAPHEME_EXTEND, 1 }, /* changed from Unicode 3.2 to 4 and again 5 to 5.1 */ 18587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0603, UProperty.GRAPHEME_EXTEND, 0 }, 18597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0a4d, UProperty.GRAPHEME_LINK, 1 }, 18617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xff9f, UProperty.GRAPHEME_LINK, 0 }, 18627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2ff7, UProperty.IDS_BINARY_OPERATOR, 1 }, 18647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2ff3, UProperty.IDS_BINARY_OPERATOR, 0 }, 18657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2ff3, UProperty.IDS_TRINARY_OPERATOR, 1 }, 18677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2f03, UProperty.IDS_TRINARY_OPERATOR, 0 }, 18687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0ec1, UProperty.LOGICAL_ORDER_EXCEPTION, 1 }, 18707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xdcba, UProperty.LOGICAL_ORDER_EXCEPTION, 0 }, 18717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2e9b, UProperty.RADICAL, 1 }, 18737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x4e00, UProperty.RADICAL, 0 }, 18747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x012f, UProperty.SOFT_DOTTED, 1 }, 18767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0049, UProperty.SOFT_DOTTED, 0 }, 18777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xfa11, UProperty.UNIFIED_IDEOGRAPH, 1 }, 18797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xfa12, UProperty.UNIFIED_IDEOGRAPH, 0 }, 18807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { -1, 0x401, 0 }, /* version break for Unicode 4.0.1 */ 18827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x002e, UProperty.S_TERM, 1 }, 18847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0061, UProperty.S_TERM, 0 }, 18857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x180c, UProperty.VARIATION_SELECTOR, 1 }, 18877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xfe03, UProperty.VARIATION_SELECTOR, 1 }, 18887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xe01ef, UProperty.VARIATION_SELECTOR, 1 }, 18897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xe0200, UProperty.VARIATION_SELECTOR, 0 }, 18907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 18917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* enum/integer type properties */ 18927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* test default Bidi classes for unassigned code points */ 18937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0590, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT }, 18947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x05cf, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT }, 18957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x05ed, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT }, 18967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x07f2, UProperty.BIDI_CLASS, UCharacterDirection.DIR_NON_SPACING_MARK }, /* Nko, new in Unicode 5.0 */ 18977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x07fe, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT }, /* unassigned R */ 18987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x089f, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT }, 18997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xfb37, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT }, 19007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xfb42, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT }, 19017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10806, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT }, 19027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10909, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT }, 19037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10fe4, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT }, 19047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 19057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x061d, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT_ARABIC }, 19067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x063f, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT_ARABIC }, 19077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x070e, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT_ARABIC }, 19087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0775, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT_ARABIC }, 19097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xfbc2, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT_ARABIC }, 19107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xfd90, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT_ARABIC }, 19117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xfefe, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT_ARABIC }, 19127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 19137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x02AF, UProperty.BLOCK, UCharacter.UnicodeBlock.IPA_EXTENSIONS.getID() }, 19147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0C4E, UProperty.BLOCK, UCharacter.UnicodeBlock.TELUGU.getID()}, 19157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x155A, UProperty.BLOCK, UCharacter.UnicodeBlock.UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS.getID() }, 19167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1717, UProperty.BLOCK, UCharacter.UnicodeBlock.TAGALOG.getID() }, 19177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1900, UProperty.BLOCK, UCharacter.UnicodeBlock.LIMBU.getID() }, 19187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1CBF, UProperty.BLOCK, UCharacter.UnicodeBlock.NO_BLOCK.getID()}, 19197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x3040, UProperty.BLOCK, UCharacter.UnicodeBlock.HIRAGANA.getID()}, 19207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1D0FF, UProperty.BLOCK, UCharacter.UnicodeBlock.BYZANTINE_MUSICAL_SYMBOLS.getID()}, 19217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x50000, UProperty.BLOCK, UCharacter.UnicodeBlock.NO_BLOCK.getID() }, 19227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xEFFFF, UProperty.BLOCK, UCharacter.UnicodeBlock.NO_BLOCK.getID() }, 19237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10D0FF, UProperty.BLOCK, UCharacter.UnicodeBlock.SUPPLEMENTARY_PRIVATE_USE_AREA_B.getID() }, 19247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 19257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* UProperty.CANONICAL_COMBINING_CLASS tested for assigned characters in TestUnicodeData() */ 19267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xd7d7, UProperty.CANONICAL_COMBINING_CLASS, 0 }, 19277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 19287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x00A0, UProperty.DECOMPOSITION_TYPE, UCharacter.DecompositionType.NOBREAK }, 19297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x00A8, UProperty.DECOMPOSITION_TYPE, UCharacter.DecompositionType.COMPAT }, 19307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x00bf, UProperty.DECOMPOSITION_TYPE, UCharacter.DecompositionType.NONE }, 19317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x00c0, UProperty.DECOMPOSITION_TYPE, UCharacter.DecompositionType.CANONICAL }, 19327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1E9B, UProperty.DECOMPOSITION_TYPE, UCharacter.DecompositionType.CANONICAL }, 19337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xBCDE, UProperty.DECOMPOSITION_TYPE, UCharacter.DecompositionType.CANONICAL }, 19347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xFB5D, UProperty.DECOMPOSITION_TYPE, UCharacter.DecompositionType.MEDIAL }, 19357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1D736, UProperty.DECOMPOSITION_TYPE, UCharacter.DecompositionType.FONT }, 19367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xe0033, UProperty.DECOMPOSITION_TYPE, UCharacter.DecompositionType.NONE }, 19377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 19387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0009, UProperty.EAST_ASIAN_WIDTH, UCharacter.EastAsianWidth.NEUTRAL }, 19397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0020, UProperty.EAST_ASIAN_WIDTH, UCharacter.EastAsianWidth.NARROW }, 19407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x00B1, UProperty.EAST_ASIAN_WIDTH, UCharacter.EastAsianWidth.AMBIGUOUS }, 19417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x20A9, UProperty.EAST_ASIAN_WIDTH, UCharacter.EastAsianWidth.HALFWIDTH }, 19427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2FFB, UProperty.EAST_ASIAN_WIDTH, UCharacter.EastAsianWidth.WIDE }, 19437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x3000, UProperty.EAST_ASIAN_WIDTH, UCharacter.EastAsianWidth.FULLWIDTH }, 19447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x35bb, UProperty.EAST_ASIAN_WIDTH, UCharacter.EastAsianWidth.WIDE }, 19457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x58bd, UProperty.EAST_ASIAN_WIDTH, UCharacter.EastAsianWidth.WIDE }, 19467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xD7A3, UProperty.EAST_ASIAN_WIDTH, UCharacter.EastAsianWidth.WIDE }, 19477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xEEEE, UProperty.EAST_ASIAN_WIDTH, UCharacter.EastAsianWidth.AMBIGUOUS }, 19487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1D198, UProperty.EAST_ASIAN_WIDTH, UCharacter.EastAsianWidth.NEUTRAL }, 19497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x20000, UProperty.EAST_ASIAN_WIDTH, UCharacter.EastAsianWidth.WIDE }, 19507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2F8C7, UProperty.EAST_ASIAN_WIDTH, UCharacter.EastAsianWidth.WIDE }, 19517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x3a5bd, UProperty.EAST_ASIAN_WIDTH, UCharacter.EastAsianWidth.WIDE }, 19527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x5a5bd, UProperty.EAST_ASIAN_WIDTH, UCharacter.EastAsianWidth.NEUTRAL }, 19537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xFEEEE, UProperty.EAST_ASIAN_WIDTH, UCharacter.EastAsianWidth.AMBIGUOUS }, 19547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10EEEE, UProperty.EAST_ASIAN_WIDTH, UCharacter.EastAsianWidth.AMBIGUOUS }, 19557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 19567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* UProperty.GENERAL_CATEGORY tested for assigned characters in TestUnicodeData() */ 19577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xd7c7, UProperty.GENERAL_CATEGORY, 0 }, 19587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xd7d7, UProperty.GENERAL_CATEGORY, UCharacterEnums.ECharacterCategory.OTHER_LETTER }, /* changed in Unicode 5.2 */ 19597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 19607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0444, UProperty.JOINING_GROUP, UCharacter.JoiningGroup.NO_JOINING_GROUP }, 19617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0639, UProperty.JOINING_GROUP, UCharacter.JoiningGroup.AIN }, 19627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x072A, UProperty.JOINING_GROUP, UCharacter.JoiningGroup.DALATH_RISH }, 19637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0647, UProperty.JOINING_GROUP, UCharacter.JoiningGroup.HEH }, 19647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x06C1, UProperty.JOINING_GROUP, UCharacter.JoiningGroup.HEH_GOAL }, 19657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 19667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x200C, UProperty.JOINING_TYPE, UCharacter.JoiningType.NON_JOINING }, 19677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x200D, UProperty.JOINING_TYPE, UCharacter.JoiningType.JOIN_CAUSING }, 19687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0639, UProperty.JOINING_TYPE, UCharacter.JoiningType.DUAL_JOINING }, 19697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0640, UProperty.JOINING_TYPE, UCharacter.JoiningType.JOIN_CAUSING }, 19707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x06C3, UProperty.JOINING_TYPE, UCharacter.JoiningType.RIGHT_JOINING }, 19717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0300, UProperty.JOINING_TYPE, UCharacter.JoiningType.TRANSPARENT }, 19727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x070F, UProperty.JOINING_TYPE, UCharacter.JoiningType.TRANSPARENT }, 19737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xe0033, UProperty.JOINING_TYPE, UCharacter.JoiningType.TRANSPARENT }, 19747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 19757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* TestUnicodeData() verifies that no assigned character has "XX" (unknown) */ 19767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xe7e7, UProperty.LINE_BREAK, UCharacter.LineBreak.UNKNOWN }, 19777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10fffd, UProperty.LINE_BREAK, UCharacter.LineBreak.UNKNOWN }, 19787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0028, UProperty.LINE_BREAK, UCharacter.LineBreak.OPEN_PUNCTUATION }, 19797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x232A, UProperty.LINE_BREAK, UCharacter.LineBreak.CLOSE_PUNCTUATION }, 19807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x3401, UProperty.LINE_BREAK, UCharacter.LineBreak.IDEOGRAPHIC }, 19817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x4e02, UProperty.LINE_BREAK, UCharacter.LineBreak.IDEOGRAPHIC }, 19827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x20004, UProperty.LINE_BREAK, UCharacter.LineBreak.IDEOGRAPHIC }, 19837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xf905, UProperty.LINE_BREAK, UCharacter.LineBreak.IDEOGRAPHIC }, 19847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xdb7e, UProperty.LINE_BREAK, UCharacter.LineBreak.SURROGATE }, 19857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xdbfd, UProperty.LINE_BREAK, UCharacter.LineBreak.SURROGATE }, 19867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xdffc, UProperty.LINE_BREAK, UCharacter.LineBreak.SURROGATE }, 19877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2762, UProperty.LINE_BREAK, UCharacter.LineBreak.EXCLAMATION }, 19887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x002F, UProperty.LINE_BREAK, UCharacter.LineBreak.BREAK_SYMBOLS }, 19897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1D49C, UProperty.LINE_BREAK, UCharacter.LineBreak.ALPHABETIC }, 19907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1731, UProperty.LINE_BREAK, UCharacter.LineBreak.ALPHABETIC }, 19917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 19927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* UProperty.NUMERIC_TYPE tested in TestNumericProperties() */ 19937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 19947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* UProperty.SCRIPT tested in TestUScriptCodeAPI() */ 19957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 19967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10ff, UProperty.HANGUL_SYLLABLE_TYPE, 0 }, 19977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1100, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.LEADING_JAMO }, 19987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1111, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.LEADING_JAMO }, 19997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1159, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.LEADING_JAMO }, 20007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x115a, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.LEADING_JAMO }, /* changed in Unicode 5.2 */ 20017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x115e, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.LEADING_JAMO }, /* changed in Unicode 5.2 */ 20027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x115f, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.LEADING_JAMO }, 20037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xa95f, UProperty.HANGUL_SYLLABLE_TYPE, 0 }, 20057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xa960, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.LEADING_JAMO }, /* changed in Unicode 5.2 */ 20067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xa97c, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.LEADING_JAMO }, /* changed in Unicode 5.2 */ 20077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xa97d, UProperty.HANGUL_SYLLABLE_TYPE, 0 }, 20087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1160, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.VOWEL_JAMO }, 20107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1161, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.VOWEL_JAMO }, 20117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1172, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.VOWEL_JAMO }, 20127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x11a2, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.VOWEL_JAMO }, 20137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x11a3, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.VOWEL_JAMO }, /* changed in Unicode 5.2 */ 20147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x11a7, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.VOWEL_JAMO }, /* changed in Unicode 5.2 */ 20157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xd7af, UProperty.HANGUL_SYLLABLE_TYPE, 0 }, 20177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xd7b0, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.VOWEL_JAMO }, /* changed in Unicode 5.2 */ 20187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xd7c6, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.VOWEL_JAMO }, /* changed in Unicode 5.2 */ 20197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xd7c7, UProperty.HANGUL_SYLLABLE_TYPE, 0 }, 20207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x11a8, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.TRAILING_JAMO }, 20227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x11b8, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.TRAILING_JAMO }, 20237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x11c8, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.TRAILING_JAMO }, 20247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x11f9, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.TRAILING_JAMO }, 20257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x11fa, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.TRAILING_JAMO }, /* changed in Unicode 5.2 */ 20267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x11ff, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.TRAILING_JAMO }, /* changed in Unicode 5.2 */ 20277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1200, UProperty.HANGUL_SYLLABLE_TYPE, 0 }, 20287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xd7ca, UProperty.HANGUL_SYLLABLE_TYPE, 0 }, 20307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xd7cb, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.TRAILING_JAMO }, /* changed in Unicode 5.2 */ 20317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xd7fb, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.TRAILING_JAMO }, /* changed in Unicode 5.2 */ 20327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xd7fc, UProperty.HANGUL_SYLLABLE_TYPE, 0 }, 20337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xac00, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.LV_SYLLABLE }, 20357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xac1c, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.LV_SYLLABLE }, 20367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xc5ec, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.LV_SYLLABLE }, 20377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xd788, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.LV_SYLLABLE }, 20387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xac01, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.LVT_SYLLABLE }, 20407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xac1b, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.LVT_SYLLABLE }, 20417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xac1d, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.LVT_SYLLABLE }, 20427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xc5ee, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.LVT_SYLLABLE }, 20437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xd7a3, UProperty.HANGUL_SYLLABLE_TYPE, UCharacter.HangulSyllableType.LVT_SYLLABLE }, 20447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xd7a4, UProperty.HANGUL_SYLLABLE_TYPE, 0 }, 20467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { -1, 0x410, 0 }, /* version break for Unicode 4.1 */ 20487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x00d7, UProperty.PATTERN_SYNTAX, 1 }, 20507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xfe45, UProperty.PATTERN_SYNTAX, 1 }, 20517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0061, UProperty.PATTERN_SYNTAX, 0 }, 20527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0020, UProperty.PATTERN_WHITE_SPACE, 1 }, 20547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0085, UProperty.PATTERN_WHITE_SPACE, 1 }, 20557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x200f, UProperty.PATTERN_WHITE_SPACE, 1 }, 20567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x00a0, UProperty.PATTERN_WHITE_SPACE, 0 }, 20577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x3000, UProperty.PATTERN_WHITE_SPACE, 0 }, 20587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1d200, UProperty.BLOCK, UCharacter.UnicodeBlock.ANCIENT_GREEK_MUSICAL_NOTATION_ID }, 20607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2c8e, UProperty.BLOCK, UCharacter.UnicodeBlock.COPTIC_ID }, 20617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xfe17, UProperty.BLOCK, UCharacter.UnicodeBlock.VERTICAL_FORMS_ID }, 20627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1a00, UProperty.SCRIPT, UScript.BUGINESE }, 20647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2cea, UProperty.SCRIPT, UScript.COPTIC }, 20657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xa82b, UProperty.SCRIPT, UScript.SYLOTI_NAGRI }, 20667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x103d0, UProperty.SCRIPT, UScript.OLD_PERSIAN }, 20677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xcc28, UProperty.LINE_BREAK, UCharacter.LineBreak.H2 }, 20697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xcc29, UProperty.LINE_BREAK, UCharacter.LineBreak.H3 }, 20707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xac03, UProperty.LINE_BREAK, UCharacter.LineBreak.H3 }, 20717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x115f, UProperty.LINE_BREAK, UCharacter.LineBreak.JL }, 20727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x11aa, UProperty.LINE_BREAK, UCharacter.LineBreak.JT }, 20737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x11a1, UProperty.LINE_BREAK, UCharacter.LineBreak.JV }, 20747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xb2c9, UProperty.GRAPHEME_CLUSTER_BREAK, UCharacter.GraphemeClusterBreak.LVT }, 20767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x036f, UProperty.GRAPHEME_CLUSTER_BREAK, UCharacter.GraphemeClusterBreak.EXTEND }, 20777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0000, UProperty.GRAPHEME_CLUSTER_BREAK, UCharacter.GraphemeClusterBreak.CONTROL }, 20787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1160, UProperty.GRAPHEME_CLUSTER_BREAK, UCharacter.GraphemeClusterBreak.V }, 20797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x05f4, UProperty.WORD_BREAK, UCharacter.WordBreak.MIDLETTER }, 20817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x4ef0, UProperty.WORD_BREAK, UCharacter.WordBreak.OTHER }, 20827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x19d9, UProperty.WORD_BREAK, UCharacter.WordBreak.NUMERIC }, 20837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2044, UProperty.WORD_BREAK, UCharacter.WordBreak.MIDNUM }, 20847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xfffd, UProperty.SENTENCE_BREAK, UCharacter.SentenceBreak.OTHER }, 20867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1ffc, UProperty.SENTENCE_BREAK, UCharacter.SentenceBreak.UPPER }, 20877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xff63, UProperty.SENTENCE_BREAK, UCharacter.SentenceBreak.CLOSE }, 20887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2028, UProperty.SENTENCE_BREAK, UCharacter.SentenceBreak.SEP }, 20897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { -1, 0x520, 0 }, /* version break for Unicode 5.2 */ 20917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* unassigned code points in new default Bidi R blocks */ 20937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1ede4, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT }, 20947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1efe4, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT }, 20957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* test some script codes >127 */ 20977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xa6e6, UProperty.SCRIPT, UScript.BAMUM }, 20987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xa4d0, UProperty.SCRIPT, UScript.LISU }, 20997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10a7f, UProperty.SCRIPT, UScript.OLD_SOUTH_ARABIAN }, 21007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { -1, 0x600, 0 }, /* version break for Unicode 6.0 */ 21027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* value changed in Unicode 6.0 */ 21047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x06C3, UProperty.JOINING_GROUP, UCharacter.JoiningGroup.TEH_MARBUTA_GOAL }, 21057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { -1, 0x610, 0 }, /* version break for Unicode 6.1 */ 21077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* unassigned code points in new/changed default Bidi AL blocks */ 21097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x08ba, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT_ARABIC }, 21107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1eee4, UProperty.BIDI_CLASS, UCharacterDirection.RIGHT_TO_LEFT_ARABIC }, 21117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { -1, 0x630, 0 }, /* version break for Unicode 6.3 */ 21137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* unassigned code points in the currency symbols block now default to ET */ 21157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x20C0, UProperty.BIDI_CLASS, UCharacterDirection.EUROPEAN_NUMBER_TERMINATOR }, 21167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x20CF, UProperty.BIDI_CLASS, UCharacterDirection.EUROPEAN_NUMBER_TERMINATOR }, 21177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* new property in Unicode 6.3 */ 21197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0027, UProperty.BIDI_PAIRED_BRACKET_TYPE, UCharacter.BidiPairedBracketType.NONE }, 21207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0028, UProperty.BIDI_PAIRED_BRACKET_TYPE, UCharacter.BidiPairedBracketType.OPEN }, 21217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0029, UProperty.BIDI_PAIRED_BRACKET_TYPE, UCharacter.BidiPairedBracketType.CLOSE }, 21227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xFF5C, UProperty.BIDI_PAIRED_BRACKET_TYPE, UCharacter.BidiPairedBracketType.NONE }, 21237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xFF5B, UProperty.BIDI_PAIRED_BRACKET_TYPE, UCharacter.BidiPairedBracketType.OPEN }, 21247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xFF5D, UProperty.BIDI_PAIRED_BRACKET_TYPE, UCharacter.BidiPairedBracketType.CLOSE }, 21257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { -1, 0x700, 0 }, /* version break for Unicode 7.0 */ 21277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* new character range with Joining_Group values */ 21297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10ABF, UProperty.JOINING_GROUP, UCharacter.JoiningGroup.NO_JOINING_GROUP }, 21307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10AC0, UProperty.JOINING_GROUP, UCharacter.JoiningGroup.MANICHAEAN_ALEPH }, 21317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10AC1, UProperty.JOINING_GROUP, UCharacter.JoiningGroup.MANICHAEAN_BETH }, 21327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10AEF, UProperty.JOINING_GROUP, UCharacter.JoiningGroup.MANICHAEAN_HUNDRED }, 21337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10AF0, UProperty.JOINING_GROUP, UCharacter.JoiningGroup.NO_JOINING_GROUP }, 21347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* undefined UProperty values */ 21367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x61, 0x4a7, 0 }, 21377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x234bc, 0x15ed, 0 } 21387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 21397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.getIntPropertyMinValue(UProperty.DASH) != 0 21427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || UCharacter.getIntPropertyMinValue(UProperty.BIDI_CLASS) != 0 21437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || UCharacter.getIntPropertyMinValue(UProperty.BLOCK)!= 0 /* j2478 */ 21447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || UCharacter.getIntPropertyMinValue(UProperty.SCRIPT)!= 0 /* JB#2410 */ 21457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || UCharacter.getIntPropertyMinValue(0x2345) != 0) { 21467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMinValue() wrong"); 21477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if( UCharacter.getIntPropertyMaxValue(UProperty.DASH)!=1) { 21507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(UProperty.DASH) wrong\n"); 21517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if( UCharacter.getIntPropertyMaxValue(UProperty.ID_CONTINUE)!=1) { 21537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(UProperty.ID_CONTINUE) wrong\n"); 21547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if( UCharacter.getIntPropertyMaxValue(UProperty.BINARY_LIMIT-1)!=1) { 21567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(UProperty.BINARY_LIMIT-1) wrong\n"); 21577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 21597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if( UCharacter.getIntPropertyMaxValue(UProperty.BIDI_CLASS)!=UCharacterDirection.CHAR_DIRECTION_COUNT-1 ) { 21607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(UProperty.BIDI_CLASS) wrong\n"); 21617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if( UCharacter.getIntPropertyMaxValue(UProperty.BLOCK)!=UCharacter.UnicodeBlock.COUNT-1 ) { 21637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(UProperty.BLOCK) wrong\n"); 21647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getIntPropertyMaxValue(UProperty.LINE_BREAK)!=UCharacter.LineBreak.COUNT-1) { 21667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(UProperty.LINE_BREAK) wrong\n"); 21677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getIntPropertyMaxValue(UProperty.SCRIPT)!=UScript.CODE_LIMIT-1) { 21697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(UProperty.SCRIPT) wrong\n"); 21707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getIntPropertyMaxValue(UProperty.NUMERIC_TYPE)!=UCharacter.NumericType.COUNT-1) { 21727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(UProperty.NUMERIC_TYPE) wrong\n"); 21737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getIntPropertyMaxValue(UProperty.GENERAL_CATEGORY)!=UCharacterCategory.CHAR_CATEGORY_COUNT-1) { 21757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(UProperty.GENERAL_CATEGORY) wrong\n"); 21767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getIntPropertyMaxValue(UProperty.HANGUL_SYLLABLE_TYPE)!=UCharacter.HangulSyllableType.COUNT-1) { 21787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(UProperty.HANGUL_SYLLABLE_TYPE) wrong\n"); 21797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getIntPropertyMaxValue(UProperty.GRAPHEME_CLUSTER_BREAK)!=UCharacter.GraphemeClusterBreak.COUNT-1) { 21817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(UProperty.GRAPHEME_CLUSTER_BREAK) wrong\n"); 21827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getIntPropertyMaxValue(UProperty.SENTENCE_BREAK)!=UCharacter.SentenceBreak.COUNT-1) { 21847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(UProperty.SENTENCE_BREAK) wrong\n"); 21857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getIntPropertyMaxValue(UProperty.WORD_BREAK)!=UCharacter.WordBreak.COUNT-1) { 21877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(UProperty.WORD_BREAK) wrong\n"); 21887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getIntPropertyMaxValue(UProperty.BIDI_PAIRED_BRACKET_TYPE)!=UCharacter.BidiPairedBracketType.COUNT-1) { 21907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(UProperty.BIDI_PAIRED_BRACKET_TYPE) wrong\n"); 21917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /*JB#2410*/ 21937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if( UCharacter.getIntPropertyMaxValue(0x2345)!=-1) { 21947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(0x2345) wrong\n"); 21957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if( UCharacter.getIntPropertyMaxValue(UProperty.DECOMPOSITION_TYPE) != (UCharacter.DecompositionType.COUNT - 1)) { 21977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(UProperty.DECOMPOSITION_TYPE) wrong\n"); 21987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 21997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if( UCharacter.getIntPropertyMaxValue(UProperty.JOINING_GROUP) != (UCharacter.JoiningGroup.COUNT -1)) { 22007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(UProperty.JOINING_GROUP) wrong\n"); 22017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 22027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if( UCharacter.getIntPropertyMaxValue(UProperty.JOINING_TYPE) != (UCharacter.JoiningType.COUNT -1)) { 22037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(UProperty.JOINING_TYPE) wrong\n"); 22047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 22057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if( UCharacter.getIntPropertyMaxValue(UProperty.EAST_ASIAN_WIDTH) != (UCharacter.EastAsianWidth.COUNT -1)) { 22067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMaxValue(UProperty.EAST_ASIAN_WIDTH) wrong\n"); 22077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 22087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 22097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert VersionInfo version = UCharacter.getUnicodeVersion(); 22107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 22117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // test hasBinaryProperty() 22127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < props.length; ++ i) { 22137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int which = props[i][1]; 22147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (props[i][0] < 0) { 22157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (version.compareTo(VersionInfo.getInstance(which >> 8, 22167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert (which >> 4) & 0xF, 22177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert which & 0xF, 22187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0)) < 0) { 22197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 22207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 22217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert continue; 22227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 22237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String whichName; 22247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 22257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert whichName = UCharacter.getPropertyName(which, UProperty.NameChoice.LONG); 22267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(IllegalArgumentException e) { 22277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // There are intentionally invalid property integer values ("which"). 22287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Catch and ignore the exception from getPropertyName(). 22297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert whichName = "undefined UProperty value"; 22307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 22317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean expect = true; 22327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (props[i][2] == 0) { 22337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expect = false; 22347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 22357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (which < UProperty.INT_START) { 22367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.hasBinaryProperty(props[i][0], which) 22377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert != expect) { 22387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.hasBinaryProperty(U+" + 22397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Utility.hex(props[i][0], 4) + ", " + 22407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert whichName + ") has an error, expected=" + expect); 22417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 22427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 22437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 22447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int retVal = UCharacter.getIntPropertyValue(props[i][0], which); 22457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (retVal != props[i][2]) { 22467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyValue(U+" + 22477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Utility.hex(props[i][0], 4) + 22487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ", " + whichName + ") is wrong, expected=" 22497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + props[i][2] + " actual=" + retVal); 22507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 22517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 22527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // test separate functions, too 22537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert switch (which) { 22547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert case UProperty.ALPHABETIC: 22557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isUAlphabetic(props[i][0]) != expect) { 22567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.isUAlphabetic(\\u" + 22577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(props[i][0]) + 22587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ") is wrong expected " + props[i][2]); 22597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 22607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 22617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert case UProperty.LOWERCASE: 22627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isULowercase(props[i][0]) != expect) { 22637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.isULowercase(\\u" + 22647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(props[i][0]) + 22657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ") is wrong expected " +props[i][2]); 22667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 22677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 22687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert case UProperty.UPPERCASE: 22697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isUUppercase(props[i][0]) != expect) { 22707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.isUUppercase(\\u" + 22717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(props[i][0]) + 22727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ") is wrong expected " + props[i][2]); 22737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 22747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 22757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert case UProperty.WHITE_SPACE: 22767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isUWhiteSpace(props[i][0]) != expect) { 22777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.isUWhiteSpace(\\u" + 22787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Integer.toHexString(props[i][0]) + 22797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ") is wrong expected " + props[i][2]); 22807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 22817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 22827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert default: 22837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 22847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 22857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 22867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 22877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 22887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestNumericProperties() 22897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 22907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // see UnicodeData.txt, DerivedNumericValues.txt 22917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert double values[][] = { 22927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Code point, numeric type, numeric value. 22937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // If a fourth value is specified, it is the getNumericValue(). 22947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Otherwise it is expected to be the same as the getUnicodeNumericValue(), 22957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // where UCharacter.NO_NUMERIC_VALUE is turned into -1. 22967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // getNumericValue() returns -2 if the code point has a value 22977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // which is not a non-negative integer. (This is mostly auto-converted to -2.) 22987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0F33, UCharacter.NumericType.NUMERIC, -1./2. }, 22997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0C66, UCharacter.NumericType.DECIMAL, 0 }, 23007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x96f6, UCharacter.NumericType.NUMERIC, 0 }, 23017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xa833, UCharacter.NumericType.NUMERIC, 1./16. }, 23027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2152, UCharacter.NumericType.NUMERIC, 1./10. }, 23037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2151, UCharacter.NumericType.NUMERIC, 1./9. }, 23047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1245f, UCharacter.NumericType.NUMERIC, 1./8. }, 23057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2150, UCharacter.NumericType.NUMERIC, 1./7. }, 23067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2159, UCharacter.NumericType.NUMERIC, 1./6. }, 23077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x09f6, UCharacter.NumericType.NUMERIC, 3./16. }, 23087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2155, UCharacter.NumericType.NUMERIC, 1./5. }, 23097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x00BD, UCharacter.NumericType.NUMERIC, 1./2. }, 23107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0031, UCharacter.NumericType.DECIMAL, 1. }, 23117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x4e00, UCharacter.NumericType.NUMERIC, 1. }, 23127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x58f1, UCharacter.NumericType.NUMERIC, 1. }, 23137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10320, UCharacter.NumericType.NUMERIC, 1. }, 23147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0F2B, UCharacter.NumericType.NUMERIC, 3./2. }, 23157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x00B2, UCharacter.NumericType.DIGIT, 2. }, /* Unicode 4.0 change */ 23167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x5f10, UCharacter.NumericType.NUMERIC, 2. }, 23177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1813, UCharacter.NumericType.DECIMAL, 3. }, 23187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x5f0e, UCharacter.NumericType.NUMERIC, 3. }, 23197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2173, UCharacter.NumericType.NUMERIC, 4. }, 23207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x8086, UCharacter.NumericType.NUMERIC, 4. }, 23217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x278E, UCharacter.NumericType.DIGIT, 5. }, 23227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1D7F2, UCharacter.NumericType.DECIMAL, 6. }, 23237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x247A, UCharacter.NumericType.DIGIT, 7. }, 23247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x7396, UCharacter.NumericType.NUMERIC, 9. }, 23257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1372, UCharacter.NumericType.NUMERIC, 10. }, 23267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x216B, UCharacter.NumericType.NUMERIC, 12. }, 23277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x16EE, UCharacter.NumericType.NUMERIC, 17. }, 23287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x249A, UCharacter.NumericType.NUMERIC, 19. }, 23297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x303A, UCharacter.NumericType.NUMERIC, 30. }, 23307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x5345, UCharacter.NumericType.NUMERIC, 30. }, 23317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x32B2, UCharacter.NumericType.NUMERIC, 37. }, 23327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x1375, UCharacter.NumericType.NUMERIC, 40. }, 23337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10323, UCharacter.NumericType.NUMERIC, 50. }, 23347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x0BF1, UCharacter.NumericType.NUMERIC, 100. }, 23357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x964c, UCharacter.NumericType.NUMERIC, 100. }, 23367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x217E, UCharacter.NumericType.NUMERIC, 500. }, 23377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2180, UCharacter.NumericType.NUMERIC, 1000. }, 23387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x4edf, UCharacter.NumericType.NUMERIC, 1000. }, 23397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x2181, UCharacter.NumericType.NUMERIC, 5000. }, 23407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x137C, UCharacter.NumericType.NUMERIC, 10000. }, 23417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x4e07, UCharacter.NumericType.NUMERIC, 10000. }, 23427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x12432, UCharacter.NumericType.NUMERIC, 216000. }, 23437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x12433, UCharacter.NumericType.NUMERIC, 432000. }, 23447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x4ebf, UCharacter.NumericType.NUMERIC, 100000000. }, 23457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x5146, UCharacter.NumericType.NUMERIC, 1000000000000. }, 23467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { -1, UCharacter.NumericType.NONE, UCharacter.NO_NUMERIC_VALUE }, 23477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x61, UCharacter.NumericType.NONE, UCharacter.NO_NUMERIC_VALUE, 10. }, 23487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x3000, UCharacter.NumericType.NONE, UCharacter.NO_NUMERIC_VALUE }, 23497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xfffe, UCharacter.NumericType.NONE, UCharacter.NO_NUMERIC_VALUE }, 23507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10301, UCharacter.NumericType.NONE, UCharacter.NO_NUMERIC_VALUE }, 23517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0xe0033, UCharacter.NumericType.NONE, UCharacter.NO_NUMERIC_VALUE }, 23527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x10ffff, UCharacter.NumericType.NONE, UCharacter.NO_NUMERIC_VALUE }, 23537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 0x110000, UCharacter.NumericType.NONE, UCharacter.NO_NUMERIC_VALUE } 23547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 23557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 23567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < values.length; ++ i) { 23577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int c = (int)values[i][0]; 23587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int type = UCharacter.getIntPropertyValue(c, 23597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UProperty.NUMERIC_TYPE); 23607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert double nv = UCharacter.getUnicodeNumericValue(c); 23617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 23627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (type != values[i][1]) { 23637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UProperty.NUMERIC_TYPE(\\u" + Utility.hex(c, 4) 23647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + ") = " + type + " should be " + (int)values[i][1]); 23657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 23667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (0.000001 <= Math.abs(nv - values[i][2])) { 23677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getUnicodeNumericValue(\\u" + Utility.hex(c, 4) 23687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + ") = " + nv + " should be " + values[i][2]); 23697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 23707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 23717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Test getNumericValue() as well. 23727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // It can only return the subset of numeric values that are 23737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // non-negative and fit into an int. 23747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int expectedInt; 23757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (values[i].length == 3) { 23767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (values[i][2] == UCharacter.NO_NUMERIC_VALUE) { 23777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectedInt = -1; 23787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 23797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectedInt = (int)values[i][2]; 23807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (expectedInt < 0 || expectedInt != values[i][2]) { 23817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // The numeric value is not a non-negative integer. 23827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectedInt = -2; 23837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 23847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 23857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 23867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expectedInt = (int)values[i][3]; 23877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 23887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int nvInt = UCharacter.getNumericValue(c); 23897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (nvInt != expectedInt) { 23907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getNumericValue(\\u" + Utility.hex(c, 4) 23917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + ") = " + nvInt + " should be " + expectedInt); 23927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 23937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 23947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 23957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 23967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 23977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test the property values API. See JB#2410. 23987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 23997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestPropertyValues() { 24007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int i, p, min, max; 24017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 24027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Min should be 0 for everything. */ 24037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Until JB#2478 is fixed, the one exception is UProperty.BLOCK. */ 24047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (p=UProperty.INT_START; p<UProperty.INT_LIMIT; ++p) { 24057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert min = UCharacter.getIntPropertyMinValue(p); 24067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (min != 0) { 24077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (p == UProperty.BLOCK) { 24087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* This is okay...for now. See JB#2487. 24097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TODO Update this for JB#2487. */ 24107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 24117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String name; 24127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert name = UCharacter.getPropertyName(p, UProperty.NameChoice.LONG); 24137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: UCharacter.getIntPropertyMinValue(" + name + ") = " + 24147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert min + ", exp. 0"); 24157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 24167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 24177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 24187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 24197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.getIntPropertyMinValue(UProperty.GENERAL_CATEGORY_MASK) 24207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert != 0 24217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || UCharacter.getIntPropertyMaxValue( 24227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UProperty.GENERAL_CATEGORY_MASK) 24237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert != -1) { 24247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: UCharacter.getIntPropertyMin/MaxValue(" 24257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "UProperty.GENERAL_CATEGORY_MASK) is wrong"); 24267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 24277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 24287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Max should be -1 for invalid properties. */ 24297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert max = UCharacter.getIntPropertyMaxValue(-1); 24307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (max != -1) { 24317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: UCharacter.getIntPropertyMaxValue(-1) = " + 24327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert max + ", exp. -1"); 24337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 24347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 24357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Script should return 0 for an invalid code point. If the API 24367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert throws an exception then that's fine too. */ 24377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (i=0; i<2; ++i) { 24387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 24397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int script = 0; 24407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String desc = null; 24417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert switch (i) { 24427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert case 0: 24437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert script = UScript.getScript(-1); 24447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert desc = "UScript.getScript(-1)"; 24457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 24467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert case 1: 24477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert script = UCharacter.getIntPropertyValue(-1, UProperty.SCRIPT); 24487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert desc = "UCharacter.getIntPropertyValue(-1, UProperty.SCRIPT)"; 24497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 24507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 24517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (script != 0) { 24527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL: " + desc + " = " + script + ", exp. 0"); 24537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 24547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (IllegalArgumentException e) {} 24557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 24567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 24577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 24587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestBidiPairedBracketType() { 24597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // BidiBrackets-6.3.0.txt says: 24607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 24617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // The set of code points listed in this file was originally derived 24627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // using the character properties General_Category (gc), Bidi_Class (bc), 24637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Bidi_Mirrored (Bidi_M), and Bidi_Mirroring_Glyph (bmg), as follows: 24647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // two characters, A and B, form a pair if A has gc=Ps and B has gc=Pe, 24657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // both have bc=ON and Bidi_M=Y, and bmg of A is B. Bidi_Paired_Bracket 24667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // maps A to B and vice versa, and their Bidi_Paired_Bracket_Type 24677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // property values are Open and Close, respectively. 24687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet bpt = new UnicodeSet("[:^bpt=n:]"); 24697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("bpt!=None is not empty", !bpt.isEmpty()); 24707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // The following should always be true. 24717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet mirrored = new UnicodeSet("[:Bidi_M:]"); 24727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet other_neutral = new UnicodeSet("[:bc=ON:]"); 24737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("bpt!=None is a subset of Bidi_M", mirrored.containsAll(bpt)); 24747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("bpt!=None is a subset of bc=ON", other_neutral.containsAll(bpt)); 24757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // The following are true at least initially in Unicode 6.3. 24767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet bpt_open = new UnicodeSet("[:bpt=o:]"); 24777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet bpt_close = new UnicodeSet("[:bpt=c:]"); 24787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet ps = new UnicodeSet("[:Ps:]"); 24797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet pe = new UnicodeSet("[:Pe:]"); 24807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("bpt=Open is a subset of Ps", ps.containsAll(bpt_open)); 24817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("bpt=Close is a subset of Pe", pe.containsAll(bpt_close)); 24827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 24837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 24847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestIsBMP() 24857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 24867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int ch[] = {0x0, -1, 0xffff, 0x10ffff, 0xff, 0x1ffff}; 24877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean flag[] = {true, false, true, false, true, false}; 24887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < ch.length; i ++) { 24897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.isBMP(ch[i]) != flag[i]) { 24907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Fail: \\u" + Utility.hex(ch[i], 8) 24917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + " failed at UCharacter.isBMP"); 24927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 24937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 24947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 24957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 24967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private boolean showADiffB(UnicodeSet a, UnicodeSet b, 24977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String a_name, String b_name, 24987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean expect, 24997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean diffIsError){ 25007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int i, start, end; 25017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean equal=true; 25027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(i=0; i < a.getRangeCount(); ++i) { 25037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert start = a.getRangeStart(i); 25047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert end = a.getRangeEnd(i); 25057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(expect!=b.contains(start, end)) { 25067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert equal=false; 25077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while(start<=end) { 25087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(expect!=b.contains(start)) { 25097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(diffIsError) { 25107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(expect) { 25117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: "+ a_name +" contains "+ hex(start)+" but "+ b_name +" does not"); 25127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 25137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("error: "+a_name +" and "+ b_name+" both contain "+hex(start) +" but should not intersect"); 25147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 25157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 25167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(expect) { 25177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("info: "+a_name +" contains "+hex(start)+ "but " + b_name +" does not"); 25187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 25197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("info: "+a_name +" and "+b_name+" both contain "+hex(start)+" but should not intersect"); 25207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 25217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 25227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 25237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ++start; 25247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 25257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 25267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 25277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return equal; 25287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 25297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private boolean showAMinusB(UnicodeSet a, UnicodeSet b, 25307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String a_name, String b_name, 25317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean diffIsError) { 25327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 25337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return showADiffB(a, b, a_name, b_name, true, diffIsError); 25347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 25357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 25367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private boolean showAIntersectB(UnicodeSet a, UnicodeSet b, 25377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String a_name, String b_name, 25387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean diffIsError) { 25397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return showADiffB(a, b, a_name, b_name, false, diffIsError); 25407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 25417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 25427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private boolean compareUSets(UnicodeSet a, UnicodeSet b, 25437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String a_name, String b_name, 25447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean diffIsError) { 25457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return 25467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert showAMinusB(a, b, a_name, b_name, diffIsError) && 25477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert showAMinusB(b, a, b_name, a_name, diffIsError); 25487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 25497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 25507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* various tests for consistency of UCD data and API behavior */ 25517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestConsistency() { 25527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet set1, set2, set3, set4; 25537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 25547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int start, end; 25557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int i, length; 25567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 25577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String hyphenPattern = "[:Hyphen:]"; 25587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String dashPattern = "[:Dash:]"; 25597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String lowerPattern = "[:Lowercase:]"; 25607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String formatPattern = "[:Cf:]"; 25617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String alphaPattern = "[:Alphabetic:]"; 25627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 25637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 25647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * It used to be that UCD.html and its precursors said 25657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * "Those dashes used to mark connections between pieces of words, 25667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * plus the Katakana middle dot." 25677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * 25687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Unicode 4 changed 00AD Soft Hyphen to Cf and removed it from Dash 25697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * but not from Hyphen. 25707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * UTC 94 (2003mar) decided to leave it that way and to change UCD.html. 25717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Therefore, do not show errors when testing the Hyphen property. 25727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 25737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Starting with Unicode 4, inconsistencies with [:Hyphen:] are\n" 25747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "known to the UTC and not considered errors.\n"); 25757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 25767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert set1=new UnicodeSet(hyphenPattern); 25777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert set2=new UnicodeSet(dashPattern); 25787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 25797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* remove the Katakana middle dot(s) from set1 */ 25807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert set1.remove(0x30fb); 25817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert set2.remove (0xff65); /* halfwidth variant */ 25827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert showAMinusB(set1, set2, "[:Hyphen:]", "[:Dash:]", false); 25837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 25847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 25857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* check that Cf is neither Hyphen nor Dash nor Alphabetic */ 25867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert set3=new UnicodeSet(formatPattern); 25877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert set4=new UnicodeSet(alphaPattern); 25887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 25897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert showAIntersectB(set3, set1, "[:Cf:]", "[:Hyphen:]", false); 25907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert showAIntersectB(set3, set2, "[:Cf:]", "[:Dash:]", true); 25917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert showAIntersectB(set3, set4, "[:Cf:]", "[:Alphabetic:]", true); 25927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 25937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Check that each lowercase character has "small" in its name 25947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * and not "capital". 25957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * There are some such characters, some of which seem odd. 25967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Use the verbose flag to see these notices. 25977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 25987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert set1=new UnicodeSet(lowerPattern); 25997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 26007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(i=0;; ++i) { 26017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// try{ 26027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// length=set1.getItem(set1, i, &start, &end, NULL, 0, &errorCode); 26037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// }catch(Exception e){ 26047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// break; 26057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// } 26067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert start = set1.getRangeStart(i); 26077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert end = set1.getRangeEnd(i); 26087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert length = i<set1.getRangeCount() ? set1.getRangeCount() : 0; 26097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(length!=0) { 26107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; /* done with code points, got a string or -1 */ 26117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 26127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 26137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while(start<=end) { 26147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String name=UCharacter.getName(start); 26157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 26167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if( (name.indexOf("SMALL")< 0 || name.indexOf("CAPITAL")<-1) && 26177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert name.indexOf("SMALL CAPITAL")==-1 26187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ) { 26197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("info: [:Lowercase:] contains U+"+hex(start) + " whose name does not suggest lowercase: " + name); 26207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 26217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ++start; 26227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 26237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 26247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 26257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 26267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 26277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Test for an example that unorm_getCanonStartSet() delivers 26287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * all characters that compose from the input one, 26297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * even in multiple steps. 26307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * For example, the set for "I" (0049) should contain both 26317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * I-diaeresis (00CF) and I-diaeresis-acute (1E2E). 26327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * In general, the set for the middle such character should be a subset 26337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * of the set for the first. 26347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 26357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Normalizer2 norm2=Normalizer2.getNFDInstance(); 26367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert set1=new UnicodeSet(); 26377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Norm2AllModes.getNFCInstance().impl. 26387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ensureCanonIterData().getCanonStartSet(0x49, set1); 26397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert set2=new UnicodeSet(); 26407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 26417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* enumerate all characters that are plausible to be latin letters */ 26427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(start=0xa0; start<0x2000; ++start) { 26437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String decomp=norm2.normalize(UTF16.valueOf(start)); 26447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(decomp.length() > 1 && decomp.charAt(0)==0x49) { 26457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert set2.add(start); 26467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 26477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 26487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 26497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert compareUSets(set1, set2, 26507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "[canon start set of 0049]", "[all c with canon decomp with 0049]", 26517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert false); 26527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 26537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 26547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 26557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCoverage() { 26567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //cover forDigit 26577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char ch1 = UCharacter.forDigit(7, 11); 26587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("UCharacter.forDigit ", "7", String.valueOf(ch1)); 26597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char ch2 = UCharacter.forDigit(17, 20); 26607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("UCharacter.forDigit ", "h", String.valueOf(ch2)); 26617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 26627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //Jitterbug 4451, for coverage 26637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0x0041; i < 0x005B; i++) { 26647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isJavaLetter(i)) 26657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(i) + " expected to be a letter"); 26667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isJavaIdentifierStart(i)) 26677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(i) + " expected to be a Java identifier start character"); 26687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isJavaLetterOrDigit(i)) 26697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(i) + " expected not to be a Java letter"); 26707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isJavaIdentifierPart(i)) 26717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(i) + " expected to be a Java identifier part character"); 26727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 26737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char[] spaces = {'\t','\n','\f','\r',' '}; 26747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < spaces.length; i++){ 26757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!UCharacter.isSpace(spaces[i])) 26767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("FAIL \\u" + hex(spaces[i]) + " expected to be a Java space"); 26777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 26787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 26797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 26807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestBlockData() 26817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 26827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Class ubc = UCharacter.UnicodeBlock.class; 26837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 26847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int b = 1; b < UCharacter.UnicodeBlock.COUNT; b += 1) { 26857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.UnicodeBlock blk = UCharacter.UnicodeBlock.getInstance(b); 26867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int id = blk.getID(); 26877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String name = blk.toString(); 26887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 26897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (id != b) { 26907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.UnicodeBlock.getInstance(" + b + ") returned a block with id = " + id); 26917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 26927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 26937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 26947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (ubc.getField(name + "_ID").getInt(blk) != b) { 26957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.UnicodeBlock.getInstance(" + b + ") returned a block with a name of " + name + 26967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " which does not match the block id."); 26977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 26987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 26997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Couldn't get the id name for id " + b); 27007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 27017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 27027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 27037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 27047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 27057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 27067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static UnicodeBlock getInstance(int id) 27077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 27087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetInstance(){ 27097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing values for invalid and valid ID 27107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] invalid_test = {-1,-10,-100}; 27117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i< invalid_test.length; i++){ 27127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.UnicodeBlock.INVALID_CODE != UCharacter.UnicodeBlock.getInstance(invalid_test[i])){ 27137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.UnicodeBlock.getInstance(invalid_test[i]) was " + 27147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "suppose to return UCharacter.UnicodeBlock.INVALID_CODE. Got " + 27157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.UnicodeBlock.getInstance(invalid_test[i]) + ". Expected " + 27167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.UnicodeBlock.INVALID_CODE); 27177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 27187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 27197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 27207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 27217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 27227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 27237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static UnicodeBlock of(int ch) 27247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 27257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestOf(){ 27267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.UnicodeBlock.INVALID_CODE != UCharacter.UnicodeBlock.of(UTF16.CODEPOINT_MAX_VALUE+1)){ 27277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.UnicodeBlock.of(UTF16.CODEPOINT_MAX_VALUE+1) was " + 27287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "suppose to return UCharacter.UnicodeBlock.INVALID_CODE. Got " + 27297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.UnicodeBlock.of(UTF16.CODEPOINT_MAX_VALUE+1) + ". Expected " + 27307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.UnicodeBlock.INVALID_CODE); 27317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 27327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 27337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 27347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 27357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 27367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static final UnicodeBlock forName(String blockName) 27377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 27387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestForName(){ 27397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //UCharacter.UnicodeBlock.forName(""); 27407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //Tests when "if (b == null)" is true 27417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 27427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 27437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 27447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 27457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static int getNumericValue(int ch) 27467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 27477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetNumericValue(){ 27487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // The following tests the else statement when 27497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // if(numericType<NumericType.COUNT) is false 27507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // The following values were obtained by testing all values from 27517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // UTF16.CODEPOINT_MIN_VALUE to UTF16.CODEPOINT_MAX_VALUE inclusively 27527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // to obtain the value to go through the else statement. 27537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] valid_values = 27547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {3058,3442,4988,8558,8559,8574,8575,8576,8577,8578,8583,8584,19975, 27557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 20159,20191,20740,20806,21315,33836,38433,65819,65820,65821,65822, 27567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 65823,65824,65825,65826,65827,65828,65829,65830,65831,65832,65833, 27577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 65834,65835,65836,65837,65838,65839,65840,65841,65842,65843,65861, 27587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 65862,65863,65868,65869,65870,65875,65876,65877,65878,65899,65900, 27597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 65901,65902,65903,65904,65905,65906,66378,68167}; 27607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 27617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] results = 27627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert {1000,1000,10000,500,1000,500,1000,1000,5000,10000,50000,100000, 27637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10000,100000000,1000,100000000,-2,1000,10000,1000,300,400,500, 27647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 600,700,800,900,1000,2000,3000,4000,5000,6000,7000,8000,9000, 27657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10000,20000,30000,40000,50000,60000,70000,80000,90000,500,5000, 27667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 50000,500,1000,5000,500,1000,10000,50000,300,500,500,500,500,500, 27677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1000,5000,900,1000}; 27687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 27697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(valid_values.length != results.length){ 27707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("The valid_values array and the results array need to be "+ 27717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "the same length."); 27727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 27737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i = 0; i < valid_values.length; i++){ 27747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 27757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getNumericValue(valid_values[i]) != results[i]){ 27767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getNumericValue(i) returned a " + 27777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "different value from the expected result. " + 27787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "Got " + UCharacter.getNumericValue(valid_values[i]) + 27797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "Expected" + results[i]); 27807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 27817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 27827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getNumericValue(int) returned an exception " + 27837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "with the parameter value"); 27847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 27857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 27867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 27877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 27887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 27897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 27907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 27917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static double getUnicodeNumericValue(int ch) 27927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 27937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // The following tests covers if(mant==0), else if(mant > 9), and default 27947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetUnicodeNumericValue(){ 27957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* The code coverage for if(mant==0), else if(mant > 9), and default 27967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * could not be covered even with input values from UTF16.CODEPOINT_MIN_VALUE 27977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * to UTF16.CODEPOINT_MAX_VALUE. I also tested from UTF16.CODEPOINT_MAX_VALUE to 27987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Integer.MAX_VALUE and didn't recieve any code coverage there too. 27997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Therefore, the code could either be dead code or meaningless. 28007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 28017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 28027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 28037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 28047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 28057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static String toString(int ch) 28067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 28077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestToString(){ 28087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] valid_tests = { 28097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.MIN_VALUE, UCharacter.MIN_VALUE+1, 28107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.MAX_VALUE-1, UCharacter.MAX_VALUE}; 28117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] invalid_tests = { 28127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.MIN_VALUE-1, UCharacter.MIN_VALUE-2, 28137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.MAX_VALUE+1, UCharacter.MAX_VALUE+2}; 28147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 28157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i< valid_tests.length; i++){ 28167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.toString(valid_tests[i]) == null){ 28177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.toString(int) was not suppose to return " + 28187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "null because it was given a valid parameter. Value passed: " + 28197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert valid_tests[i] + ". Got null."); 28207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 28217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 28227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 28237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i< invalid_tests.length; i++){ 28247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.toString(invalid_tests[i]) != null){ 28257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.toString(int) was suppose to return " + 28267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "null because it was given an invalid parameter. Value passed: " + 28277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert invalid_tests[i] + ". Got: " + UCharacter.toString(invalid_tests[i])); 28287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 28297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 28307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 28317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 28327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 28337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 28347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static int getCombiningClass(int ch) 28357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 28367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetCombiningClass(){ 28377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] valid_tests = { 28387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.MIN_VALUE, UCharacter.MIN_VALUE+1, 28397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.MAX_VALUE-1, UCharacter.MAX_VALUE}; 28407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] invalid_tests = { 28417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.MIN_VALUE-1, UCharacter.MIN_VALUE-2, 28427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.MAX_VALUE+1, UCharacter.MAX_VALUE+2}; 28437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 28447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i< valid_tests.length; i++){ 28457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 28467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getCombiningClass(valid_tests[i]); 28477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 28487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getCombiningClass(int) was not supposed to have " + 28497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "an exception. Value passed: " + valid_tests[i]); 28507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 28517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 28527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 28537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i< invalid_tests.length; i++){ 28547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 28557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("getCombiningClass(out of range)", 28567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0, UCharacter.getCombiningClass(invalid_tests[i])); 28577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 28587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getCombiningClass(int) was not supposed to have " + 28597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "an exception. Value passed: " + invalid_tests[i]); 28607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 28617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 28627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 28637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 28647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 28657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 28667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static String getName(int ch) 28677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 28687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetName(){ 28697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Need to test on other "one characters" for the getName() method 28707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] data = {"a","z"}; 28717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] results = {"LATIN SMALL LETTER A","LATIN SMALL LETTER Z"}; 28727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(data.length != results.length){ 28737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("The data array and the results array need to be "+ 28747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "the same length."); 28757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 28767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i < data.length; i++){ 28777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getName(data[i], "").compareTo(results[i]) != 0){ 28787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getName(String, String) was suppose " + 28797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "to have the same result for the data in the parameter. " + 28807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "Value passed: " + data[i] + ". Got: " + 28817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.getName(data[i], "") + ". Expected: " + 28827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert results[i]); 28837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 28847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 28857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 28867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 28877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 28887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 28897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 28907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static String getISOComment(int ch) 28917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 28927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetISOComment(){ 28937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] invalid_tests = { 28947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.MIN_VALUE-1, UCharacter.MIN_VALUE-2, 28957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.MAX_VALUE+1, UCharacter.MAX_VALUE+2}; 28967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 28977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i< invalid_tests.length; i++){ 28987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getISOComment(invalid_tests[i]) != null){ 28997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getISOComment(int) was suppose to return " + 29007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "null because it was given an invalid parameter. Value passed: " + 29017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert invalid_tests[i] + ". Got: " + UCharacter.getISOComment(invalid_tests[i])); 29027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 29037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 29047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 29057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 29067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 29077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 29087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public void setLimit(int lim) 29097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 29107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestSetLimit(){ 29117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO: Tests when "if(0<=lim && lim<=s.length())" is false 29127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 29137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 29147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 29157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 29167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public int nextCaseMapCP() 29177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 29187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestNextCaseMapCP(){ 29197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO: Tests when "if(UTF16.LEAD_SURROGATE_MIN_VALUE<=c || c<=UTF16.TRAIL_SURROGATE_MAX_VALUE)" is false 29207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* TODO: Tests when "if( c<=UTF16.LEAD_SURROGATE_MAX_VALUE && cpLimit<limit && 29217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * UTF16.TRAIL_SURROGATE_MIN_VALUE<=(c2=s.charAt(cpLimit)) && c2<=UTF16.TRAIL_SURROGATE_MAX_VALUE)" is false 29227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 29237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 29247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 29257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 29267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 29277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public void reset(int direction) 29287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 29297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestReset(){ 29307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // The method reset() is never called by another function 29317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO: Tests when "else if(direction<0)" is false 29327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 29337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 29347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 29357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 29367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static String toTitleCase(Locale locale, String str, BreakIterator breakiter) 29377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 29387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestToTitleCaseCoverage(){ 29397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //Calls the function "toTitleCase(Locale locale, String str, BreakIterator breakiter)" 29407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] locale={"en","fr","zh","ko","ja","it","de",""}; 29417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i<locale.length; i++){ 29427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.toTitleCase(new Locale(locale[i]), "", null); 29437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 29447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 29457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Calls the function "String toTitleCase(ULocale locale, String str, BreakIterator titleIter, int options)" 29467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Tests when "if (locale == null)" is true 29477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.toTitleCase((ULocale)null, "", null, 0); 29487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 29497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO: Tests when "if(index==BreakIterator.DONE || index>srcLength)" is true 29507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO: Tests when "while((c=iter.nextCaseMapCP())>=0 && UCaseProps.NONE==gCsp.getType(c))" is false 29517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO: Tests when "if(prev<titleStart)" is false 29527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO: Tests when "if(c<=0xffff)" is false 29537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO: Tests when "if(c<=0xffff)" is false 29547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO: Tests when "if(titleLimit<index)" is false 29557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO: Tests when "else if((nc=iter.nextCaseMapCP())>=0)" is false 29567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 29577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 29587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 29597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static String toUpperCase(ULocale locale, String str) 29607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 29617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestToUpperCase(){ 29627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO: Tests when "while((c=iter.nextCaseMapCP())>=0)" is false 29637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 29647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 29657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 29667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 29677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static String toLowerCase(ULocale locale, String str) 29687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 29697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestToLowerCase(){ 29707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Test when locale is null 29717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] cases = {"","a","A","z","Z","Dummy","DUMMY","dummy","a z","A Z", 29727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "'","\"","0","9","0a","a0","*","~!@#$%^&*()_+"}; 29737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i<cases.length; i++){ 29747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 29757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.toLowerCase((ULocale) null, cases[i]); 29767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 29777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.toLowerCase was not suppose to return an " + 29787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "exception for input of null and string: " + cases[i]); 29797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 29807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 29817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO: Tests when "while((c=iter.nextCaseMapCP())>=0)" is false 29827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 29837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 29847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 29857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 29867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static int getHanNumericValue(int ch) 29877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 29887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetHanNumericValue(){ 29897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] valid = { 29907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x3007, //IDEOGRAPHIC_NUMBER_ZERO_ 29917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x96f6, //CJK_IDEOGRAPH_COMPLEX_ZERO_ 29927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x4e00, //CJK_IDEOGRAPH_FIRST_ 29937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x58f9, //CJK_IDEOGRAPH_COMPLEX_ONE_ 29947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x4e8c, //CJK_IDEOGRAPH_SECOND_ 29957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x8cb3, //CJK_IDEOGRAPH_COMPLEX_TWO_ 29967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x4e09, //CJK_IDEOGRAPH_THIRD_ 29977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x53c3, //CJK_IDEOGRAPH_COMPLEX_THREE_ 29987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x56db, //CJK_IDEOGRAPH_FOURTH_ 29997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x8086, //CJK_IDEOGRAPH_COMPLEX_FOUR_ 30007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x4e94, //CJK_IDEOGRAPH_FIFTH_ 30017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x4f0d, //CJK_IDEOGRAPH_COMPLEX_FIVE_ 30027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x516d, //CJK_IDEOGRAPH_SIXTH_ 30037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x9678, //CJK_IDEOGRAPH_COMPLEX_SIX_ 30047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x4e03, //CJK_IDEOGRAPH_SEVENTH_ 30057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x67d2, //CJK_IDEOGRAPH_COMPLEX_SEVEN_ 30067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x516b, //CJK_IDEOGRAPH_EIGHTH_ 30077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x634c, //CJK_IDEOGRAPH_COMPLEX_EIGHT_ 30087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x4e5d, //CJK_IDEOGRAPH_NINETH_ 30097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x7396, //CJK_IDEOGRAPH_COMPLEX_NINE_ 30107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x5341, //CJK_IDEOGRAPH_TEN_ 30117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x62fe, //CJK_IDEOGRAPH_COMPLEX_TEN_ 30127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x767e, //CJK_IDEOGRAPH_HUNDRED_ 30137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x4f70, //CJK_IDEOGRAPH_COMPLEX_HUNDRED_ 30147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x5343, //CJK_IDEOGRAPH_THOUSAND_ 30157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x4edf, //CJK_IDEOGRAPH_COMPLEX_THOUSAND_ 30167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x824c, //CJK_IDEOGRAPH_TEN_THOUSAND_ 30177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x5104, //CJK_IDEOGRAPH_HUNDRED_MILLION_ 30187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 30197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 30207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] invalid = {-5,-2,-1,0}; 30217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 30227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] results = {0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,100,100, 30237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1000,1000,10000,100000000}; 30247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 30257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(valid.length != results.length){ 30267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("The arrays valid and results are suppose to be the same length " + 30277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "to test getHanNumericValue(int ch)."); 30287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else{ 30297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i<valid.length; i++){ 30307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getHanNumericValue(valid[i]) != results[i]){ 30317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getHanNumericValue does not return the " + 30327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "same result as expected. Passed value: " + valid[i] + 30337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ". Got: " + UCharacter.getHanNumericValue(valid[i]) + 30347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ". Expected: " + results[i]); 30357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 30367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 30377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 30387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 30397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i<invalid.length; i++){ 30407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getHanNumericValue(invalid[i]) != -1){ 30417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getHanNumericValue does not return the " + 30427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "same result as expected. Passed value: " + invalid[i] + 30437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ". Got: " + UCharacter.getHanNumericValue(invalid[i]) + 30447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ". Expected: -1"); 30457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 30467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 30477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 30487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 30497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 30507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 30517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static boolean hasBinaryProperty(int ch, int property) 30527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 30537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestHasBinaryProperty(){ 30547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing when "if (ch < MIN_VALUE || ch > MAX_VALUE)" is true 30557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] invalid = { 30567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.MIN_VALUE-1, UCharacter.MIN_VALUE-2, 30577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.MAX_VALUE+1, UCharacter.MAX_VALUE+2}; 30587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] valid = { 30597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.MIN_VALUE, UCharacter.MIN_VALUE+1, 30607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.MAX_VALUE, UCharacter.MAX_VALUE-1}; 30617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 30627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i<invalid.length; i++){ 30637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 30647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (UCharacter.hasBinaryProperty(invalid[i], 1)) { 30657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.hasBinaryProperty(ch, property) should return " + 30667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "false for out-of-range code points but " + 30677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "returns true for " + invalid[i]); 30687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 30697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e) { 30707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.hasBinaryProperty(ch, property) should not " + 30717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "throw an exception for any input. Value passed: " + 30727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert invalid[i]); 30737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 30747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 30757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 30767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i<valid.length; i++){ 30777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 30787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.hasBinaryProperty(valid[i], 1); 30797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e) { 30807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.hasBinaryProperty(ch, property) should not " + 30817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "throw an exception for any input. Value passed: " + 30827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert valid[i]); 30837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 30847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 30857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 30867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 30877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 30887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 30897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static int getIntPropertyValue(int ch, int type) 30907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 30917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetIntPropertyValue(){ 30927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Testing UCharacter.getIntPropertyValue(ch, type) */ 30937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing when "if (type < UProperty.BINARY_START)" is true 30947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] negative_cases = {-100,-50,-10,-5,-2,-1}; 30957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i<negative_cases.length; i++){ 30967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getIntPropertyValue(0, negative_cases[i]) != 0){ 30977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getIntPropertyValue(ch, type) was suppose to return 0 " + 30987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "when passing a negative value of " + negative_cases[i]); 30997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 31007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 31017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 31027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 31037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing when "if(ch<NormalizerImpl.JAMO_L_BASE)" is true 31047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=Normalizer2Impl.Hangul.JAMO_L_BASE-5; i<Normalizer2Impl.Hangul.JAMO_L_BASE; i++){ 31057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getIntPropertyValue(i, UProperty.HANGUL_SYLLABLE_TYPE) != 0){ 31067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getIntPropertyValue(ch, type) was suppose to return 0 " + 31077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "when passing ch: " + i + "and type of Property.HANGUL_SYLLABLE_TYPE"); 31087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 31097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 31107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 31117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 31127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing when "else if((ch-=NormalizerImpl.HANGUL_BASE)<0)" is true 31137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=Normalizer2Impl.Hangul.HANGUL_BASE-5; i<Normalizer2Impl.Hangul.HANGUL_BASE; i++){ 31147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getIntPropertyValue(i, UProperty.HANGUL_SYLLABLE_TYPE) != 0){ 31157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getIntPropertyValue(ch, type) was suppose to return 0 " + 31167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "when passing ch: " + i + "and type of Property.HANGUL_SYLLABLE_TYPE"); 31177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 31187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 31197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 31207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 31217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 31227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 31237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 31247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static int getIntPropertyMaxValue(int type) 31257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 31267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetIntPropertyMaxValue(){ 31277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Testing UCharacter.getIntPropertyMaxValue(type) */ 31287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing when "else if (type < UProperty.INT_START)" is true 31297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] cases = {UProperty.BINARY_LIMIT, UProperty.BINARY_LIMIT+1, 31307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UProperty.INT_START-2, UProperty.INT_START-1}; 31317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i<cases.length; i++){ 31327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getIntPropertyMaxValue(cases[i]) != -1){ 31337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getIntPropertyMaxValue was suppose to return -1 " + 31347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "but got " + UCharacter.getIntPropertyMaxValue(cases[i])); 31357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 31367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 31377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 31387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO: Testing when the case statment reaches "default" 31397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // After testing between values of UProperty.INT_START and 31407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // UProperty.INT_LIMIT are covered, none of the values reaches default. 31417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 31427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 31437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 31447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 31457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static final int codePointAt(CharSequence seq, int index) 31467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static final int codePointAt(char[] text, int index, int limit) 31477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 31487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCodePointAt(){ 31497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 31507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // {LEAD_SURROGATE_MIN_VALUE, 31517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // LEAD_SURROGATE_MAX_VALUE, LEAD_SURROGATE_MAX_VALUE-1 31527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] cases = {"\uD800","\uDBFF","\uDBFE"}; 31537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] result = {55296,56319,56318}; 31547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i < cases.length; i++){ 31557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Testing UCharacter.codePointAt(seq, index) */ 31567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing when "if (index < seq.length())" is false 31577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.codePointAt((CharSequence) cases[i], 0) != result[i]) 31587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.codePointAt(CharSequence ...) did not return as expected. " + 31597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "Passed value: " + cases[i] + ". Expected: " + 31607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result[i] + ". Got: " + 31617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.codePointAt((CharSequence) cases[i], 0)); 31627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 31637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Testing UCharacter.codePointAt(text, index) */ 31647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing when "if (index < text.length)" is false 31657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.codePointAt(cases[i].toCharArray(), 0) != result[i]) 31667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.codePointAt(char[] ...) did not return as expected. " + 31677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "Passed value: " + cases[i] + ". Expected: " + 31687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result[i] + ". Got: " + 31697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.codePointAt(cases[i].toCharArray(), 0)); 31707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 31717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Testing UCharacter.codePointAt(text, index, limit) */ 31727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing when "if (index < limit)" is false 31737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.codePointAt(cases[i].toCharArray(), 0, 1) != result[i]) 31747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.codePointAt(char[], int, int) did not return as expected. " + 31757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "Passed value: " + cases[i] + ". Expected: " + 31767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result[i] + ". Got: " + 31777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.codePointAt(cases[i].toCharArray(), 0, 1)); 31787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 31797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 31807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Testing UCharacter.codePointAt(text, index, limit) */ 31817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing when "if (index >= limit || limit > text.length)" is true 31827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char[] empty_text = {}; 31837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char[] one_char_text = {'a'}; 31847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char[] reg_text = {'d','u','m','m','y'}; 31857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] limitCases = {2,3,5,10,25}; 31867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 31877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // When index >= limit 31887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i < limitCases.length; i++){ 31897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 31907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.codePointAt(reg_text, 100, limitCases[i]); 31917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.codePointAt was suppose to return an exception " + 31927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "but got " + UCharacter.codePointAt(reg_text, 100, limitCases[i]) + 31937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ". The following passed parameters were Text: " + String.valueOf(reg_text) + ", Start: " + 31947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 100 + ", Limit: " + limitCases[i] + "."); 31957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 31967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 31977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 31987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 31997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // When limit > text.length 32007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i < limitCases.length; i++){ 32017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 32027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.codePointAt(empty_text, 0, limitCases[i]); 32037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.codePointAt was suppose to return an exception " + 32047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "but got " + UCharacter.codePointAt(empty_text, 0, limitCases[i]) + 32057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ". The following passed parameters were Text: " + String.valueOf(empty_text) + ", Start: " + 32067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0 + ", Limit: " + limitCases[i] + "."); 32077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 32087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 32097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 32107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 32117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.codePointCount(one_char_text, 0, limitCases[i]); 32127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.codePointCount was suppose to return an exception " + 32137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "but got " + UCharacter.codePointCount(one_char_text, 0, limitCases[i]) + 32147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ". The following passed parameters were Text: " + String.valueOf(one_char_text) + ", Start: " + 32157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0 + ", Limit: " + limitCases[i] + "."); 32167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 32177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 32187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 32197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 32207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 32217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 32227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 32237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static final int codePointBefore(CharSequence seq, int index) 32247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static final int codePointBefore(char[] text, int index) 32257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static final int codePointBefore(char[] text, int index, int limit) 32267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 32277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCodePointBefore(){ 32287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // {TRAIL_SURROGATE_MIN_VALUE, 32297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TRAIL_SURROGATE_MAX_VALUE, TRAIL_SURROGATE_MAX_VALUE -1 32307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] cases = {"\uDC00","\uDFFF","\uDDFE"}; 32317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] result = {56320,57343,56830}; 32327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i < cases.length; i++){ 32337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Testing UCharacter.codePointBefore(seq, index) */ 32347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing when "if (index > 0)" is false 32357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.codePointBefore((CharSequence) cases[i], 1) != result[i]) 32367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.codePointBefore(CharSequence ...) did not return as expected. " + 32377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "Passed value: " + cases[i] + ". Expected: " + 32387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result[i] + ". Got: " + 32397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.codePointBefore((CharSequence) cases[i], 1)); 32407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 32417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Testing UCharacter.codePointBefore(text, index) */ 32427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing when "if (index > 0)" is false 32437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.codePointBefore(cases[i].toCharArray(), 1) != result[i]) 32447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.codePointBefore(char[] ...) did not return as expected. " + 32457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "Passed value: " + cases[i] + ". Expected: " + 32467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result[i] + ". Got: " + 32477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.codePointBefore(cases[i].toCharArray(), 1)); 32487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 32497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Testing UCharacter.codePointBefore(text, index, limit) */ 32507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing when "if (index > limit)" is false 32517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.codePointBefore(cases[i].toCharArray(), 1, 0) != result[i]) 32527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.codePointBefore(char[], int, int) did not return as expected. " + 32537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "Passed value: " + cases[i] + ". Expected: " + 32547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result[i] + ". Got: " + 32557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.codePointBefore(cases[i].toCharArray(), 1, 0)); 32567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 32577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 32587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Testing UCharacter.codePointBefore(text, index, limit) */ 32597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char[] dummy = {'d','u','m','m','y'}; 32607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing when "if (index <= limit || limit < 0)" is true 32617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] negative_cases = {-100,-10,-5,-2,-1}; 32627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] index_cases = {0,1,2,5,10,100}; 32637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 32647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i < negative_cases.length; i++){ 32657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 32667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.codePointBefore(dummy, 10000, negative_cases[i]); 32677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.codePointBefore(text, index, limit) was suppose to return an exception " + 32687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "when the parameter limit of " + negative_cases[i] + " is a negative number."); 32697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e) {} 32707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 32717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 32727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i < index_cases.length; i++){ 32737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 32747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.codePointBefore(dummy, index_cases[i], 101); 32757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.codePointBefore(text, index, limit) was suppose to return an exception " + 32767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "when the parameter index of " + index_cases[i] + " is a negative number."); 32777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e) {} 32787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 32797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 32807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 32817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 32827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 32837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static final int toChars(int cp, char[] dst, int dstIndex) 32847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static final char[] toChars(int cp) 32857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 32867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestToChars(){ 32877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] positive_cases = {1,2,5,10,100}; 32887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char[] dst = {'a'}; 32897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 32907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Testing UCharacter.toChars(cp, dst, dstIndex) */ 32917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i < positive_cases.length; i++){ 32927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing negative values when cp < 0 for if (cp >= 0) 32937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 32947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.toChars(-1*positive_cases[i],dst,0); 32957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.toChars(int,char[],int) was suppose to return an exception " + 32967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "when the parameter " + (-1*positive_cases[i]) + " is a negative number."); 32977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 32987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 32997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 33007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing when "if (cp < MIN_SUPPLEMENTARY_CODE_POINT)" is true 33017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.toChars(UCharacter.MIN_SUPPLEMENTARY_CODE_POINT-positive_cases[i], dst, 0) != 1){ 33027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.toChars(int,char[],int) was suppose to return a value of 1. Got: " + 33037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.toChars(UCharacter.MIN_SUPPLEMENTARY_CODE_POINT-positive_cases[i], dst, 0)); 33047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 33057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 33067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing when "if (cp < MIN_SUPPLEMENTARY_CODE_POINT)" is false and 33077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // when "if (cp <= MAX_CODE_POINT)" is false 33087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 33097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.toChars(UCharacter.MAX_CODE_POINT+positive_cases[i],dst,0); 33107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.toChars(int,char[],int) was suppose to return an exception " + 33117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "when the parameter " + (UCharacter.MAX_CODE_POINT+positive_cases[i]) + 33127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " is a large number."); 33137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 33147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 33157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 33167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 33177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 33187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Testing UCharacter.toChars(cp)*/ 33197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i<positive_cases.length; i++){ 33207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing negative values when cp < 0 for if (cp >= 0) 33217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 33227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.toChars(-1*positive_cases[i]); 33237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.toChars(cint) was suppose to return an exception " + 33247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "when the parameter " + positive_cases[i] + " is a negative number."); 33257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 33267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 33277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 33287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing when "if (cp < MIN_SUPPLEMENTARY_CODE_POINT)" is true 33297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.toChars(UCharacter.MIN_SUPPLEMENTARY_CODE_POINT-positive_cases[i]).length <= 0){ 33307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.toChars(int) was suppose to return some result result when the parameter " + 33317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert (UCharacter.MIN_SUPPLEMENTARY_CODE_POINT-positive_cases[i]) + "is passed."); 33327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 33337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 33347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Testing when "if (cp < MIN_SUPPLEMENTARY_CODE_POINT)" is false and 33357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // when "if (cp <= MAX_CODE_POINT)" is false 33367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 33377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.toChars(UCharacter.MAX_CODE_POINT+positive_cases[i]); 33387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.toChars(int) was suppose to return an exception " + 33397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "when the parameter " + positive_cases[i] + " is a large number."); 33407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 33417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 33427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 33437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 33447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 33457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 33467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 33477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static int codePointCount(CharSequence text, int start, int limit) 33487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public static int codePointCount(char[] text, int start, int limit) 33497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 33507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCodePointCount(){ 33517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // The following tests the first if statement to make it true: 33527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // if (start < 0 || limit < start || limit > text.length) 33537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // which will throw an exception. 33547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char[] empty_text = {}; 33557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char[] one_char_text = {'a'}; 33567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char[] reg_text = {'d','u','m','m','y'}; 33577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] invalid_startCases = {-1,-2,-5,-10,-100}; 33587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] limitCases = {2,3,5,10,25}; 33597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 33607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // When start < 0 33617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i < invalid_startCases.length; i++){ 33627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 33637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.codePointCount(reg_text, invalid_startCases[i], 1); 33647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.codePointCount was suppose to return an exception " + 33657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "but got " + UCharacter.codePointCount(reg_text, invalid_startCases[i], 1) + 33667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ". The following passed parameters were Text: " + String.valueOf(reg_text) + ", Start: " + 33677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert invalid_startCases[i] + ", Limit: " + 1 + "."); 33687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 33697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 33707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 33717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 33727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // When limit < start 33737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i < limitCases.length; i++){ 33747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 33757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.codePointCount(reg_text, 100, limitCases[i]); 33767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.codePointCount was suppose to return an exception " + 33777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "but got " + UCharacter.codePointCount(reg_text, 100, limitCases[i]) + 33787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ". The following passed parameters were Text: " + String.valueOf(reg_text) + ", Start: " + 33797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 100 + ", Limit: " + limitCases[i] + "."); 33807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 33817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 33827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 33837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 33847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // When limit > text.length 33857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i < limitCases.length; i++){ 33867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 33877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.codePointCount(empty_text, 0, limitCases[i]); 33887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.codePointCount was suppose to return an exception " + 33897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "but got " + UCharacter.codePointCount(empty_text, 0, limitCases[i]) + 33907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ". The following passed parameters were Text: " + String.valueOf(empty_text) + ", Start: " + 33917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0 + ", Limit: " + limitCases[i] + "."); 33927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 33937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 33947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 33957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 33967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UCharacter.codePointCount(one_char_text, 0, limitCases[i]); 33977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.codePointCount was suppose to return an exception " + 33987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "but got " + UCharacter.codePointCount(one_char_text, 0, limitCases[i]) + 33997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ". The following passed parameters were Text: " + String.valueOf(one_char_text) + ", Start: " + 34007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0 + ", Limit: " + limitCases[i] + "."); 34017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){ 34027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 34037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 34047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 34057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 34067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* 34077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The following method tests 34087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * private static int getEuropeanDigit(int ch) 34097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * The method needs to use the method "digit" in order to access the 34107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * getEuropeanDigit method. 34117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 34127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetEuropeanDigit(){ 34137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //The number retrieved from 0xFF41 to 0xFF5A is due to 34147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // exhaustive testing from UTF16.CODEPOINT_MIN_VALUE to 34157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // UTF16.CODEPOINT_MAX_VALUE return a value of -1. 34167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 34177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] radixResult = { 34187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 10,11,12,13,14,15,16,17,18,19,20,21,22, 34197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 23,24,25,26,27,28,29,30,31,32,33,34,35}; 34207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Invalid and too-small-for-these-digits radix values. 34217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] radixCase1 = {0,1,5,10,100}; 34227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Radix values that work for at least some of the "digits". 34237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] radixCase2 = {12,16,20,36}; 34247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 34257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0xFF41; i<=0xFF5A; i++){ 34267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int j=0; j < radixCase1.length; j++){ 34277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.digit(i, radixCase1[j]) != -1){ 34287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.digit(int,int) was supposed to return -1 for radix " + radixCase1[j] 34297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + ". Value passed: U+" + Integer.toHexString(i) + ". Got: " + UCharacter.digit(i, radixCase1[j])); 34307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 34317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 34327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int j=0; j < radixCase2.length; j++){ 34337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int radix = radixCase2[j]; 34347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int expected = (radixResult[i-0xFF41] < radix) ? radixResult[i-0xFF41] : -1; 34357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int actual = UCharacter.digit(i, radix); 34367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(actual != expected){ 34377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.digit(int,int) was supposed to return " + 34387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert expected + " for radix " + radix + 34397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ". Value passed: U+" + Integer.toHexString(i) + ". Got: " + actual); 34407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 34417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 34427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 34437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 34447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 34457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 34467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Tests the method 34477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * private static final int getProperty(int ch) 34487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * from public static int getType(int ch) 34497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 34507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetProperty(){ 34517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] cases = {UTF16.CODEPOINT_MAX_VALUE+1, UTF16.CODEPOINT_MAX_VALUE+2}; 34527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i < cases.length; i++) 34537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(UCharacter.getType(cases[i]) != 0) 34547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UCharacter.getType for testing UCharacter.getProperty " 34557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + "did not return 0 for passed value of " + cases[i] + 34567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " but got " + UCharacter.getType(cases[i])); 34577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 34587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 34597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Tests the class 34607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * abstract public static class XSymbolTable implements SymbolTable 34617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 34627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestXSymbolTable(){ 34637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert class MyXSymbolTable extends UnicodeSet.XSymbolTable {} 34647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert MyXSymbolTable st = new MyXSymbolTable(); 34657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 34667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Tests "public UnicodeMatcher lookupMatcher(int i)" 34677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(st.lookupMatcher(0) != null) 34687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("XSymbolTable.lookupMatcher(int i) was suppose to return null."); 34697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 34707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Tests "public boolean applyPropertyAlias(String propertyName, String propertyValue, UnicodeSet result)" 34717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(st.applyPropertyAlias("", "", new UnicodeSet()) != false) 34727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("XSymbolTable.applyPropertyAlias(String propertyName, String propertyValue, UnicodeSet result) was suppose to return false."); 34737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 34747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Tests "public char[] lookup(String s)" 34757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(st.lookup("") != null) 34767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("XSymbolTable.lookup(String s) was suppose to return null."); 34777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 34787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Tests "public String parseReference(String text, ParsePosition pos, int limit)" 34797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(st.parseReference("", null, 0) != null) 34807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("XSymbolTable.parseReference(String text, ParsePosition pos, int limit) was suppose to return null."); 34817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 34827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 34837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Tests the method 34847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public boolean isFrozen() 34857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 34867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestIsFrozen(){ 34877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet us = new UnicodeSet(); 34887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(us.isFrozen() != false) 34897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Unicode.isFrozen() was suppose to return false."); 34907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 34917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert us.freeze(); 34927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(us.isFrozen() != true) 34937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Unicode.isFrozen() was suppose to return true."); 34947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 34957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 3496