]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/tests/core/src/com/ibm/icu/dev/test/serializable/SerializableTest.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / tests / core / src / com / ibm / icu / dev / test / serializable / SerializableTest.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 1996-2009, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  *\r
7  */\r
8 \r
9 package com.ibm.icu.dev.test.serializable;\r
10 \r
11 import java.util.Date;\r
12 import java.util.HashMap;\r
13 import java.util.Locale;\r
14 \r
15 import com.ibm.icu.dev.test.TestFmwk;\r
16 import com.ibm.icu.impl.JavaTimeZone;\r
17 import com.ibm.icu.impl.OlsonTimeZone;\r
18 import com.ibm.icu.impl.TimeZoneAdapter;\r
19 import com.ibm.icu.math.BigDecimal;\r
20 import com.ibm.icu.math.MathContext;\r
21 import com.ibm.icu.util.AnnualTimeZoneRule;\r
22 import com.ibm.icu.util.Calendar;\r
23 import com.ibm.icu.util.Currency;\r
24 import com.ibm.icu.util.DateInterval;\r
25 import com.ibm.icu.util.DateTimeRule;\r
26 import com.ibm.icu.util.GregorianCalendar;\r
27 import com.ibm.icu.util.InitialTimeZoneRule;\r
28 import com.ibm.icu.util.RuleBasedTimeZone;\r
29 import com.ibm.icu.util.SimpleTimeZone;\r
30 import com.ibm.icu.util.TimeArrayTimeZoneRule;\r
31 import com.ibm.icu.util.TimeZone;\r
32 import com.ibm.icu.util.TimeZoneRule;\r
33 import com.ibm.icu.util.ULocale;\r
34 import com.ibm.icu.util.VTimeZone;\r
35 \r
36 /**\r
37  * @author emader\r
38  *\r
39  * TODO To change the template for this generated type comment go to\r
40  * Window - Preferences - Java - Code Style - Code Templates\r
41  */\r
42 public class SerializableTest extends TestFmwk.TestGroup\r
43 {\r
44     public interface Handler\r
45     {\r
46         public Object[] getTestObjects();\r
47         \r
48         public boolean hasSameBehavior(Object a, Object b);\r
49     }\r
50     \r
51     public static Handler getHandler(String className)\r
52     {\r
53         return (Handler) map.get(className);\r
54     }\r
55     \r
56     private static class TimeZoneHandler implements Handler\r
57     {\r
58         String[] ZONES = { "GMT", "MET", "IST" };\r
59 \r
60         public Object[] getTestObjects()\r
61         {\r
62             TimeZone zones[] = new TimeZone[ZONES.length];\r
63             \r
64             for(int z = 0; z < ZONES.length; z += 1) {\r
65                 zones[z] = TimeZone.getTimeZone(ZONES[z]);\r
66             }\r
67             \r
68             return zones;\r
69         }\r
70         \r
71         public boolean hasSameBehavior(Object a, Object b)\r
72         {\r
73             TimeZone zone_a = (TimeZone) a;\r
74             TimeZone zone_b = (TimeZone) b;\r
75 \r
76             if (!(zone_a.getDisplayName().equals(zone_b.getDisplayName()))) {\r
77                 return false;\r
78             }\r
79 \r
80             int a_offsets[] = {0, 0};\r
81             int b_offsets[] = {0, 0};\r
82 \r
83             boolean bSame = true;\r
84             for (int i = 0; i < sampleTimes.length; i++) {\r
85                 zone_a.getOffset(sampleTimes[i], false, a_offsets);\r
86                 zone_b.getOffset(sampleTimes[i], false, b_offsets);\r
87                 if (a_offsets[0] != b_offsets[0] || a_offsets[1] != b_offsets[1]) {\r
88                     bSame = false;\r
89                     break;\r
90                 }\r
91             }\r
92             return bSame;\r
93         }\r
94     }\r
95     \r
96     private static Locale locales[] = {\r
97         Locale.CANADA, Locale.CANADA_FRENCH, Locale.CHINA, \r
98         Locale.CHINESE, Locale.ENGLISH, Locale.FRANCE, Locale.FRENCH, \r
99         Locale.GERMAN, Locale.GERMANY, Locale.ITALIAN, Locale.ITALY, \r
100         Locale.JAPAN, Locale.JAPANESE, Locale.KOREA, Locale.KOREAN, \r
101         Locale.PRC, Locale.SIMPLIFIED_CHINESE, Locale.TAIWAN, \r
102         Locale.TRADITIONAL_CHINESE, Locale.UK, Locale.US\r
103     };\r
104     \r
105     private static Locale places[] = {\r
106         Locale.CANADA, Locale.CANADA_FRENCH, Locale.CHINA, \r
107         Locale.FRANCE, Locale.GERMANY, Locale.ITALY, \r
108         Locale.JAPAN, Locale.KOREA, Locale.PRC, Locale.TAIWAN, \r
109         Locale.UK, Locale.US\r
110     };\r
111     \r
112     public static Locale[] getLocales()\r
113     {\r
114         return locales;\r
115     }\r
116     \r
117     public static boolean compareStrings(String a[], String b[])\r
118     {\r
119         if (a.length != b.length) {\r
120             return false;\r
121         }\r
122         \r
123         for (int i = 0; i < a.length; i += 1) {\r
124             if (! a[i].equals(b[i])) {\r
125                 return false;\r
126             }\r
127         }\r
128         \r
129         return true;\r
130     }\r
131     \r
132     public static boolean compareChars(char a[], char b[])\r
133     {\r
134         if (a.length != b.length) {\r
135             return false;\r
136         }\r
137         \r
138         for (int i = 0; i < a.length; i += 1) {\r
139             if (a[i] != b[i]) {\r
140                 return false;\r
141             }\r
142         }\r
143         \r
144         return true;\r
145     }\r
146 \r
147     private static class SimpleTimeZoneHandler extends TimeZoneHandler\r
148     {\r
149         public Object[] getTestObjects()\r
150         {\r
151             SimpleTimeZone simpleTimeZones[] = new SimpleTimeZone[6];\r
152             \r
153             simpleTimeZones[0] = new SimpleTimeZone(32400000, "MyTimeZone");\r
154             \r
155             simpleTimeZones[1] = new SimpleTimeZone(32400000, "Asia/Tokyo");\r
156             \r
157             simpleTimeZones[2] = new SimpleTimeZone(32400000, "Asia/Tokyo");\r
158             simpleTimeZones[2].setRawOffset(0);\r
159             \r
160             simpleTimeZones[3] = new SimpleTimeZone(32400000, "Asia/Tokyo");\r
161             simpleTimeZones[3].setStartYear(100);\r
162             \r
163             simpleTimeZones[4] = new SimpleTimeZone(32400000, "Asia/Tokyo");\r
164             simpleTimeZones[4].setStartYear(1000);\r
165             simpleTimeZones[4].setDSTSavings(1800000);\r
166             simpleTimeZones[4].setStartRule(3, 4, 180000);\r
167             simpleTimeZones[4].setEndRule(6, 3, 4, 360000);\r
168             \r
169             simpleTimeZones[5] = new SimpleTimeZone(32400000, "Asia/Tokyo");\r
170             simpleTimeZones[5].setStartRule(2, 3, 4, 360000);\r
171             simpleTimeZones[5].setEndRule(6, 3, 4, 360000);\r
172             \r
173             return simpleTimeZones;\r
174         }\r
175     }\r
176 \r
177     private static class VTimeZoneHandler extends TimeZoneHandler {\r
178         public Object[] getTestObjects() {\r
179             //TODO\r
180             VTimeZone[] vtzs = new VTimeZone[1];\r
181             vtzs[0] = VTimeZone.create("America/New_York");\r
182             return vtzs;\r
183         }\r
184     }\r
185 \r
186     private static final int HOUR = 60*60*1000;\r
187     private static final AnnualTimeZoneRule[] TEST_US_EASTERN = {\r
188         new AnnualTimeZoneRule("EST", -5*HOUR, 0,\r
189                 new DateTimeRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2*HOUR, DateTimeRule.WALL_TIME),\r
190                 1967, 2006),\r
191         \r
192         new AnnualTimeZoneRule("EST", -5*HOUR, 0,\r
193                 new DateTimeRule(Calendar.NOVEMBER, 1, Calendar.SUNDAY, true, 2*HOUR, DateTimeRule.WALL_TIME),\r
194                 2007, AnnualTimeZoneRule.MAX_YEAR),\r
195         \r
196         new AnnualTimeZoneRule("EDT", -5*HOUR, 1*HOUR,\r
197                 new DateTimeRule(Calendar.APRIL, -1, Calendar.SUNDAY, 2*HOUR, DateTimeRule.WALL_TIME),\r
198                 1967, 1973),\r
199 \r
200         new AnnualTimeZoneRule("EDT", -5*HOUR, 1*HOUR,\r
201                 new DateTimeRule(Calendar.JANUARY, 6, 2*HOUR, DateTimeRule.WALL_TIME),\r
202                 1974, 1974),\r
203 \r
204         new AnnualTimeZoneRule("EDT", -5*HOUR, 1*HOUR,\r
205                 new DateTimeRule(Calendar.FEBRUARY, 23, 2*HOUR, DateTimeRule.WALL_TIME),\r
206                 1975, 1975),\r
207 \r
208         new AnnualTimeZoneRule("EDT", -5*HOUR, 1*HOUR,\r
209                 new DateTimeRule(Calendar.APRIL, -1, Calendar.SUNDAY, 2*HOUR, DateTimeRule.WALL_TIME),\r
210                 1976, 1986),\r
211 \r
212         new AnnualTimeZoneRule("EDT", -5*HOUR, 1*HOUR,\r
213                 new DateTimeRule(Calendar.APRIL, 1, Calendar.SUNDAY, true, 2*HOUR, DateTimeRule.WALL_TIME),\r
214                 1987, 2006),\r
215 \r
216         new AnnualTimeZoneRule("EDT", -5*HOUR, 1*HOUR,\r
217                 new DateTimeRule(Calendar.MARCH, 8, Calendar.SUNDAY, true, 2*HOUR, DateTimeRule.WALL_TIME),\r
218                 2007, AnnualTimeZoneRule.MAX_YEAR)\r
219     };\r
220     \r
221 \r
222     \r
223     private static class RuleBasedTimeZoneHandler extends TimeZoneHandler\r
224     {\r
225         public Object[] getTestObjects()\r
226         {\r
227             RuleBasedTimeZone ruleBasedTimeZones[] = new RuleBasedTimeZone[2];\r
228 \r
229             InitialTimeZoneRule ir = new InitialTimeZoneRule("GMT-5", -5*HOUR, 0);\r
230 \r
231             // GMT-5, no transition\r
232             ruleBasedTimeZones[0] = new RuleBasedTimeZone("GMT-5", ir);\r
233 \r
234 \r
235             // US Eastern since 1967\r
236             ruleBasedTimeZones[1] = new RuleBasedTimeZone("US_East", ir);\r
237             for (int i = 0; i < TEST_US_EASTERN.length; i++) {\r
238                 ruleBasedTimeZones[1].addTransitionRule(TEST_US_EASTERN[i]);\r
239             }\r
240             return ruleBasedTimeZones;\r
241         }\r
242     }\r
243 \r
244     private static class DateTimeRuleHandler implements Handler {\r
245         public Object[] getTestObjects() {\r
246             DateTimeRule[] rules = new DateTimeRule[4];\r
247 \r
248             // DOM + UTC\r
249             rules[0] = new DateTimeRule(Calendar.OCTOBER, 10, 13*HOUR, DateTimeRule.UTC_TIME);\r
250 \r
251             // DOW + WALL\r
252             rules[1] = new DateTimeRule(Calendar.MARCH, 2, Calendar.SUNDAY, 2*HOUR, DateTimeRule.WALL_TIME);\r
253 \r
254             // DOW_GEQ_DOM + STD\r
255             rules[2] = new DateTimeRule(Calendar.MAY, 1, Calendar.MONDAY, true, 0*HOUR, DateTimeRule.STANDARD_TIME);\r
256 \r
257             // DOW_LEQ_DOM + WALL\r
258             rules[3] = new DateTimeRule(Calendar.AUGUST, 31, Calendar.SATURDAY, false, 1*HOUR, DateTimeRule.WALL_TIME);\r
259 \r
260             return rules;\r
261         }\r
262 \r
263         public boolean hasSameBehavior(Object a, Object b) {\r
264             return hasSameRule((DateTimeRule)a, (DateTimeRule)b);\r
265         }\r
266 \r
267         static boolean hasSameRule(DateTimeRule dtra, DateTimeRule dtrb) {\r
268             boolean bSame = false;\r
269             if (dtra.getDateRuleType() == dtrb.getDateRuleType()\r
270                     && dtra.getRuleMonth() == dtrb.getRuleMonth()\r
271                     && dtra.getTimeRuleType() == dtrb.getTimeRuleType()\r
272                     && dtra.getRuleMillisInDay() == dtrb.getRuleMillisInDay()) {\r
273                 switch (dtra.getDateRuleType()) {\r
274                 case DateTimeRule.DOM:\r
275                     bSame = (dtra.getRuleDayOfMonth() == dtrb.getRuleDayOfMonth());\r
276                     break;\r
277                 case DateTimeRule.DOW:\r
278                     bSame = (dtra.getRuleDayOfWeek() == dtrb.getRuleDayOfWeek() &&\r
279                                 dtra.getRuleWeekInMonth() == dtrb.getRuleWeekInMonth());\r
280                     break;\r
281                 case DateTimeRule.DOW_GEQ_DOM:\r
282                 case DateTimeRule.DOW_LEQ_DOM:\r
283                     bSame = (dtra.getRuleDayOfMonth() == dtrb.getRuleDayOfMonth() &&\r
284                                 dtra.getRuleDayOfWeek() == dtrb.getRuleDayOfWeek());\r
285                     break;\r
286                 }\r
287             }\r
288             return bSame;            \r
289         }\r
290     }\r
291 \r
292     private static boolean compareTimeZoneRules(TimeZoneRule ra, TimeZoneRule rb) {\r
293         if (ra.getName().equals(rb.getName()) &&\r
294                 ra.getRawOffset() == rb.getRawOffset() &&\r
295                 ra.getDSTSavings() == rb.getDSTSavings()) {\r
296             return true;\r
297         }\r
298         return false;        \r
299     }\r
300 \r
301     private static class AnnualTimeZoneRuleHandler implements Handler {\r
302         public Object[] getTestObjects() {\r
303             return TEST_US_EASTERN;\r
304         }\r
305 \r
306         public boolean hasSameBehavior(Object a, Object b) {\r
307             AnnualTimeZoneRule ra = (AnnualTimeZoneRule)a;\r
308             AnnualTimeZoneRule rb = (AnnualTimeZoneRule)b;\r
309             if (DateTimeRuleHandler.hasSameRule(ra.getRule(), rb.getRule()) &&\r
310                     ra.getStartYear() == rb.getStartYear() &&\r
311                     ra.getEndYear() == rb.getEndYear()) {\r
312                 return compareTimeZoneRules(ra, rb);\r
313             }\r
314             return false;\r
315         }\r
316     }\r
317 \r
318     private static class InitialTimeZoneRuleHandler implements Handler {\r
319         public Object[] getTestObjects() {\r
320             TimeZoneRule[] rules = new TimeZoneRule[2];\r
321             rules[0] = new InitialTimeZoneRule("EST", -5*HOUR, 0);\r
322             rules[1] = new InitialTimeZoneRule("PST", -8*HOUR, 0);\r
323             return rules;\r
324         }\r
325 \r
326         public boolean hasSameBehavior(Object a, Object b) {\r
327             return compareTimeZoneRules((TimeZoneRule)a, (TimeZoneRule)b);\r
328         }\r
329     }\r
330 \r
331     private static class TimeArrayTimeZoneRuleHandler implements Handler {\r
332         public Object[] getTestObjects() {\r
333             TimeArrayTimeZoneRule[] rules = new TimeArrayTimeZoneRule[1];\r
334             long[] ttime = new long[] {-631152000000L, 0L, 946684800000L}; /* {1950-1-1, 1970-1-1, 2000-1-1} */\r
335             rules[0] = new TimeArrayTimeZoneRule("Foo", 1*HOUR, 1*HOUR, ttime, DateTimeRule.UTC_TIME);\r
336 \r
337             return rules;\r
338         }\r
339         public boolean hasSameBehavior(Object a, Object b) {\r
340             TimeArrayTimeZoneRule ra = (TimeArrayTimeZoneRule)a;\r
341             TimeArrayTimeZoneRule rb = (TimeArrayTimeZoneRule)b;\r
342 \r
343             Date da = ra.getFirstStart(0, 0);\r
344             Date db = rb.getFirstStart(0, 0);\r
345             long t = da.getTime();\r
346             if (da.equals(db)) {\r
347                 da = ra.getFinalStart(0, 0);\r
348                 db = rb.getFinalStart(0, 0);\r
349                 long end = da.getTime();\r
350                 if (da.equals(db)) {\r
351                     while (t < end) {\r
352                         da = ra.getNextStart(t, 0, 0, false);\r
353                         db = ra.getNextStart(t, 0, 0, false);\r
354                         if (da == null || db == null || !da.equals(db)) {\r
355                             break;\r
356                         }\r
357                         t = da.getTime();\r
358                     }\r
359                     return compareTimeZoneRules(ra, rb);\r
360                 }\r
361             }\r
362             return false;\r
363         }\r
364     }\r
365 \r
366     private static class ULocaleHandler implements Handler\r
367     {\r
368         public Object[] getTestObjects()\r
369         {\r
370             ULocale uLocales[] = new ULocale[locales.length];\r
371             \r
372             for (int i = 0; i < locales.length; i += 1) {\r
373                 uLocales[i] = ULocale.forLocale(locales[i]);\r
374             }\r
375             \r
376             return uLocales;\r
377         }\r
378         \r
379         public boolean hasSameBehavior(Object a, Object b)\r
380         {\r
381             ULocale uloc_a = (ULocale) a;\r
382             ULocale uloc_b = (ULocale) b;\r
383             \r
384             return uloc_a.getName().equals(uloc_b.getName());\r
385         }\r
386     }\r
387     \r
388     public static class DateIntervalHandler implements Handler\r
389     {\r
390         private DateInterval dateInterval[] = {\r
391                 new DateInterval(0L, 1164931200000L/*20061201T000000Z*/)\r
392         };\r
393         public Object[] getTestObjects()\r
394         {\r
395             return dateInterval;\r
396         }\r
397 \r
398         public boolean hasSameBehavior(Object a, Object b)\r
399         {\r
400             return a.equals(b);\r
401         }\r
402     }\r
403 \r
404 \r
405     private static class CurrencyHandler implements Handler\r
406     {\r
407         public Object[] getTestObjects()\r
408         {\r
409             Currency currencies[] = new Currency[places.length];\r
410             \r
411             for (int i = 0; i < places.length; i += 1) {\r
412                 currencies[i] = Currency.getInstance(places[i]);\r
413             }\r
414             \r
415             return currencies;\r
416         }\r
417         \r
418         public boolean hasSameBehavior(Object a, Object b)\r
419         {\r
420             Currency curr_a = (Currency) a;\r
421             Currency curr_b = (Currency) b;\r
422             \r
423             return curr_a.getCurrencyCode().equals(curr_b.getCurrencyCode());\r
424             \r
425         }\r
426     }\r
427 \r
428     private static String zoneIDs[] = {\r
429         "Pacific/Honolulu", "America/Anchorage", "America/Los_Angeles", "America/Denver",\r
430         "America/Chicago", "America/New_York", "Africa/Cairo", "Africa/Addis_Ababa", "Africa/Dar_es_Salaam",\r
431         "Africa/Freetown", "Africa/Johannesburg", "Africa/Nairobi", "Asia/Bangkok", "Asia/Baghdad",\r
432         "Asia/Calcutta", "Asia/Hong_Kong", "Asia/Jakarta", "Asia/Jerusalem", "Asia/Manila", "Asia/Tokyo",\r
433         "Europe/Amsterdam", "Europe/Athens", "Europe/Berlin", "Europe/London", "Europe/Malta", "Europe/Moscow",\r
434         "Europe/Paris", "Europe/Rome"\r
435     };\r
436         \r
437     private static long sampleTimes[] = {\r
438         1136073600000L, // 20060101T000000Z\r
439         1138752000000L, // 20060201T000000Z\r
440         1141171200000L, // 20060301T000000Z\r
441         1143849600000L, // 20060401T000000Z\r
442         1146441600000L, // 20060501T000000Z\r
443         1149120000000L, // 20060601T000000Z\r
444         1151712000000L, // 20060701T000000Z\r
445         1154390400000L, // 20060801T000000Z\r
446         1157068800000L, // 20060901T000000Z\r
447         1159660800000L, // 20061001T000000Z\r
448         1162339200000L, // 20061101T000000Z\r
449         1164931200000L, // 20061201T000000Z\r
450     };\r
451 \r
452     private static class OlsonTimeZoneHandler implements Handler\r
453     {\r
454         public Object[] getTestObjects()\r
455         {\r
456             OlsonTimeZone timeZones[] = new OlsonTimeZone[zoneIDs.length];\r
457             \r
458             for (int i = 0; i < zoneIDs.length; i += 1) {\r
459                 timeZones[i] = new OlsonTimeZone(zoneIDs[i]);\r
460             }\r
461             \r
462             return timeZones;\r
463                 \r
464         }\r
465         \r
466         public boolean hasSameBehavior(Object a, Object b)\r
467         {\r
468             OlsonTimeZone otz_a = (OlsonTimeZone) a;\r
469             OlsonTimeZone otz_b = (OlsonTimeZone) b;\r
470             int a_offsets[] = {0, 0};\r
471             int b_offsets[] = {0, 0};\r
472 \r
473             boolean bSame = true;\r
474             for (int i = 0; i < sampleTimes.length; i++) {\r
475                 otz_a.getOffset(sampleTimes[i], false, a_offsets);\r
476                 otz_b.getOffset(sampleTimes[i], false, b_offsets);\r
477                 if (a_offsets[0] != b_offsets[0] || a_offsets[1] != b_offsets[1]) {\r
478                     bSame = false;\r
479                     break;\r
480                 }\r
481             }\r
482             return bSame;\r
483         }\r
484     }\r
485 \r
486     private static class TimeZoneAdapterHandler implements Handler\r
487     {\r
488         public Object[] getTestObjects()\r
489         {\r
490             TimeZoneAdapter timeZones[] = new TimeZoneAdapter[zoneIDs.length];\r
491             \r
492             for (int i = 0; i < zoneIDs.length; i += 1) {\r
493                 timeZones[i] = new TimeZoneAdapter(TimeZone.getTimeZone(zoneIDs[i]));\r
494             }\r
495             \r
496             return timeZones;\r
497                 \r
498         }\r
499         \r
500         public boolean hasSameBehavior(Object a, Object b)\r
501         {\r
502             GregorianCalendar cal = new GregorianCalendar();\r
503             TimeZoneAdapter tza_a = (TimeZoneAdapter) a;\r
504             TimeZoneAdapter tza_b = (TimeZoneAdapter) b;\r
505             \r
506             int a_offset, b_offset;\r
507             boolean a_dst, b_dst;\r
508             boolean bSame = true;\r
509             for (int i = 0; i < sampleTimes.length; i++) {\r
510                 cal.setTimeInMillis(sampleTimes[i]);\r
511                 int era = cal.get(Calendar.ERA);\r
512                 int year = cal.get(Calendar.YEAR);\r
513                 int month = cal.get(Calendar.MONTH);\r
514                 int day = cal.get(Calendar.DAY_OF_MONTH);\r
515                 int dow = cal.get(Calendar.DAY_OF_WEEK);\r
516                 int mid = cal.get(Calendar.MILLISECONDS_IN_DAY);\r
517                 a_offset = tza_a.getOffset(era, year, month, day, dow, mid);\r
518                 b_offset = tza_b.getOffset(era, year, month, day, dow, mid);\r
519                 Date d = new Date(sampleTimes[i]);\r
520                 a_dst = tza_a.inDaylightTime(d);\r
521                 b_dst = tza_b.inDaylightTime(d);\r
522                 if (a_offset != b_offset || a_dst != b_dst) {\r
523                     bSame = false;\r
524                     break;\r
525                 }\r
526             }\r
527             return bSame;\r
528         }\r
529     }\r
530 \r
531     private static class JavaTimeZoneHandler implements Handler {\r
532         String[] ZONES = { "GMT", "America/New_York", "GMT+05:45" };\r
533 \r
534         public Object[] getTestObjects() {\r
535             JavaTimeZone zones[] = new JavaTimeZone[ZONES.length];\r
536             for(int z = 0; z < ZONES.length; z += 1) {\r
537                 zones[z] = new JavaTimeZone(ZONES[z]);\r
538             }\r
539             return zones;\r
540         }\r
541         \r
542         public boolean hasSameBehavior(Object a, Object b)\r
543         {\r
544             TimeZone zone_a = (TimeZone) a;\r
545             TimeZone zone_b = (TimeZone) b;\r
546 \r
547             if (!(TimeZone.getCanonicalID(zone_a.getID()).equals(TimeZone.getCanonicalID(zone_b.getID())))) {\r
548                 return false;\r
549             }\r
550 \r
551             int a_offsets[] = {0, 0};\r
552             int b_offsets[] = {0, 0};\r
553 \r
554             boolean bSame = true;\r
555             for (int i = 0; i < sampleTimes.length; i++) {\r
556                 zone_a.getOffset(sampleTimes[i], false, a_offsets);\r
557                 zone_b.getOffset(sampleTimes[i], false, b_offsets);\r
558                 if (a_offsets[0] != b_offsets[0] || a_offsets[1] != b_offsets[1]) {\r
559                     bSame = false;\r
560                     break;\r
561                 }\r
562             }\r
563             return bSame;\r
564         }\r
565     }\r
566 \r
567     private static class BigDecimalHandler implements Handler\r
568     {\r
569         String values[] = {\r
570             "1234567890.",\r
571             "123456789.0",\r
572             "12345678.90",\r
573             "1234567.890",\r
574             "123456.7890",\r
575             "12345.67890",\r
576             "1234.567890",\r
577             "123.4567890",\r
578             "12.34567890",\r
579             "1.234567890",\r
580             ".1234567890"};\r
581         \r
582         public Object[] getTestObjects()\r
583         {\r
584             BigDecimal bds[] = new BigDecimal[values.length];\r
585             \r
586             for (int i = 0; i < values.length; i += 1) {\r
587                 bds[i] = new BigDecimal(values[i]);\r
588             }\r
589             \r
590             return bds;\r
591         }\r
592         \r
593         public boolean hasSameBehavior(Object a, Object b) {\r
594             BigDecimal bda = (BigDecimal) a;\r
595             BigDecimal bdb = (BigDecimal) b;\r
596             \r
597             return bda.toString().equals(bdb.toString());\r
598         }\r
599     }\r
600     \r
601     private static class MathContextHandler implements Handler\r
602     {\r
603         int forms[] = {MathContext.PLAIN, MathContext.ENGINEERING, MathContext.SCIENTIFIC};\r
604         int rounds[] = {\r
605             MathContext.ROUND_CEILING, MathContext.ROUND_DOWN, MathContext.ROUND_FLOOR,\r
606             MathContext.ROUND_HALF_DOWN, MathContext.ROUND_HALF_EVEN, MathContext.ROUND_HALF_UP,\r
607             MathContext.ROUND_UNNECESSARY, MathContext.ROUND_UP};\r
608 \r
609         public Object[] getTestObjects()\r
610         {\r
611             int objectCount = forms.length * rounds.length;\r
612             MathContext contexts[] = new MathContext[objectCount];\r
613             int i = 0;\r
614             \r
615             for (int f = 0; f < forms.length; f += 1) {\r
616                 for (int r = 0; r < rounds.length; r += 1) {\r
617                     int digits = f * r;\r
618                     boolean lostDigits = (r & 1) != 0;\r
619                     \r
620                     contexts[i++] = new MathContext(digits, forms[f], lostDigits, rounds[r]);\r
621                 }\r
622             }\r
623             \r
624             return contexts;\r
625         }\r
626         \r
627         public boolean hasSameBehavior(Object a, Object b)\r
628         {\r
629             MathContext mca = (MathContext) a;\r
630             MathContext mcb = (MathContext) b;\r
631             \r
632             return mca.toString().equals(mcb.toString());\r
633         }\r
634     }\r
635 \r
636     private static HashMap map = new HashMap();\r
637     \r
638     static {\r
639         map.put("com.ibm.icu.util.TimeZone", new TimeZoneHandler());\r
640         map.put("com.ibm.icu.util.SimpleTimeZone", new SimpleTimeZoneHandler());\r
641         map.put("com.ibm.icu.util.RuleBasedTimeZone", new RuleBasedTimeZoneHandler());\r
642         map.put("com.ibm.icu.util.VTimeZone", new VTimeZoneHandler());\r
643         map.put("com.ibm.icu.util.DateTimeRule", new DateTimeRuleHandler());\r
644         map.put("com.ibm.icu.util.AnnualTimeZoneRule", new AnnualTimeZoneRuleHandler());\r
645         map.put("com.ibm.icu.util.InitialTimeZoneRule", new InitialTimeZoneRuleHandler());\r
646         map.put("com.ibm.icu.util.TimeArrayTimeZoneRule", new TimeArrayTimeZoneRuleHandler());\r
647         map.put("com.ibm.icu.util.ULocale", new ULocaleHandler());\r
648         map.put("com.ibm.icu.util.Currency", new CurrencyHandler());\r
649         map.put("com.ibm.icu.impl.JavaTimeZone", new JavaTimeZoneHandler());\r
650         map.put("com.ibm.icu.impl.OlsonTimeZone", new OlsonTimeZoneHandler());\r
651         map.put("com.ibm.icu.impl.TimeZoneAdapter", new TimeZoneAdapterHandler());\r
652         map.put("com.ibm.icu.math.BigDecimal", new BigDecimalHandler());\r
653         map.put("com.ibm.icu.math.MathContext", new MathContextHandler());\r
654         \r
655         map.put("com.ibm.icu.text.NumberFormat", new FormatTests.NumberFormatHandler());\r
656         map.put("com.ibm.icu.text.DecimalFormat", new FormatTests.DecimalFormatHandler());\r
657         map.put("com.ibm.icu.text.RuleBasedNumberFormat", new FormatTests.RuleBasedNumberFormatHandler());\r
658         map.put("com.ibm.icu.text.CurrencyPluralInfo", new FormatTests.CurrencyPluralInfoHandler());\r
659         map.put("com.ibm.icu.text.DecimalFormatSymbols", new FormatTests.DecimalFormatSymbolsHandler());\r
660         map.put("com.ibm.icu.text.MessageFormat", new FormatTests.MessageFormatHandler());\r
661         map.put("com.ibm.icu.text.DateFormat", new FormatTests.DateFormatHandler());\r
662         map.put("com.ibm.icu.text.DateFormatSymbols", new FormatTests.DateFormatSymbolsHandler());\r
663         map.put("com.ibm.icu.util.DateInterval", new DateIntervalHandler());\r
664         map.put("com.ibm.icu.text.DateIntervalFormat", new FormatTests.DateIntervalFormatHandler());\r
665         map.put("com.ibm.icu.text.DateIntervalInfo", new FormatTests.DateIntervalInfoHandler());\r
666         map.put("com.ibm.icu.text.DateIntervalInfo$PatternInfo", new FormatTests.PatternInfoHandler());\r
667         map.put("com.ibm.icu.text.SimpleDateFormat", new FormatTests.SimpleDateFormatHandler());\r
668         map.put("com.ibm.icu.text.ChineseDateFormat", new FormatTests.ChineseDateFormatHandler());\r
669         map.put("com.ibm.icu.text.ChineseDateFormatSymbols", new FormatTests.ChineseDateFormatSymbolsHandler());\r
670         map.put("com.ibm.icu.impl.DateNumberFormat", new FormatTests.DateNumberFormatHandler());\r
671         map.put("com.ibm.icu.text.PluralFormat", new FormatTests.PluralFormatHandler());\r
672         map.put("com.ibm.icu.text.PluralRules", new FormatTests.PluralRulesHandler());\r
673         map.put("com.ibm.icu.text.TimeUnitFormat", new FormatTests.TimeUnitFormatHandler());\r
674         map.put("com.ibm.icu.text.SelectFormat", new FormatTests.SelectFormatHandler());\r
675 \r
676         map.put("com.ibm.icu.util.Calendar", new CalendarTests.CalendarHandler());\r
677         map.put("com.ibm.icu.util.BuddhistCalendar", new CalendarTests.BuddhistCalendarHandler());\r
678         map.put("com.ibm.icu.util.ChineseCalendar", new CalendarTests.ChineseCalendarHandler());\r
679         map.put("com.ibm.icu.util.CopticCalendar", new CalendarTests.CopticCalendarHandler());\r
680         map.put("com.ibm.icu.util.EthiopicCalendar", new CalendarTests.EthiopicCalendarHandler());\r
681         map.put("com.ibm.icu.util.GregorianCalendar", new CalendarTests.GregorianCalendarHandler());\r
682         map.put("com.ibm.icu.util.HebrewCalendar", new CalendarTests.HebrewCalendarHandler());\r
683         map.put("com.ibm.icu.util.IndianCalendar", new CalendarTests.IndianCalendarHandler());\r
684         map.put("com.ibm.icu.util.IslamicCalendar", new CalendarTests.IslamicCalendarHandler());\r
685         map.put("com.ibm.icu.util.JapaneseCalendar", new CalendarTests.JapaneseCalendarHandler());\r
686         map.put("com.ibm.icu.util.TaiwanCalendar", new CalendarTests.TaiwanCalendarHandler());\r
687         \r
688         map.put("com.ibm.icu.text.ArabicShapingException", new ExceptionTests.ArabicShapingExceptionHandler());\r
689         map.put("com.ibm.icu.text.StringPrepParseException", new ExceptionTests.StringPrepParseExceptionHandler());\r
690         map.put("com.ibm.icu.util.UResourceTypeMismatchException", new ExceptionTests.UResourceTypeMismatchExceptionHandler());\r
691         map.put("com.ibm.icu.impl.InvalidFormatException", new ExceptionTests.InvalidFormatExceptionHandler());\r
692 \r
693         map.put("com.ibm.icu.text.NumberFormat$Field", new FormatTests.NumberFormatFieldHandler());\r
694         map.put("com.ibm.icu.text.DateFormat$Field", new FormatTests.DateFormatFieldHandler());\r
695         map.put("com.ibm.icu.text.ChineseDateFormat$Field", new FormatTests.ChineseDateFormatFieldHandler());\r
696         map.put("com.ibm.icu.text.MessageFormat$Field", new FormatTests.MessageFormatFieldHandler());\r
697 \r
698         map.put("com.ibm.icu.impl.duration.BasicDurationFormat", new FormatTests.BasicDurationFormatHandler());\r
699         map.put("com.ibm.icu.impl.RelativeDateFormat", new FormatTests.RelativeDateFormatHandler());\r
700         map.put("com.ibm.icu.util.IllformedLocaleException", new ExceptionTests.IllformedLocaleExceptionHandler());\r
701         map.put("com.ibm.icu.impl.locale.LocaleSyntaxException", new ExceptionTests.LocaleSyntaxExceptionHandler());\r
702         map.put("com.ibm.icu.impl.IllegalIcuArgumentException", new ExceptionTests.IllegalIcuArgumentExceptionHandler());\r
703     }\r
704     \r
705     public SerializableTest()\r
706     {\r
707         super(\r
708             new String[] {\r
709                 "com.ibm.icu.dev.test.serializable.CoverageTest",\r
710                 "com.ibm.icu.dev.test.serializable.CompatibilityTest"},\r
711             "All Serializable Tests"\r
712         );\r
713     }\r
714 \r
715     public static final String CLASS_TARGET_NAME  = "Serializable";\r
716 \r
717     public static void main(String[] args)\r
718     {\r
719         SerializableTest test = new SerializableTest();\r
720         \r
721         test.run(args);\r
722     }\r
723 }\r
724 //eof\r