]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/tests/core/src/com/ibm/icu/dev/test/lang/UCharacterCompare.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / tests / core / src / com / ibm / icu / dev / test / lang / UCharacterCompare.java
1 /**\r
2 *******************************************************************************\r
3 * Copyright (C) 1996-2010, International Business Machines Corporation and    *\r
4 * others. All Rights Reserved.                                                *\r
5 *******************************************************************************\r
6 */\r
7 \r
8 package com.ibm.icu.dev.test.lang;\r
9 \r
10 import java.io.FileWriter;\r
11 import java.io.PrintWriter;\r
12 import java.util.Enumeration;\r
13 import java.util.Hashtable;\r
14 \r
15 import com.ibm.icu.lang.UCharacter;\r
16 import com.ibm.icu.lang.UCharacterCategory;\r
17 \r
18 /**\r
19 * A class to compare the difference in methods between java.lang.Character and\r
20 * UCharacter\r
21 * @author Syn Wee Quek\r
22 * @since oct 06 2000\r
23 * @see com.ibm.icu.lang.UCharacter\r
24 */\r
25 \r
26 public final class UCharacterCompare\r
27\r
28   // private variables ================================================\r
29   \r
30   private static Hashtable m_hashtable_ = new Hashtable();\r
31   \r
32   // public methods ======================================================\r
33   \r
34   /**\r
35   * Main testing method\r
36   */\r
37   public static void main(String arg[])\r
38   {\r
39       System.out.println("Starting character compare");\r
40     try\r
41     {\r
42       FileWriter f;\r
43       if (arg.length == 0)\r
44         f = new FileWriter("compare.txt");\r
45       else\r
46         f = new FileWriter(arg[0]);\r
47       PrintWriter p = new PrintWriter(f);\r
48       p.print("char  character name                                                           ");\r
49       p.println("method name               ucharacter character");\r
50       for (char i = Character.MIN_VALUE; i < Character.MAX_VALUE; i ++)\r
51       {\r
52           System.out.println("character \\u" + Integer.toHexString(i));\r
53         if (UCharacter.isDefined(i) != Character.isDefined(i))\r
54           trackDifference(p, i, "isDefined()", "" + UCharacter.isDefined(i), \r
55                           "" + Character.isDefined(i));\r
56         else\r
57         {\r
58           if (UCharacter.digit(i, 10) != Character.digit(i, 10))\r
59             trackDifference(p, i, "digit()", "" + UCharacter.digit(i, 10),\r
60                             "" + Character.digit(i, 10));\r
61           if (UCharacter.getNumericValue(i) != Character.getNumericValue(i))\r
62             trackDifference(p, i, "getNumericValue()", \r
63                             "" + UCharacter.getNumericValue(i),\r
64                             "" + Character.getNumericValue(i));\r
65           if (!compareType(UCharacter.getType(i), Character.getType(i)))\r
66             trackDifference(p, i, "getType()", "" + UCharacter.getType(i),\r
67                             "" + Character.getType(i));\r
68           if (UCharacter.isDigit(i) != Character.isDigit(i))\r
69             trackDifference(p, i, "isDigit()",\r
70                             "" + UCharacter.isDigit(i), \r
71                             "" + Character.isDigit(i));\r
72           if (UCharacter.isISOControl(i) != Character.isISOControl(i))\r
73             trackDifference(p, i, "isISOControl()", \r
74                             "" + UCharacter.isISOControl(i),\r
75                             "" + Character.isISOControl(i));\r
76           if (UCharacter.isLetter(i) != Character.isLetter(i))\r
77             trackDifference(p, i, "isLetter()", "" + UCharacter.isLetter(i),\r
78                             "" + Character.isLetter(i));\r
79           if (UCharacter.isLetterOrDigit(i) != Character.isLetterOrDigit(i))\r
80             trackDifference(p, i, "isLetterOrDigit()", \r
81                             "" + UCharacter.isLetterOrDigit(i),\r
82                             "" + Character.isLetterOrDigit(i));\r
83           if (UCharacter.isLowerCase(i) != Character.isLowerCase(i))\r
84             trackDifference(p, i, "isLowerCase()", \r
85                             "" + UCharacter.isLowerCase(i),\r
86                             "" + Character.isLowerCase(i));\r
87           if (UCharacter.isWhitespace(i) != Character.isWhitespace(i))\r
88             trackDifference(p, i, "isWhitespace()", \r
89                             "" + UCharacter.isWhitespace(i),\r
90                             "" + Character.isWhitespace(i));\r
91           if (UCharacter.isSpaceChar(i) != Character.isSpaceChar(i))\r
92             trackDifference(p, i, "isSpaceChar()", \r
93                             "" + UCharacter.isSpaceChar(i),\r
94                             "" + Character.isSpaceChar(i));\r
95           if (UCharacter.isTitleCase(i) != Character.isTitleCase(i))\r
96             trackDifference(p, i, "isTitleChar()", \r
97                             "" + UCharacter.isTitleCase(i),\r
98                             "" + Character.isTitleCase(i));\r
99           if (UCharacter.isUnicodeIdentifierPart(i) != \r
100               Character.isUnicodeIdentifierPart(i))\r
101             trackDifference(p, i, "isUnicodeIdentifierPart()", \r
102                             "" + UCharacter.isUnicodeIdentifierPart(i),\r
103                             "" + Character.isUnicodeIdentifierPart(i));\r
104           if (UCharacter.isUnicodeIdentifierStart(i) != \r
105               Character.isUnicodeIdentifierStart(i))\r
106             trackDifference(p, i, "isUnicodeIdentifierStart()",\r
107                             "" + UCharacter.isUnicodeIdentifierStart(i),\r
108                             "" + Character.isUnicodeIdentifierStart(i));\r
109           if (UCharacter.isIdentifierIgnorable(i) != \r
110               Character.isIdentifierIgnorable(i))\r
111             trackDifference(p, i, "isIdentifierIgnorable()",\r
112                             "" + UCharacter.isIdentifierIgnorable(i),\r
113                             "" + Character.isIdentifierIgnorable(i));\r
114           if (UCharacter.isUpperCase(i) != Character.isUpperCase(i))\r
115             trackDifference(p, i, "isUpperCase()", \r
116                             "" + UCharacter.isUpperCase(i),\r
117                             "" + Character.isUpperCase(i));\r
118           if (UCharacter.toLowerCase(i) != Character.toLowerCase(i))\r
119             trackDifference(p, i, "toLowerCase()", \r
120                             Integer.toHexString(UCharacter.toLowerCase(i)),\r
121                             Integer.toHexString(Character.toLowerCase(i)));\r
122           if (!UCharacter.toString(i).equals(new Character(i).toString()))\r
123             trackDifference(p, i, "toString()",\r
124                             UCharacter.toString(i),\r
125                             new Character(i).toString());\r
126           if (UCharacter.toTitleCase(i) != Character.toTitleCase(i))\r
127             trackDifference(p, i, "toTitleCase()",\r
128                             Integer.toHexString(UCharacter.toTitleCase(i)),\r
129                             Integer.toHexString(Character.toTitleCase(i)));\r
130           if (UCharacter.toUpperCase(i) != Character.toUpperCase(i))\r
131             trackDifference(p, i, "toUpperCase()",\r
132                             Integer.toHexString(UCharacter.toUpperCase(i)),\r
133                             Integer.toHexString(Character.toUpperCase(i)));\r
134         }\r
135       }\r
136       summary(p);\r
137       p.close();\r
138     } \r
139     catch (Exception e)\r
140     {\r
141       e.printStackTrace();\r
142     }\r
143   }\r
144   \r
145   // private methods ===================================================\r
146   \r
147   /**\r
148   * Comparing types\r
149   * @param uchartype UCharacter type\r
150   * @param jchartype java.lang.Character type\r
151   */\r
152   private static boolean compareType(int uchartype, int jchartype)\r
153   {\r
154     if (uchartype == UCharacterCategory.UNASSIGNED && \r
155         jchartype == Character.UNASSIGNED)\r
156       return true;\r
157     if (uchartype == UCharacterCategory.UPPERCASE_LETTER && \r
158         jchartype == Character.UPPERCASE_LETTER)\r
159       return true;                                                   \r
160     if (uchartype == UCharacterCategory.LOWERCASE_LETTER && \r
161         jchartype == Character.LOWERCASE_LETTER)\r
162       return true;                                                   \r
163     if (uchartype == UCharacterCategory.TITLECASE_LETTER && \r
164         jchartype == Character.TITLECASE_LETTER)\r
165       return true;\r
166     if (uchartype == UCharacterCategory.MODIFIER_LETTER && \r
167         jchartype == Character.MODIFIER_LETTER)\r
168       return true;\r
169     if (uchartype == UCharacterCategory.OTHER_LETTER && \r
170         jchartype == Character.OTHER_LETTER)\r
171       return true;\r
172     if (uchartype == UCharacterCategory.NON_SPACING_MARK && \r
173         jchartype == Character.NON_SPACING_MARK)\r
174       return true;\r
175     if (uchartype == UCharacterCategory.ENCLOSING_MARK && \r
176         jchartype == Character.ENCLOSING_MARK)\r
177       return true;\r
178     if (uchartype == UCharacterCategory.COMBINING_SPACING_MARK && \r
179         jchartype == Character.COMBINING_SPACING_MARK)\r
180       return true;\r
181       if (uchartype == UCharacterCategory.DECIMAL_DIGIT_NUMBER && \r
182         jchartype == Character.DECIMAL_DIGIT_NUMBER)\r
183       return true;\r
184       if (uchartype == UCharacterCategory.LETTER_NUMBER && \r
185         jchartype == Character.LETTER_NUMBER)\r
186       return true;\r
187       if (uchartype == UCharacterCategory.OTHER_NUMBER && \r
188         jchartype == Character.OTHER_NUMBER)\r
189       return true;\r
190       if (uchartype == UCharacterCategory.SPACE_SEPARATOR && \r
191         jchartype == Character.SPACE_SEPARATOR)\r
192       return true;\r
193       if (uchartype == UCharacterCategory.LINE_SEPARATOR && \r
194         jchartype == Character.LINE_SEPARATOR)\r
195       return true;\r
196       if (uchartype == UCharacterCategory.PARAGRAPH_SEPARATOR && \r
197         jchartype == Character.PARAGRAPH_SEPARATOR)\r
198       return true;\r
199       if (uchartype == UCharacterCategory.CONTROL && \r
200         jchartype == Character.CONTROL)\r
201       return true;\r
202     if (uchartype == UCharacterCategory.FORMAT && \r
203         jchartype == Character.FORMAT)\r
204       return true;\r
205       if (uchartype == UCharacterCategory.PRIVATE_USE && \r
206         jchartype == Character.PRIVATE_USE)\r
207       return true;\r
208     if (uchartype == UCharacterCategory.SURROGATE && \r
209         jchartype == Character.SURROGATE)\r
210       return true;\r
211     if (uchartype == UCharacterCategory.DASH_PUNCTUATION && \r
212         jchartype == Character.DASH_PUNCTUATION)\r
213       return true;\r
214       if (uchartype == UCharacterCategory.START_PUNCTUATION && \r
215         jchartype == Character.START_PUNCTUATION)\r
216       return true;\r
217       if (uchartype == UCharacterCategory.END_PUNCTUATION && \r
218         jchartype == Character.END_PUNCTUATION)\r
219       return true;\r
220     if (uchartype == UCharacterCategory.CONNECTOR_PUNCTUATION && \r
221         jchartype == Character.CONNECTOR_PUNCTUATION)\r
222       return true;\r
223     if (uchartype == UCharacterCategory.OTHER_PUNCTUATION && \r
224         jchartype == Character.OTHER_PUNCTUATION)\r
225       return true;\r
226       if (uchartype == UCharacterCategory.MATH_SYMBOL && \r
227         jchartype == Character.MATH_SYMBOL)\r
228       return true;\r
229       if (uchartype == UCharacterCategory.CURRENCY_SYMBOL && \r
230         jchartype == Character.CURRENCY_SYMBOL)\r
231       return true;\r
232       if (uchartype == UCharacterCategory.MODIFIER_SYMBOL && \r
233         jchartype == Character.MODIFIER_SYMBOL)\r
234       return true;\r
235       if (uchartype == UCharacterCategory.OTHER_SYMBOL && \r
236         jchartype == Character.OTHER_SYMBOL)\r
237       return true;\r
238       if (uchartype == UCharacterCategory.INITIAL_PUNCTUATION && \r
239         jchartype == Character.START_PUNCTUATION)\r
240       return true;\r
241     if (uchartype == UCharacterCategory.FINAL_PUNCTUATION && \r
242         jchartype == Character.END_PUNCTUATION)\r
243       return true;\r
244       /*if (uchartype == UCharacterCategory.GENERAL_OTHER_TYPES && \r
245         jchartype == Character.GENERAL_OTHER_TYPES)\r
246       return true;*/\r
247     return false;\r
248     }\r
249     \r
250     /**\r
251     * Difference writing to file\r
252     * @param f file outputstream\r
253     * @param ch code point\r
254     * @param method for testing\r
255     * @param ucharval UCharacter value after running method\r
256     * @param charval Character value after running method\r
257     */\r
258     private static void trackDifference(PrintWriter f, int ch, String method,\r
259                                         String ucharval, String charval)\r
260       throws Exception\r
261     {\r
262       if (m_hashtable_.containsKey(method))\r
263       {\r
264         Integer value = (Integer)m_hashtable_.get(method);\r
265         m_hashtable_.put(method, new Integer(value.intValue() + 1));\r
266       }\r
267       else\r
268         m_hashtable_.put(method, new Integer(1));\r
269       \r
270       String temp = Integer.toHexString(ch);\r
271       StringBuffer s = new StringBuffer(temp);\r
272       for (int i = 0; i < 6 - temp.length(); i ++)\r
273         s.append(' ');\r
274       temp = UCharacter.getExtendedName(ch);\r
275       if (temp == null)\r
276         temp = " ";\r
277       s.append(temp);\r
278       for (int i = 0; i < 73 - temp.length(); i ++)\r
279         s.append(' ');\r
280       \r
281       s.append(method);\r
282       for (int i = 0; i < 27 - method.length(); i ++)\r
283         s.append(' ');\r
284       s.append(ucharval);\r
285       for (int i = 0; i < 11 - ucharval.length(); i ++)\r
286         s.append(' ');\r
287       s.append(charval);\r
288       f.println(s.toString());\r
289     }\r
290     \r
291     /**\r
292     * Does up a summary of the differences\r
293     * @param f file outputstream\r
294     */\r
295     private static void summary(PrintWriter f)\r
296     {\r
297       f.println("==================================================");\r
298       f.println("Summary of differences");\r
299       for (Enumeration e = m_hashtable_.keys() ; e.hasMoreElements() ;) \r
300       {\r
301         StringBuffer method = new StringBuffer((String)e.nextElement());\r
302         int count = ((Integer)m_hashtable_.get(method.toString())).intValue();\r
303         for (int i = 30 - method.length(); i > 0; i --)\r
304           method.append(' ');\r
305       f.println(method + "  " + count);\r
306     }\r
307     }\r
308 }\r
309 \r