-//##header\r
-/*\r
- *******************************************************************************\r
- * Copyright (C) 1996-2009, International Business Machines Corporation and *\r
- * others. All Rights Reserved. *\r
- *******************************************************************************\r
- *\r
- */\r
-\r
-package com.ibm.icu.dev.test.serializable;\r
-\r
-import java.util.Date;\r
-import java.util.HashMap;\r
-import java.util.Locale;\r
-\r
-import com.ibm.icu.dev.test.TestFmwk;\r
-import com.ibm.icu.impl.JavaTimeZone;\r
-import com.ibm.icu.impl.OlsonTimeZone;\r
-import com.ibm.icu.impl.TimeZoneAdapter;\r
-import com.ibm.icu.math.BigDecimal;\r
-import com.ibm.icu.math.MathContext;\r
-import com.ibm.icu.util.AnnualTimeZoneRule;\r
-import com.ibm.icu.util.Calendar;\r
-import com.ibm.icu.util.Currency;\r
-import com.ibm.icu.util.DateInterval;\r
-import com.ibm.icu.util.DateTimeRule;\r
-import com.ibm.icu.util.GregorianCalendar;\r
-import com.ibm.icu.util.InitialTimeZoneRule;\r
-import com.ibm.icu.util.RuleBasedTimeZone;\r
-import com.ibm.icu.util.SimpleTimeZone;\r
-import com.ibm.icu.util.TimeArrayTimeZoneRule;\r
-import com.ibm.icu.util.TimeZone;\r
-import com.ibm.icu.util.TimeZoneRule;\r
-import com.ibm.icu.util.ULocale;\r
-import com.ibm.icu.util.VTimeZone;\r
-\r
-/**\r
- * @author emader\r
- *\r
- * TODO To change the template for this generated type comment go to\r
- * Window - Preferences - Java - Code Style - Code Templates\r
- */\r
-public class SerializableTest extends TestFmwk.TestGroup\r
-{\r
- public interface Handler\r
- {\r
- public Object[] getTestObjects();\r
- \r
- public boolean hasSameBehavior(Object a, Object b);\r
- }\r
- \r
- public static Handler getHandler(String className)\r
- {\r
- return (Handler) map.get(className);\r
- }\r
- \r
- private static class TimeZoneHandler implements Handler\r
- {\r
- String[] ZONES = { "GMT", "MET", "IST" };\r
-\r
- public Object[] getTestObjects()\r
- {\r
- TimeZone zones[] = new TimeZone[ZONES.length];\r
- \r
- for(int z = 0; z < ZONES.length; z += 1) {\r
- zones[z] = TimeZone.getTimeZone(ZONES[z]);\r
- }\r
- \r
- return zones;\r
- }\r
- \r
- public boolean hasSameBehavior(Object a, Object b)\r
- {\r
- TimeZone zone_a = (TimeZone) a;\r
- TimeZone zone_b = (TimeZone) b;\r
-\r
- if (!(zone_a.getDisplayName().equals(zone_b.getDisplayName()))) {\r
- return false;\r
- }\r
-\r
- int a_offsets[] = {0, 0};\r
- int b_offsets[] = {0, 0};\r
-\r
- boolean bSame = true;\r
- for (int i = 0; i < sampleTimes.length; i++) {\r
- zone_a.getOffset(sampleTimes[i], false, a_offsets);\r
- zone_b.getOffset(sampleTimes[i], false, b_offsets);\r
- if (a_offsets[0] != b_offsets[0] || a_offsets[1] != b_offsets[1]) {\r
- bSame = false;\r
- break;\r
- }\r
- }\r
- return bSame;\r
- }\r
- }\r
- \r
- private static Locale locales[] = {\r
- Locale.CANADA, Locale.CANADA_FRENCH, Locale.CHINA, \r
- Locale.CHINESE, Locale.ENGLISH, Locale.FRANCE, Locale.FRENCH, \r
- Locale.GERMAN, Locale.GERMANY, Locale.ITALIAN, Locale.ITALY, \r
- Locale.JAPAN, Locale.JAPANESE, Locale.KOREA, Locale.KOREAN, \r
- Locale.PRC, Locale.SIMPLIFIED_CHINESE, Locale.TAIWAN, \r
- Locale.TRADITIONAL_CHINESE, Locale.UK, Locale.US\r
- };\r
- \r
- private static Locale places[] = {\r
- Locale.CANADA, Locale.CANADA_FRENCH, Locale.CHINA, \r
- Locale.FRANCE, Locale.GERMANY, Locale.ITALY, \r
- Locale.JAPAN, Locale.KOREA, Locale.PRC, Locale.TAIWAN, \r
- Locale.UK, Locale.US\r
- };\r
- \r
- public static Locale[] getLocales()\r
- {\r
- return locales;\r
- }\r
- \r
- public static boolean compareStrings(String a[], String b[])\r
- {\r
- if (a.length != b.length) {\r
- return false;\r
- }\r
- \r
- for (int i = 0; i < a.length; i += 1) {\r
- if (! a[i].equals(b[i])) {\r
- return false;\r
- }\r
- }\r
- \r
- return true;\r
- }\r
- \r
- public static boolean compareChars(char a[], char b[])\r
- {\r
- if (a.length != b.length) {\r
- return false;\r
- }\r
- \r
- for (int i = 0; i < a.length; i += 1) {\r
- if (a[i] != b[i]) {\r
- return false;\r
- }\r
- }\r
- \r
- return true;\r
- }\r
-\r
- private static class SimpleTimeZoneHandler extends TimeZoneHandler\r
- {\r
- public Object[] getTestObjects()\r
- {\r
- SimpleTimeZone simpleTimeZones[] = new SimpleTimeZone[6];\r
- \r
- simpleTimeZones[0] = new SimpleTimeZone(32400000, "MyTimeZone");\r
- \r
- simpleTimeZones[1] = new SimpleTimeZone(32400000, "Asia/Tokyo");\r
- \r
- simpleTimeZones[2] = new SimpleTimeZone(32400000, "Asia/Tokyo");\r
- simpleTimeZones[2].setRawOffset(0);\r
- \r
- simpleTimeZones[3] = new SimpleTimeZone(32400000, "Asia/Tokyo");\r
- simpleTimeZones[3].setStartYear(100);\r
- \r
- simpleTimeZones[4] = new SimpleTimeZone(32400000, "Asia/Tokyo");\r
- simpleTimeZones[4].setStartYear(1000);\r
- simpleTimeZones[4].setDSTSavings(1800000);\r
- simpleTimeZones[4].setStartRule(3, 4, 180000);\r
- simpleTimeZones[4].setEndRule(6, 3, 4, 360000);\r
- \r
- simpleTimeZones[5] = new SimpleTimeZone(32400000, "Asia/Tokyo");\r
- simpleTimeZones[5].setStartRule(2, 3, 4, 360000);\r
- simpleTimeZones[5].setEndRule(6, 3, 4, 360000);\r
- \r
- return simpleTimeZones;\r
- }\r
- }\r
-\r
- private static class VTimeZoneHandler extends TimeZoneHandler {\r
- public Object[] getTestObjects() {\r
- //TODO\r
- VTimeZone[] vtzs = new VTimeZone[1];\r
- vtzs[0] = VTimeZone.create("America/New_York");\r
- return vtzs;\r
- }\r
- }\r
-\r
- private static final int HOUR = 60*60*1000;\r
- private static final AnnualTimeZoneRule[] TEST_US_EASTERN = {\r
- new AnnualTimeZoneRule("EST", -5*HOUR, 0,\r
- new DateTimeRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2*HOUR, DateTimeRule.WALL_TIME),\r
- 1967, 2006),\r
- \r
- new AnnualTimeZoneRule("EST", -5*HOUR, 0,\r
- new DateTimeRule(Calendar.NOVEMBER, 1, Calendar.SUNDAY, true, 2*HOUR, DateTimeRule.WALL_TIME),\r
- 2007, AnnualTimeZoneRule.MAX_YEAR),\r
- \r
- new AnnualTimeZoneRule("EDT", -5*HOUR, 1*HOUR,\r
- new DateTimeRule(Calendar.APRIL, -1, Calendar.SUNDAY, 2*HOUR, DateTimeRule.WALL_TIME),\r
- 1967, 1973),\r
-\r
- new AnnualTimeZoneRule("EDT", -5*HOUR, 1*HOUR,\r
- new DateTimeRule(Calendar.JANUARY, 6, 2*HOUR, DateTimeRule.WALL_TIME),\r
- 1974, 1974),\r
-\r
- new AnnualTimeZoneRule("EDT", -5*HOUR, 1*HOUR,\r
- new DateTimeRule(Calendar.FEBRUARY, 23, 2*HOUR, DateTimeRule.WALL_TIME),\r
- 1975, 1975),\r
-\r
- new AnnualTimeZoneRule("EDT", -5*HOUR, 1*HOUR,\r
- new DateTimeRule(Calendar.APRIL, -1, Calendar.SUNDAY, 2*HOUR, DateTimeRule.WALL_TIME),\r
- 1976, 1986),\r
-\r
- new AnnualTimeZoneRule("EDT", -5*HOUR, 1*HOUR,\r
- new DateTimeRule(Calendar.APRIL, 1, Calendar.SUNDAY, true, 2*HOUR, DateTimeRule.WALL_TIME),\r
- 1987, 2006),\r
-\r
- new AnnualTimeZoneRule("EDT", -5*HOUR, 1*HOUR,\r
- new DateTimeRule(Calendar.MARCH, 8, Calendar.SUNDAY, true, 2*HOUR, DateTimeRule.WALL_TIME),\r
- 2007, AnnualTimeZoneRule.MAX_YEAR)\r
- };\r
- \r
-\r
- \r
- private static class RuleBasedTimeZoneHandler extends TimeZoneHandler\r
- {\r
- public Object[] getTestObjects()\r
- {\r
- RuleBasedTimeZone ruleBasedTimeZones[] = new RuleBasedTimeZone[2];\r
-\r
- InitialTimeZoneRule ir = new InitialTimeZoneRule("GMT-5", -5*HOUR, 0);\r
-\r
- // GMT-5, no transition\r
- ruleBasedTimeZones[0] = new RuleBasedTimeZone("GMT-5", ir);\r
-\r
-\r
- // US Eastern since 1967\r
- ruleBasedTimeZones[1] = new RuleBasedTimeZone("US_East", ir);\r
- for (int i = 0; i < TEST_US_EASTERN.length; i++) {\r
- ruleBasedTimeZones[1].addTransitionRule(TEST_US_EASTERN[i]);\r
- }\r
- return ruleBasedTimeZones;\r
- }\r
- }\r
-\r
- private static class DateTimeRuleHandler implements Handler {\r
- public Object[] getTestObjects() {\r
- DateTimeRule[] rules = new DateTimeRule[4];\r
-\r
- // DOM + UTC\r
- rules[0] = new DateTimeRule(Calendar.OCTOBER, 10, 13*HOUR, DateTimeRule.UTC_TIME);\r
-\r
- // DOW + WALL\r
- rules[1] = new DateTimeRule(Calendar.MARCH, 2, Calendar.SUNDAY, 2*HOUR, DateTimeRule.WALL_TIME);\r
-\r
- // DOW_GEQ_DOM + STD\r
- rules[2] = new DateTimeRule(Calendar.MAY, 1, Calendar.MONDAY, true, 0*HOUR, DateTimeRule.STANDARD_TIME);\r
-\r
- // DOW_LEQ_DOM + WALL\r
- rules[3] = new DateTimeRule(Calendar.AUGUST, 31, Calendar.SATURDAY, false, 1*HOUR, DateTimeRule.WALL_TIME);\r
-\r
- return rules;\r
- }\r
-\r
- public boolean hasSameBehavior(Object a, Object b) {\r
- return hasSameRule((DateTimeRule)a, (DateTimeRule)b);\r
- }\r
-\r
- static boolean hasSameRule(DateTimeRule dtra, DateTimeRule dtrb) {\r
- boolean bSame = false;\r
- if (dtra.getDateRuleType() == dtrb.getDateRuleType()\r
- && dtra.getRuleMonth() == dtrb.getRuleMonth()\r
- && dtra.getTimeRuleType() == dtrb.getTimeRuleType()\r
- && dtra.getRuleMillisInDay() == dtrb.getRuleMillisInDay()) {\r
- switch (dtra.getDateRuleType()) {\r
- case DateTimeRule.DOM:\r
- bSame = (dtra.getRuleDayOfMonth() == dtrb.getRuleDayOfMonth());\r
- break;\r
- case DateTimeRule.DOW:\r
- bSame = (dtra.getRuleDayOfWeek() == dtrb.getRuleDayOfWeek() &&\r
- dtra.getRuleWeekInMonth() == dtrb.getRuleWeekInMonth());\r
- break;\r
- case DateTimeRule.DOW_GEQ_DOM:\r
- case DateTimeRule.DOW_LEQ_DOM:\r
- bSame = (dtra.getRuleDayOfMonth() == dtrb.getRuleDayOfMonth() &&\r
- dtra.getRuleDayOfWeek() == dtrb.getRuleDayOfWeek());\r
- break;\r
- }\r
- }\r
- return bSame; \r
- }\r
- }\r
-\r
- private static boolean compareTimeZoneRules(TimeZoneRule ra, TimeZoneRule rb) {\r
- if (ra.getName().equals(rb.getName()) &&\r
- ra.getRawOffset() == rb.getRawOffset() &&\r
- ra.getDSTSavings() == rb.getDSTSavings()) {\r
- return true;\r
- }\r
- return false; \r
- }\r
-\r
- private static class AnnualTimeZoneRuleHandler implements Handler {\r
- public Object[] getTestObjects() {\r
- return TEST_US_EASTERN;\r
- }\r
-\r
- public boolean hasSameBehavior(Object a, Object b) {\r
- AnnualTimeZoneRule ra = (AnnualTimeZoneRule)a;\r
- AnnualTimeZoneRule rb = (AnnualTimeZoneRule)b;\r
- if (DateTimeRuleHandler.hasSameRule(ra.getRule(), rb.getRule()) &&\r
- ra.getStartYear() == rb.getStartYear() &&\r
- ra.getEndYear() == rb.getEndYear()) {\r
- return compareTimeZoneRules(ra, rb);\r
- }\r
- return false;\r
- }\r
- }\r
-\r
- private static class InitialTimeZoneRuleHandler implements Handler {\r
- public Object[] getTestObjects() {\r
- TimeZoneRule[] rules = new TimeZoneRule[2];\r
- rules[0] = new InitialTimeZoneRule("EST", -5*HOUR, 0);\r
- rules[1] = new InitialTimeZoneRule("PST", -8*HOUR, 0);\r
- return rules;\r
- }\r
-\r
- public boolean hasSameBehavior(Object a, Object b) {\r
- return compareTimeZoneRules((TimeZoneRule)a, (TimeZoneRule)b);\r
- }\r
- }\r
-\r
- private static class TimeArrayTimeZoneRuleHandler implements Handler {\r
- public Object[] getTestObjects() {\r
- TimeArrayTimeZoneRule[] rules = new TimeArrayTimeZoneRule[1];\r
- long[] ttime = new long[] {-631152000000L, 0L, 946684800000L}; /* {1950-1-1, 1970-1-1, 2000-1-1} */\r
- rules[0] = new TimeArrayTimeZoneRule("Foo", 1*HOUR, 1*HOUR, ttime, DateTimeRule.UTC_TIME);\r
-\r
- return rules;\r
- }\r
- public boolean hasSameBehavior(Object a, Object b) {\r
- TimeArrayTimeZoneRule ra = (TimeArrayTimeZoneRule)a;\r
- TimeArrayTimeZoneRule rb = (TimeArrayTimeZoneRule)b;\r
-\r
- Date da = ra.getFirstStart(0, 0);\r
- Date db = rb.getFirstStart(0, 0);\r
- long t = da.getTime();\r
- if (da.equals(db)) {\r
- da = ra.getFinalStart(0, 0);\r
- db = rb.getFinalStart(0, 0);\r
- long end = da.getTime();\r
- if (da.equals(db)) {\r
- while (t < end) {\r
- da = ra.getNextStart(t, 0, 0, false);\r
- db = ra.getNextStart(t, 0, 0, false);\r
- if (da == null || db == null || !da.equals(db)) {\r
- break;\r
- }\r
- t = da.getTime();\r
- }\r
- return compareTimeZoneRules(ra, rb);\r
- }\r
- }\r
- return false;\r
- }\r
- }\r
-\r
- private static class ULocaleHandler implements Handler\r
- {\r
- public Object[] getTestObjects()\r
- {\r
- ULocale uLocales[] = new ULocale[locales.length];\r
- \r
- for (int i = 0; i < locales.length; i += 1) {\r
- uLocales[i] = ULocale.forLocale(locales[i]);\r
- }\r
- \r
- return uLocales;\r
- }\r
- \r
- public boolean hasSameBehavior(Object a, Object b)\r
- {\r
- ULocale uloc_a = (ULocale) a;\r
- ULocale uloc_b = (ULocale) b;\r
- \r
- return uloc_a.getName().equals(uloc_b.getName());\r
- }\r
- }\r
- \r
- public static class DateIntervalHandler implements Handler\r
- {\r
- private DateInterval dateInterval[] = {\r
- new DateInterval(0L, 1164931200000L/*20061201T000000Z*/)\r
- };\r
- public Object[] getTestObjects()\r
- {\r
- return dateInterval;\r
- }\r
-\r
- public boolean hasSameBehavior(Object a, Object b)\r
- {\r
- return a.equals(b);\r
- }\r
- }\r
-\r
-\r
- private static class CurrencyHandler implements Handler\r
- {\r
- public Object[] getTestObjects()\r
- {\r
- Currency currencies[] = new Currency[places.length];\r
- \r
- for (int i = 0; i < places.length; i += 1) {\r
- currencies[i] = Currency.getInstance(places[i]);\r
- }\r
- \r
- return currencies;\r
- }\r
- \r
- public boolean hasSameBehavior(Object a, Object b)\r
- {\r
- Currency curr_a = (Currency) a;\r
- Currency curr_b = (Currency) b;\r
- \r
- return curr_a.getCurrencyCode().equals(curr_b.getCurrencyCode());\r
- \r
- }\r
- }\r
-\r
- private static String zoneIDs[] = {\r
- "Pacific/Honolulu", "America/Anchorage", "America/Los_Angeles", "America/Denver",\r
- "America/Chicago", "America/New_York", "Africa/Cairo", "Africa/Addis_Ababa", "Africa/Dar_es_Salaam",\r
- "Africa/Freetown", "Africa/Johannesburg", "Africa/Nairobi", "Asia/Bangkok", "Asia/Baghdad",\r
- "Asia/Calcutta", "Asia/Hong_Kong", "Asia/Jakarta", "Asia/Jerusalem", "Asia/Manila", "Asia/Tokyo",\r
- "Europe/Amsterdam", "Europe/Athens", "Europe/Berlin", "Europe/London", "Europe/Malta", "Europe/Moscow",\r
- "Europe/Paris", "Europe/Rome"\r
- };\r
- \r
- private static long sampleTimes[] = {\r
- 1136073600000L, // 20060101T000000Z\r
- 1138752000000L, // 20060201T000000Z\r
- 1141171200000L, // 20060301T000000Z\r
- 1143849600000L, // 20060401T000000Z\r
- 1146441600000L, // 20060501T000000Z\r
- 1149120000000L, // 20060601T000000Z\r
- 1151712000000L, // 20060701T000000Z\r
- 1154390400000L, // 20060801T000000Z\r
- 1157068800000L, // 20060901T000000Z\r
- 1159660800000L, // 20061001T000000Z\r
- 1162339200000L, // 20061101T000000Z\r
- 1164931200000L, // 20061201T000000Z\r
- };\r
-\r
- private static class OlsonTimeZoneHandler implements Handler\r
- {\r
- public Object[] getTestObjects()\r
- {\r
- OlsonTimeZone timeZones[] = new OlsonTimeZone[zoneIDs.length];\r
- \r
- for (int i = 0; i < zoneIDs.length; i += 1) {\r
- timeZones[i] = new OlsonTimeZone(zoneIDs[i]);\r
- }\r
- \r
- return timeZones;\r
- \r
- }\r
- \r
- public boolean hasSameBehavior(Object a, Object b)\r
- {\r
- OlsonTimeZone otz_a = (OlsonTimeZone) a;\r
- OlsonTimeZone otz_b = (OlsonTimeZone) b;\r
- int a_offsets[] = {0, 0};\r
- int b_offsets[] = {0, 0};\r
-\r
- boolean bSame = true;\r
- for (int i = 0; i < sampleTimes.length; i++) {\r
- otz_a.getOffset(sampleTimes[i], false, a_offsets);\r
- otz_b.getOffset(sampleTimes[i], false, b_offsets);\r
- if (a_offsets[0] != b_offsets[0] || a_offsets[1] != b_offsets[1]) {\r
- bSame = false;\r
- break;\r
- }\r
- }\r
- return bSame;\r
- }\r
- }\r
-\r
- private static class TimeZoneAdapterHandler implements Handler\r
- {\r
- public Object[] getTestObjects()\r
- {\r
- TimeZoneAdapter timeZones[] = new TimeZoneAdapter[zoneIDs.length];\r
- \r
- for (int i = 0; i < zoneIDs.length; i += 1) {\r
- timeZones[i] = new TimeZoneAdapter(TimeZone.getTimeZone(zoneIDs[i]));\r
- }\r
- \r
- return timeZones;\r
- \r
- }\r
- \r
- public boolean hasSameBehavior(Object a, Object b)\r
- {\r
- GregorianCalendar cal = new GregorianCalendar();\r
- TimeZoneAdapter tza_a = (TimeZoneAdapter) a;\r
- TimeZoneAdapter tza_b = (TimeZoneAdapter) b;\r
- \r
- int a_offset, b_offset;\r
- boolean a_dst, b_dst;\r
- boolean bSame = true;\r
- for (int i = 0; i < sampleTimes.length; i++) {\r
- cal.setTimeInMillis(sampleTimes[i]);\r
- int era = cal.get(Calendar.ERA);\r
- int year = cal.get(Calendar.YEAR);\r
- int month = cal.get(Calendar.MONTH);\r
- int day = cal.get(Calendar.DAY_OF_MONTH);\r
- int dow = cal.get(Calendar.DAY_OF_WEEK);\r
- int mid = cal.get(Calendar.MILLISECONDS_IN_DAY);\r
- a_offset = tza_a.getOffset(era, year, month, day, dow, mid);\r
- b_offset = tza_b.getOffset(era, year, month, day, dow, mid);\r
- Date d = new Date(sampleTimes[i]);\r
- a_dst = tza_a.inDaylightTime(d);\r
- b_dst = tza_b.inDaylightTime(d);\r
- if (a_offset != b_offset || a_dst != b_dst) {\r
- bSame = false;\r
- break;\r
- }\r
- }\r
- return bSame;\r
- }\r
- }\r
-\r
- private static class JavaTimeZoneHandler implements Handler {\r
- String[] ZONES = { "GMT", "America/New_York", "GMT+05:45" };\r
-\r
- public Object[] getTestObjects() {\r
- JavaTimeZone zones[] = new JavaTimeZone[ZONES.length];\r
- for(int z = 0; z < ZONES.length; z += 1) {\r
- zones[z] = new JavaTimeZone(ZONES[z]);\r
- }\r
- return zones;\r
- }\r
- \r
- public boolean hasSameBehavior(Object a, Object b)\r
- {\r
- TimeZone zone_a = (TimeZone) a;\r
- TimeZone zone_b = (TimeZone) b;\r
-\r
- if (!(TimeZone.getCanonicalID(zone_a.getID()).equals(TimeZone.getCanonicalID(zone_b.getID())))) {\r
- return false;\r
- }\r
-\r
- int a_offsets[] = {0, 0};\r
- int b_offsets[] = {0, 0};\r
-\r
- boolean bSame = true;\r
- for (int i = 0; i < sampleTimes.length; i++) {\r
- zone_a.getOffset(sampleTimes[i], false, a_offsets);\r
- zone_b.getOffset(sampleTimes[i], false, b_offsets);\r
- if (a_offsets[0] != b_offsets[0] || a_offsets[1] != b_offsets[1]) {\r
- bSame = false;\r
- break;\r
- }\r
- }\r
- return bSame;\r
- }\r
- }\r
-\r
- private static class BigDecimalHandler implements Handler\r
- {\r
- String values[] = {\r
- "1234567890.",\r
- "123456789.0",\r
- "12345678.90",\r
- "1234567.890",\r
- "123456.7890",\r
- "12345.67890",\r
- "1234.567890",\r
- "123.4567890",\r
- "12.34567890",\r
- "1.234567890",\r
- ".1234567890"};\r
- \r
- public Object[] getTestObjects()\r
- {\r
- BigDecimal bds[] = new BigDecimal[values.length];\r
- \r
- for (int i = 0; i < values.length; i += 1) {\r
- bds[i] = new BigDecimal(values[i]);\r
- }\r
- \r
- return bds;\r
- }\r
- \r
- public boolean hasSameBehavior(Object a, Object b) {\r
- BigDecimal bda = (BigDecimal) a;\r
- BigDecimal bdb = (BigDecimal) b;\r
- \r
- return bda.toString().equals(bdb.toString());\r
- }\r
- }\r
- \r
- private static class MathContextHandler implements Handler\r
- {\r
- int forms[] = {MathContext.PLAIN, MathContext.ENGINEERING, MathContext.SCIENTIFIC};\r
- int rounds[] = {\r
- MathContext.ROUND_CEILING, MathContext.ROUND_DOWN, MathContext.ROUND_FLOOR,\r
- MathContext.ROUND_HALF_DOWN, MathContext.ROUND_HALF_EVEN, MathContext.ROUND_HALF_UP,\r
- MathContext.ROUND_UNNECESSARY, MathContext.ROUND_UP};\r
-\r
- public Object[] getTestObjects()\r
- {\r
- int objectCount = forms.length * rounds.length;\r
- MathContext contexts[] = new MathContext[objectCount];\r
- int i = 0;\r
- \r
- for (int f = 0; f < forms.length; f += 1) {\r
- for (int r = 0; r < rounds.length; r += 1) {\r
- int digits = f * r;\r
- boolean lostDigits = (r & 1) != 0;\r
- \r
- contexts[i++] = new MathContext(digits, forms[f], lostDigits, rounds[r]);\r
- }\r
- }\r
- \r
- return contexts;\r
- }\r
- \r
- public boolean hasSameBehavior(Object a, Object b)\r
- {\r
- MathContext mca = (MathContext) a;\r
- MathContext mcb = (MathContext) b;\r
- \r
- return mca.toString().equals(mcb.toString());\r
- }\r
- }\r
-\r
- private static HashMap map = new HashMap();\r
- \r
- static {\r
- map.put("com.ibm.icu.util.TimeZone", new TimeZoneHandler());\r
- map.put("com.ibm.icu.util.SimpleTimeZone", new SimpleTimeZoneHandler());\r
- map.put("com.ibm.icu.util.RuleBasedTimeZone", new RuleBasedTimeZoneHandler());\r
- map.put("com.ibm.icu.util.VTimeZone", new VTimeZoneHandler());\r
- map.put("com.ibm.icu.util.DateTimeRule", new DateTimeRuleHandler());\r
- map.put("com.ibm.icu.util.AnnualTimeZoneRule", new AnnualTimeZoneRuleHandler());\r
- map.put("com.ibm.icu.util.InitialTimeZoneRule", new InitialTimeZoneRuleHandler());\r
- map.put("com.ibm.icu.util.TimeArrayTimeZoneRule", new TimeArrayTimeZoneRuleHandler());\r
- map.put("com.ibm.icu.util.ULocale", new ULocaleHandler());\r
- map.put("com.ibm.icu.util.Currency", new CurrencyHandler());\r
- map.put("com.ibm.icu.impl.JavaTimeZone", new JavaTimeZoneHandler());\r
- map.put("com.ibm.icu.impl.OlsonTimeZone", new OlsonTimeZoneHandler());\r
- map.put("com.ibm.icu.impl.TimeZoneAdapter", new TimeZoneAdapterHandler());\r
- map.put("com.ibm.icu.math.BigDecimal", new BigDecimalHandler());\r
- map.put("com.ibm.icu.math.MathContext", new MathContextHandler());\r
- \r
- map.put("com.ibm.icu.text.NumberFormat", new FormatTests.NumberFormatHandler());\r
- map.put("com.ibm.icu.text.DecimalFormat", new FormatTests.DecimalFormatHandler());\r
- map.put("com.ibm.icu.text.RuleBasedNumberFormat", new FormatTests.RuleBasedNumberFormatHandler());\r
- map.put("com.ibm.icu.text.CurrencyPluralInfo", new FormatTests.CurrencyPluralInfoHandler());\r
- map.put("com.ibm.icu.text.DecimalFormatSymbols", new FormatTests.DecimalFormatSymbolsHandler());\r
- map.put("com.ibm.icu.text.MessageFormat", new FormatTests.MessageFormatHandler());\r
- map.put("com.ibm.icu.text.DateFormat", new FormatTests.DateFormatHandler());\r
- map.put("com.ibm.icu.text.DateFormatSymbols", new FormatTests.DateFormatSymbolsHandler());\r
- map.put("com.ibm.icu.util.DateInterval", new DateIntervalHandler());\r
- map.put("com.ibm.icu.text.DateIntervalFormat", new FormatTests.DateIntervalFormatHandler());\r
- map.put("com.ibm.icu.text.DateIntervalInfo", new FormatTests.DateIntervalInfoHandler());\r
- map.put("com.ibm.icu.text.DateIntervalInfo$PatternInfo", new FormatTests.PatternInfoHandler());\r
- map.put("com.ibm.icu.text.SimpleDateFormat", new FormatTests.SimpleDateFormatHandler());\r
- map.put("com.ibm.icu.text.ChineseDateFormat", new FormatTests.ChineseDateFormatHandler());\r
- map.put("com.ibm.icu.text.ChineseDateFormatSymbols", new FormatTests.ChineseDateFormatSymbolsHandler());\r
- map.put("com.ibm.icu.impl.DateNumberFormat", new FormatTests.DateNumberFormatHandler());\r
- map.put("com.ibm.icu.text.PluralFormat", new FormatTests.PluralFormatHandler());\r
- map.put("com.ibm.icu.text.PluralRules", new FormatTests.PluralRulesHandler());\r
- map.put("com.ibm.icu.text.TimeUnitFormat", new FormatTests.TimeUnitFormatHandler());\r
-\r
- map.put("com.ibm.icu.util.Calendar", new CalendarTests.CalendarHandler());\r
- map.put("com.ibm.icu.util.BuddhistCalendar", new CalendarTests.BuddhistCalendarHandler());\r
- map.put("com.ibm.icu.util.ChineseCalendar", new CalendarTests.ChineseCalendarHandler());\r
- map.put("com.ibm.icu.util.CopticCalendar", new CalendarTests.CopticCalendarHandler());\r
- map.put("com.ibm.icu.util.EthiopicCalendar", new CalendarTests.EthiopicCalendarHandler());\r
- map.put("com.ibm.icu.util.GregorianCalendar", new CalendarTests.GregorianCalendarHandler());\r
- map.put("com.ibm.icu.util.HebrewCalendar", new CalendarTests.HebrewCalendarHandler());\r
- map.put("com.ibm.icu.util.IndianCalendar", new CalendarTests.IndianCalendarHandler());\r
- map.put("com.ibm.icu.util.IslamicCalendar", new CalendarTests.IslamicCalendarHandler());\r
- map.put("com.ibm.icu.util.JapaneseCalendar", new CalendarTests.JapaneseCalendarHandler());\r
- map.put("com.ibm.icu.util.TaiwanCalendar", new CalendarTests.TaiwanCalendarHandler());\r
- \r
- map.put("com.ibm.icu.text.ArabicShapingException", new ExceptionTests.ArabicShapingExceptionHandler());\r
- map.put("com.ibm.icu.text.StringPrepParseException", new ExceptionTests.StringPrepParseExceptionHandler());\r
- map.put("com.ibm.icu.util.UResourceTypeMismatchException", new ExceptionTests.UResourceTypeMismatchExceptionHandler());\r
- map.put("com.ibm.icu.impl.InvalidFormatException", new ExceptionTests.InvalidFormatExceptionHandler());\r
-\r
-//#if defined(FOUNDATION10) || defined(J2SE13)\r
-//#else\r
- map.put("com.ibm.icu.text.NumberFormat$Field", new FormatTests.NumberFormatFieldHandler());\r
- map.put("com.ibm.icu.text.DateFormat$Field", new FormatTests.DateFormatFieldHandler());\r
- map.put("com.ibm.icu.text.ChineseDateFormat$Field", new FormatTests.ChineseDateFormatFieldHandler());\r
- map.put("com.ibm.icu.text.MessageFormat$Field", new FormatTests.MessageFormatFieldHandler());\r
-//#endif\r
- map.put("com.ibm.icu.impl.duration.BasicDurationFormat", new FormatTests.BasicDurationFormatHandler());\r
- map.put("com.ibm.icu.impl.RelativeDateFormat", new FormatTests.RelativeDateFormatHandler());\r
- map.put("com.ibm.icu.util.IllformedLocaleException", new ExceptionTests.IllformedLocaleExceptionHandler());\r
- map.put("com.ibm.icu.impl.locale.LocaleSyntaxException", new ExceptionTests.LocaleSyntaxExceptionHandler());\r
- map.put("com.ibm.icu.impl.IllegalIcuArgumentException", new ExceptionTests.IllegalIcuArgumentExceptionHandler());\r
- }\r
- \r
- public SerializableTest()\r
- {\r
- super(\r
- new String[] {\r
- "com.ibm.icu.dev.test.serializable.CoverageTest",\r
- "com.ibm.icu.dev.test.serializable.CompatibilityTest"},\r
- "All Serializable Tests"\r
- );\r
- }\r
-\r
- public static final String CLASS_TARGET_NAME = "Serializable";\r
-\r
- public static void main(String[] args)\r
- {\r
- SerializableTest test = new SerializableTest();\r
- \r
- test.run(args);\r
- }\r
-}\r
-//eof\r
+//##header J2SE15
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2009, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ */
+
+package com.ibm.icu.dev.test.serializable;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Locale;
+
+import com.ibm.icu.dev.test.TestFmwk;
+import com.ibm.icu.impl.JavaTimeZone;
+import com.ibm.icu.impl.OlsonTimeZone;
+import com.ibm.icu.impl.TimeZoneAdapter;
+import com.ibm.icu.math.BigDecimal;
+import com.ibm.icu.math.MathContext;
+import com.ibm.icu.util.AnnualTimeZoneRule;
+import com.ibm.icu.util.Calendar;
+import com.ibm.icu.util.Currency;
+import com.ibm.icu.util.DateInterval;
+import com.ibm.icu.util.DateTimeRule;
+import com.ibm.icu.util.GregorianCalendar;
+import com.ibm.icu.util.InitialTimeZoneRule;
+import com.ibm.icu.util.RuleBasedTimeZone;
+import com.ibm.icu.util.SimpleTimeZone;
+import com.ibm.icu.util.TimeArrayTimeZoneRule;
+import com.ibm.icu.util.TimeZone;
+import com.ibm.icu.util.TimeZoneRule;
+import com.ibm.icu.util.ULocale;
+import com.ibm.icu.util.VTimeZone;
+
+/**
+ * @author emader
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SerializableTest extends TestFmwk.TestGroup
+{
+ public interface Handler
+ {
+ public Object[] getTestObjects();
+
+ public boolean hasSameBehavior(Object a, Object b);
+ }
+
+ public static Handler getHandler(String className)
+ {
+ return (Handler) map.get(className);
+ }
+
+ private static class TimeZoneHandler implements Handler
+ {
+ String[] ZONES = { "GMT", "MET", "IST" };
+
+ public Object[] getTestObjects()
+ {
+ TimeZone zones[] = new TimeZone[ZONES.length];
+
+ for(int z = 0; z < ZONES.length; z += 1) {
+ zones[z] = TimeZone.getTimeZone(ZONES[z]);
+ }
+
+ return zones;
+ }
+
+ public boolean hasSameBehavior(Object a, Object b)
+ {
+ TimeZone zone_a = (TimeZone) a;
+ TimeZone zone_b = (TimeZone) b;
+
+ if (!(zone_a.getDisplayName().equals(zone_b.getDisplayName()))) {
+ return false;
+ }
+
+ int a_offsets[] = {0, 0};
+ int b_offsets[] = {0, 0};
+
+ boolean bSame = true;
+ for (int i = 0; i < sampleTimes.length; i++) {
+ zone_a.getOffset(sampleTimes[i], false, a_offsets);
+ zone_b.getOffset(sampleTimes[i], false, b_offsets);
+ if (a_offsets[0] != b_offsets[0] || a_offsets[1] != b_offsets[1]) {
+ bSame = false;
+ break;
+ }
+ }
+ return bSame;
+ }
+ }
+
+ private static Locale locales[] = {
+ Locale.CANADA, Locale.CANADA_FRENCH, Locale.CHINA,
+ Locale.CHINESE, Locale.ENGLISH, Locale.FRANCE, Locale.FRENCH,
+ Locale.GERMAN, Locale.GERMANY, Locale.ITALIAN, Locale.ITALY,
+ Locale.JAPAN, Locale.JAPANESE, Locale.KOREA, Locale.KOREAN,
+ Locale.PRC, Locale.SIMPLIFIED_CHINESE, Locale.TAIWAN,
+ Locale.TRADITIONAL_CHINESE, Locale.UK, Locale.US
+ };
+
+ private static Locale places[] = {
+ Locale.CANADA, Locale.CANADA_FRENCH, Locale.CHINA,
+ Locale.FRANCE, Locale.GERMANY, Locale.ITALY,
+ Locale.JAPAN, Locale.KOREA, Locale.PRC, Locale.TAIWAN,
+ Locale.UK, Locale.US
+ };
+
+ public static Locale[] getLocales()
+ {
+ return locales;
+ }
+
+ public static boolean compareStrings(String a[], String b[])
+ {
+ if (a.length != b.length) {
+ return false;
+ }
+
+ for (int i = 0; i < a.length; i += 1) {
+ if (! a[i].equals(b[i])) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public static boolean compareChars(char a[], char b[])
+ {
+ if (a.length != b.length) {
+ return false;
+ }
+
+ for (int i = 0; i < a.length; i += 1) {
+ if (a[i] != b[i]) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private static class SimpleTimeZoneHandler extends TimeZoneHandler
+ {
+ public Object[] getTestObjects()
+ {
+ SimpleTimeZone simpleTimeZones[] = new SimpleTimeZone[6];
+
+ simpleTimeZones[0] = new SimpleTimeZone(32400000, "MyTimeZone");
+
+ simpleTimeZones[1] = new SimpleTimeZone(32400000, "Asia/Tokyo");
+
+ simpleTimeZones[2] = new SimpleTimeZone(32400000, "Asia/Tokyo");
+ simpleTimeZones[2].setRawOffset(0);
+
+ simpleTimeZones[3] = new SimpleTimeZone(32400000, "Asia/Tokyo");
+ simpleTimeZones[3].setStartYear(100);
+
+ simpleTimeZones[4] = new SimpleTimeZone(32400000, "Asia/Tokyo");
+ simpleTimeZones[4].setStartYear(1000);
+ simpleTimeZones[4].setDSTSavings(1800000);
+ simpleTimeZones[4].setStartRule(3, 4, 180000);
+ simpleTimeZones[4].setEndRule(6, 3, 4, 360000);
+
+ simpleTimeZones[5] = new SimpleTimeZone(32400000, "Asia/Tokyo");
+ simpleTimeZones[5].setStartRule(2, 3, 4, 360000);
+ simpleTimeZones[5].setEndRule(6, 3, 4, 360000);
+
+ return simpleTimeZones;
+ }
+ }
+
+ private static class VTimeZoneHandler extends TimeZoneHandler {
+ public Object[] getTestObjects() {
+ //TODO
+ VTimeZone[] vtzs = new VTimeZone[1];
+ vtzs[0] = VTimeZone.create("America/New_York");
+ return vtzs;
+ }
+ }
+
+ private static final int HOUR = 60*60*1000;
+ private static final AnnualTimeZoneRule[] TEST_US_EASTERN = {
+ new AnnualTimeZoneRule("EST", -5*HOUR, 0,
+ new DateTimeRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2*HOUR, DateTimeRule.WALL_TIME),
+ 1967, 2006),
+
+ new AnnualTimeZoneRule("EST", -5*HOUR, 0,
+ new DateTimeRule(Calendar.NOVEMBER, 1, Calendar.SUNDAY, true, 2*HOUR, DateTimeRule.WALL_TIME),
+ 2007, AnnualTimeZoneRule.MAX_YEAR),
+
+ new AnnualTimeZoneRule("EDT", -5*HOUR, 1*HOUR,
+ new DateTimeRule(Calendar.APRIL, -1, Calendar.SUNDAY, 2*HOUR, DateTimeRule.WALL_TIME),
+ 1967, 1973),
+
+ new AnnualTimeZoneRule("EDT", -5*HOUR, 1*HOUR,
+ new DateTimeRule(Calendar.JANUARY, 6, 2*HOUR, DateTimeRule.WALL_TIME),
+ 1974, 1974),
+
+ new AnnualTimeZoneRule("EDT", -5*HOUR, 1*HOUR,
+ new DateTimeRule(Calendar.FEBRUARY, 23, 2*HOUR, DateTimeRule.WALL_TIME),
+ 1975, 1975),
+
+ new AnnualTimeZoneRule("EDT", -5*HOUR, 1*HOUR,
+ new DateTimeRule(Calendar.APRIL, -1, Calendar.SUNDAY, 2*HOUR, DateTimeRule.WALL_TIME),
+ 1976, 1986),
+
+ new AnnualTimeZoneRule("EDT", -5*HOUR, 1*HOUR,
+ new DateTimeRule(Calendar.APRIL, 1, Calendar.SUNDAY, true, 2*HOUR, DateTimeRule.WALL_TIME),
+ 1987, 2006),
+
+ new AnnualTimeZoneRule("EDT", -5*HOUR, 1*HOUR,
+ new DateTimeRule(Calendar.MARCH, 8, Calendar.SUNDAY, true, 2*HOUR, DateTimeRule.WALL_TIME),
+ 2007, AnnualTimeZoneRule.MAX_YEAR)
+ };
+
+
+
+ private static class RuleBasedTimeZoneHandler extends TimeZoneHandler
+ {
+ public Object[] getTestObjects()
+ {
+ RuleBasedTimeZone ruleBasedTimeZones[] = new RuleBasedTimeZone[2];
+
+ InitialTimeZoneRule ir = new InitialTimeZoneRule("GMT-5", -5*HOUR, 0);
+
+ // GMT-5, no transition
+ ruleBasedTimeZones[0] = new RuleBasedTimeZone("GMT-5", ir);
+
+
+ // US Eastern since 1967
+ ruleBasedTimeZones[1] = new RuleBasedTimeZone("US_East", ir);
+ for (int i = 0; i < TEST_US_EASTERN.length; i++) {
+ ruleBasedTimeZones[1].addTransitionRule(TEST_US_EASTERN[i]);
+ }
+ return ruleBasedTimeZones;
+ }
+ }
+
+ private static class DateTimeRuleHandler implements Handler {
+ public Object[] getTestObjects() {
+ DateTimeRule[] rules = new DateTimeRule[4];
+
+ // DOM + UTC
+ rules[0] = new DateTimeRule(Calendar.OCTOBER, 10, 13*HOUR, DateTimeRule.UTC_TIME);
+
+ // DOW + WALL
+ rules[1] = new DateTimeRule(Calendar.MARCH, 2, Calendar.SUNDAY, 2*HOUR, DateTimeRule.WALL_TIME);
+
+ // DOW_GEQ_DOM + STD
+ rules[2] = new DateTimeRule(Calendar.MAY, 1, Calendar.MONDAY, true, 0*HOUR, DateTimeRule.STANDARD_TIME);
+
+ // DOW_LEQ_DOM + WALL
+ rules[3] = new DateTimeRule(Calendar.AUGUST, 31, Calendar.SATURDAY, false, 1*HOUR, DateTimeRule.WALL_TIME);
+
+ return rules;
+ }
+
+ public boolean hasSameBehavior(Object a, Object b) {
+ return hasSameRule((DateTimeRule)a, (DateTimeRule)b);
+ }
+
+ static boolean hasSameRule(DateTimeRule dtra, DateTimeRule dtrb) {
+ boolean bSame = false;
+ if (dtra.getDateRuleType() == dtrb.getDateRuleType()
+ && dtra.getRuleMonth() == dtrb.getRuleMonth()
+ && dtra.getTimeRuleType() == dtrb.getTimeRuleType()
+ && dtra.getRuleMillisInDay() == dtrb.getRuleMillisInDay()) {
+ switch (dtra.getDateRuleType()) {
+ case DateTimeRule.DOM:
+ bSame = (dtra.getRuleDayOfMonth() == dtrb.getRuleDayOfMonth());
+ break;
+ case DateTimeRule.DOW:
+ bSame = (dtra.getRuleDayOfWeek() == dtrb.getRuleDayOfWeek() &&
+ dtra.getRuleWeekInMonth() == dtrb.getRuleWeekInMonth());
+ break;
+ case DateTimeRule.DOW_GEQ_DOM:
+ case DateTimeRule.DOW_LEQ_DOM:
+ bSame = (dtra.getRuleDayOfMonth() == dtrb.getRuleDayOfMonth() &&
+ dtra.getRuleDayOfWeek() == dtrb.getRuleDayOfWeek());
+ break;
+ }
+ }
+ return bSame;
+ }
+ }
+
+ private static boolean compareTimeZoneRules(TimeZoneRule ra, TimeZoneRule rb) {
+ if (ra.getName().equals(rb.getName()) &&
+ ra.getRawOffset() == rb.getRawOffset() &&
+ ra.getDSTSavings() == rb.getDSTSavings()) {
+ return true;
+ }
+ return false;
+ }
+
+ private static class AnnualTimeZoneRuleHandler implements Handler {
+ public Object[] getTestObjects() {
+ return TEST_US_EASTERN;
+ }
+
+ public boolean hasSameBehavior(Object a, Object b) {
+ AnnualTimeZoneRule ra = (AnnualTimeZoneRule)a;
+ AnnualTimeZoneRule rb = (AnnualTimeZoneRule)b;
+ if (DateTimeRuleHandler.hasSameRule(ra.getRule(), rb.getRule()) &&
+ ra.getStartYear() == rb.getStartYear() &&
+ ra.getEndYear() == rb.getEndYear()) {
+ return compareTimeZoneRules(ra, rb);
+ }
+ return false;
+ }
+ }
+
+ private static class InitialTimeZoneRuleHandler implements Handler {
+ public Object[] getTestObjects() {
+ TimeZoneRule[] rules = new TimeZoneRule[2];
+ rules[0] = new InitialTimeZoneRule("EST", -5*HOUR, 0);
+ rules[1] = new InitialTimeZoneRule("PST", -8*HOUR, 0);
+ return rules;
+ }
+
+ public boolean hasSameBehavior(Object a, Object b) {
+ return compareTimeZoneRules((TimeZoneRule)a, (TimeZoneRule)b);
+ }
+ }
+
+ private static class TimeArrayTimeZoneRuleHandler implements Handler {
+ public Object[] getTestObjects() {
+ TimeArrayTimeZoneRule[] rules = new TimeArrayTimeZoneRule[1];
+ long[] ttime = new long[] {-631152000000L, 0L, 946684800000L}; /* {1950-1-1, 1970-1-1, 2000-1-1} */
+ rules[0] = new TimeArrayTimeZoneRule("Foo", 1*HOUR, 1*HOUR, ttime, DateTimeRule.UTC_TIME);
+
+ return rules;
+ }
+ public boolean hasSameBehavior(Object a, Object b) {
+ TimeArrayTimeZoneRule ra = (TimeArrayTimeZoneRule)a;
+ TimeArrayTimeZoneRule rb = (TimeArrayTimeZoneRule)b;
+
+ Date da = ra.getFirstStart(0, 0);
+ Date db = rb.getFirstStart(0, 0);
+ long t = da.getTime();
+ if (da.equals(db)) {
+ da = ra.getFinalStart(0, 0);
+ db = rb.getFinalStart(0, 0);
+ long end = da.getTime();
+ if (da.equals(db)) {
+ while (t < end) {
+ da = ra.getNextStart(t, 0, 0, false);
+ db = ra.getNextStart(t, 0, 0, false);
+ if (da == null || db == null || !da.equals(db)) {
+ break;
+ }
+ t = da.getTime();
+ }
+ return compareTimeZoneRules(ra, rb);
+ }
+ }
+ return false;
+ }
+ }
+
+ private static class ULocaleHandler implements Handler
+ {
+ public Object[] getTestObjects()
+ {
+ ULocale uLocales[] = new ULocale[locales.length];
+
+ for (int i = 0; i < locales.length; i += 1) {
+ uLocales[i] = ULocale.forLocale(locales[i]);
+ }
+
+ return uLocales;
+ }
+
+ public boolean hasSameBehavior(Object a, Object b)
+ {
+ ULocale uloc_a = (ULocale) a;
+ ULocale uloc_b = (ULocale) b;
+
+ return uloc_a.getName().equals(uloc_b.getName());
+ }
+ }
+
+ public static class DateIntervalHandler implements Handler
+ {
+ private DateInterval dateInterval[] = {
+ new DateInterval(0L, 1164931200000L/*20061201T000000Z*/)
+ };
+ public Object[] getTestObjects()
+ {
+ return dateInterval;
+ }
+
+ public boolean hasSameBehavior(Object a, Object b)
+ {
+ return a.equals(b);
+ }
+ }
+
+
+ private static class CurrencyHandler implements Handler
+ {
+ public Object[] getTestObjects()
+ {
+ Currency currencies[] = new Currency[places.length];
+
+ for (int i = 0; i < places.length; i += 1) {
+ currencies[i] = Currency.getInstance(places[i]);
+ }
+
+ return currencies;
+ }
+
+ public boolean hasSameBehavior(Object a, Object b)
+ {
+ Currency curr_a = (Currency) a;
+ Currency curr_b = (Currency) b;
+
+ return curr_a.getCurrencyCode().equals(curr_b.getCurrencyCode());
+
+ }
+ }
+
+ private static String zoneIDs[] = {
+ "Pacific/Honolulu", "America/Anchorage", "America/Los_Angeles", "America/Denver",
+ "America/Chicago", "America/New_York", "Africa/Cairo", "Africa/Addis_Ababa", "Africa/Dar_es_Salaam",
+ "Africa/Freetown", "Africa/Johannesburg", "Africa/Nairobi", "Asia/Bangkok", "Asia/Baghdad",
+ "Asia/Calcutta", "Asia/Hong_Kong", "Asia/Jakarta", "Asia/Jerusalem", "Asia/Manila", "Asia/Tokyo",
+ "Europe/Amsterdam", "Europe/Athens", "Europe/Berlin", "Europe/London", "Europe/Malta", "Europe/Moscow",
+ "Europe/Paris", "Europe/Rome"
+ };
+
+ private static long sampleTimes[] = {
+ 1136073600000L, // 20060101T000000Z
+ 1138752000000L, // 20060201T000000Z
+ 1141171200000L, // 20060301T000000Z
+ 1143849600000L, // 20060401T000000Z
+ 1146441600000L, // 20060501T000000Z
+ 1149120000000L, // 20060601T000000Z
+ 1151712000000L, // 20060701T000000Z
+ 1154390400000L, // 20060801T000000Z
+ 1157068800000L, // 20060901T000000Z
+ 1159660800000L, // 20061001T000000Z
+ 1162339200000L, // 20061101T000000Z
+ 1164931200000L, // 20061201T000000Z
+ };
+
+ private static class OlsonTimeZoneHandler implements Handler
+ {
+ public Object[] getTestObjects()
+ {
+ OlsonTimeZone timeZones[] = new OlsonTimeZone[zoneIDs.length];
+
+ for (int i = 0; i < zoneIDs.length; i += 1) {
+ timeZones[i] = new OlsonTimeZone(zoneIDs[i]);
+ }
+
+ return timeZones;
+
+ }
+
+ public boolean hasSameBehavior(Object a, Object b)
+ {
+ OlsonTimeZone otz_a = (OlsonTimeZone) a;
+ OlsonTimeZone otz_b = (OlsonTimeZone) b;
+ int a_offsets[] = {0, 0};
+ int b_offsets[] = {0, 0};
+
+ boolean bSame = true;
+ for (int i = 0; i < sampleTimes.length; i++) {
+ otz_a.getOffset(sampleTimes[i], false, a_offsets);
+ otz_b.getOffset(sampleTimes[i], false, b_offsets);
+ if (a_offsets[0] != b_offsets[0] || a_offsets[1] != b_offsets[1]) {
+ bSame = false;
+ break;
+ }
+ }
+ return bSame;
+ }
+ }
+
+ private static class TimeZoneAdapterHandler implements Handler
+ {
+ public Object[] getTestObjects()
+ {
+ TimeZoneAdapter timeZones[] = new TimeZoneAdapter[zoneIDs.length];
+
+ for (int i = 0; i < zoneIDs.length; i += 1) {
+ timeZones[i] = new TimeZoneAdapter(TimeZone.getTimeZone(zoneIDs[i]));
+ }
+
+ return timeZones;
+
+ }
+
+ public boolean hasSameBehavior(Object a, Object b)
+ {
+ GregorianCalendar cal = new GregorianCalendar();
+ TimeZoneAdapter tza_a = (TimeZoneAdapter) a;
+ TimeZoneAdapter tza_b = (TimeZoneAdapter) b;
+
+ int a_offset, b_offset;
+ boolean a_dst, b_dst;
+ boolean bSame = true;
+ for (int i = 0; i < sampleTimes.length; i++) {
+ cal.setTimeInMillis(sampleTimes[i]);
+ int era = cal.get(Calendar.ERA);
+ int year = cal.get(Calendar.YEAR);
+ int month = cal.get(Calendar.MONTH);
+ int day = cal.get(Calendar.DAY_OF_MONTH);
+ int dow = cal.get(Calendar.DAY_OF_WEEK);
+ int mid = cal.get(Calendar.MILLISECONDS_IN_DAY);
+ a_offset = tza_a.getOffset(era, year, month, day, dow, mid);
+ b_offset = tza_b.getOffset(era, year, month, day, dow, mid);
+ Date d = new Date(sampleTimes[i]);
+ a_dst = tza_a.inDaylightTime(d);
+ b_dst = tza_b.inDaylightTime(d);
+ if (a_offset != b_offset || a_dst != b_dst) {
+ bSame = false;
+ break;
+ }
+ }
+ return bSame;
+ }
+ }
+
+ private static class JavaTimeZoneHandler implements Handler {
+ String[] ZONES = { "GMT", "America/New_York", "GMT+05:45" };
+
+ public Object[] getTestObjects() {
+ JavaTimeZone zones[] = new JavaTimeZone[ZONES.length];
+ for(int z = 0; z < ZONES.length; z += 1) {
+ zones[z] = new JavaTimeZone(ZONES[z]);
+ }
+ return zones;
+ }
+
+ public boolean hasSameBehavior(Object a, Object b)
+ {
+ TimeZone zone_a = (TimeZone) a;
+ TimeZone zone_b = (TimeZone) b;
+
+ if (!(TimeZone.getCanonicalID(zone_a.getID()).equals(TimeZone.getCanonicalID(zone_b.getID())))) {
+ return false;
+ }
+
+ int a_offsets[] = {0, 0};
+ int b_offsets[] = {0, 0};
+
+ boolean bSame = true;
+ for (int i = 0; i < sampleTimes.length; i++) {
+ zone_a.getOffset(sampleTimes[i], false, a_offsets);
+ zone_b.getOffset(sampleTimes[i], false, b_offsets);
+ if (a_offsets[0] != b_offsets[0] || a_offsets[1] != b_offsets[1]) {
+ bSame = false;
+ break;
+ }
+ }
+ return bSame;
+ }
+ }
+
+ private static class BigDecimalHandler implements Handler
+ {
+ String values[] = {
+ "1234567890.",
+ "123456789.0",
+ "12345678.90",
+ "1234567.890",
+ "123456.7890",
+ "12345.67890",
+ "1234.567890",
+ "123.4567890",
+ "12.34567890",
+ "1.234567890",
+ ".1234567890"};
+
+ public Object[] getTestObjects()
+ {
+ BigDecimal bds[] = new BigDecimal[values.length];
+
+ for (int i = 0; i < values.length; i += 1) {
+ bds[i] = new BigDecimal(values[i]);
+ }
+
+ return bds;
+ }
+
+ public boolean hasSameBehavior(Object a, Object b) {
+ BigDecimal bda = (BigDecimal) a;
+ BigDecimal bdb = (BigDecimal) b;
+
+ return bda.toString().equals(bdb.toString());
+ }
+ }
+
+ private static class MathContextHandler implements Handler
+ {
+ int forms[] = {MathContext.PLAIN, MathContext.ENGINEERING, MathContext.SCIENTIFIC};
+ int rounds[] = {
+ MathContext.ROUND_CEILING, MathContext.ROUND_DOWN, MathContext.ROUND_FLOOR,
+ MathContext.ROUND_HALF_DOWN, MathContext.ROUND_HALF_EVEN, MathContext.ROUND_HALF_UP,
+ MathContext.ROUND_UNNECESSARY, MathContext.ROUND_UP};
+
+ public Object[] getTestObjects()
+ {
+ int objectCount = forms.length * rounds.length;
+ MathContext contexts[] = new MathContext[objectCount];
+ int i = 0;
+
+ for (int f = 0; f < forms.length; f += 1) {
+ for (int r = 0; r < rounds.length; r += 1) {
+ int digits = f * r;
+ boolean lostDigits = (r & 1) != 0;
+
+ contexts[i++] = new MathContext(digits, forms[f], lostDigits, rounds[r]);
+ }
+ }
+
+ return contexts;
+ }
+
+ public boolean hasSameBehavior(Object a, Object b)
+ {
+ MathContext mca = (MathContext) a;
+ MathContext mcb = (MathContext) b;
+
+ return mca.toString().equals(mcb.toString());
+ }
+ }
+
+ private static HashMap map = new HashMap();
+
+ static {
+ map.put("com.ibm.icu.util.TimeZone", new TimeZoneHandler());
+ map.put("com.ibm.icu.util.SimpleTimeZone", new SimpleTimeZoneHandler());
+ map.put("com.ibm.icu.util.RuleBasedTimeZone", new RuleBasedTimeZoneHandler());
+ map.put("com.ibm.icu.util.VTimeZone", new VTimeZoneHandler());
+ map.put("com.ibm.icu.util.DateTimeRule", new DateTimeRuleHandler());
+ map.put("com.ibm.icu.util.AnnualTimeZoneRule", new AnnualTimeZoneRuleHandler());
+ map.put("com.ibm.icu.util.InitialTimeZoneRule", new InitialTimeZoneRuleHandler());
+ map.put("com.ibm.icu.util.TimeArrayTimeZoneRule", new TimeArrayTimeZoneRuleHandler());
+ map.put("com.ibm.icu.util.ULocale", new ULocaleHandler());
+ map.put("com.ibm.icu.util.Currency", new CurrencyHandler());
+ map.put("com.ibm.icu.impl.JavaTimeZone", new JavaTimeZoneHandler());
+ map.put("com.ibm.icu.impl.OlsonTimeZone", new OlsonTimeZoneHandler());
+ map.put("com.ibm.icu.impl.TimeZoneAdapter", new TimeZoneAdapterHandler());
+ map.put("com.ibm.icu.math.BigDecimal", new BigDecimalHandler());
+ map.put("com.ibm.icu.math.MathContext", new MathContextHandler());
+
+ map.put("com.ibm.icu.text.NumberFormat", new FormatTests.NumberFormatHandler());
+ map.put("com.ibm.icu.text.DecimalFormat", new FormatTests.DecimalFormatHandler());
+ map.put("com.ibm.icu.text.RuleBasedNumberFormat", new FormatTests.RuleBasedNumberFormatHandler());
+ map.put("com.ibm.icu.text.CurrencyPluralInfo", new FormatTests.CurrencyPluralInfoHandler());
+ map.put("com.ibm.icu.text.DecimalFormatSymbols", new FormatTests.DecimalFormatSymbolsHandler());
+ map.put("com.ibm.icu.text.MessageFormat", new FormatTests.MessageFormatHandler());
+ map.put("com.ibm.icu.text.DateFormat", new FormatTests.DateFormatHandler());
+ map.put("com.ibm.icu.text.DateFormatSymbols", new FormatTests.DateFormatSymbolsHandler());
+ map.put("com.ibm.icu.util.DateInterval", new DateIntervalHandler());
+ map.put("com.ibm.icu.text.DateIntervalFormat", new FormatTests.DateIntervalFormatHandler());
+ map.put("com.ibm.icu.text.DateIntervalInfo", new FormatTests.DateIntervalInfoHandler());
+ map.put("com.ibm.icu.text.DateIntervalInfo$PatternInfo", new FormatTests.PatternInfoHandler());
+ map.put("com.ibm.icu.text.SimpleDateFormat", new FormatTests.SimpleDateFormatHandler());
+ map.put("com.ibm.icu.text.ChineseDateFormat", new FormatTests.ChineseDateFormatHandler());
+ map.put("com.ibm.icu.text.ChineseDateFormatSymbols", new FormatTests.ChineseDateFormatSymbolsHandler());
+ map.put("com.ibm.icu.impl.DateNumberFormat", new FormatTests.DateNumberFormatHandler());
+ map.put("com.ibm.icu.text.PluralFormat", new FormatTests.PluralFormatHandler());
+ map.put("com.ibm.icu.text.PluralRules", new FormatTests.PluralRulesHandler());
+ map.put("com.ibm.icu.text.TimeUnitFormat", new FormatTests.TimeUnitFormatHandler());
+
+ map.put("com.ibm.icu.util.Calendar", new CalendarTests.CalendarHandler());
+ map.put("com.ibm.icu.util.BuddhistCalendar", new CalendarTests.BuddhistCalendarHandler());
+ map.put("com.ibm.icu.util.ChineseCalendar", new CalendarTests.ChineseCalendarHandler());
+ map.put("com.ibm.icu.util.CopticCalendar", new CalendarTests.CopticCalendarHandler());
+ map.put("com.ibm.icu.util.EthiopicCalendar", new CalendarTests.EthiopicCalendarHandler());
+ map.put("com.ibm.icu.util.GregorianCalendar", new CalendarTests.GregorianCalendarHandler());
+ map.put("com.ibm.icu.util.HebrewCalendar", new CalendarTests.HebrewCalendarHandler());
+ map.put("com.ibm.icu.util.IndianCalendar", new CalendarTests.IndianCalendarHandler());
+ map.put("com.ibm.icu.util.IslamicCalendar", new CalendarTests.IslamicCalendarHandler());
+ map.put("com.ibm.icu.util.JapaneseCalendar", new CalendarTests.JapaneseCalendarHandler());
+ map.put("com.ibm.icu.util.TaiwanCalendar", new CalendarTests.TaiwanCalendarHandler());
+
+ map.put("com.ibm.icu.text.ArabicShapingException", new ExceptionTests.ArabicShapingExceptionHandler());
+ map.put("com.ibm.icu.text.StringPrepParseException", new ExceptionTests.StringPrepParseExceptionHandler());
+ map.put("com.ibm.icu.util.UResourceTypeMismatchException", new ExceptionTests.UResourceTypeMismatchExceptionHandler());
+ map.put("com.ibm.icu.impl.InvalidFormatException", new ExceptionTests.InvalidFormatExceptionHandler());
+
+//#if defined(FOUNDATION10) || defined(J2SE13)
+//#else
+ map.put("com.ibm.icu.text.NumberFormat$Field", new FormatTests.NumberFormatFieldHandler());
+ map.put("com.ibm.icu.text.DateFormat$Field", new FormatTests.DateFormatFieldHandler());
+ map.put("com.ibm.icu.text.ChineseDateFormat$Field", new FormatTests.ChineseDateFormatFieldHandler());
+ map.put("com.ibm.icu.text.MessageFormat$Field", new FormatTests.MessageFormatFieldHandler());
+//#endif
+ map.put("com.ibm.icu.impl.duration.BasicDurationFormat", new FormatTests.BasicDurationFormatHandler());
+ map.put("com.ibm.icu.impl.RelativeDateFormat", new FormatTests.RelativeDateFormatHandler());
+ map.put("com.ibm.icu.util.IllformedLocaleException", new ExceptionTests.IllformedLocaleExceptionHandler());
+ map.put("com.ibm.icu.impl.locale.LocaleSyntaxException", new ExceptionTests.LocaleSyntaxExceptionHandler());
+ map.put("com.ibm.icu.impl.IllegalIcuArgumentException", new ExceptionTests.IllegalIcuArgumentExceptionHandler());
+ }
+
+ public SerializableTest()
+ {
+ super(
+ new String[] {
+ "com.ibm.icu.dev.test.serializable.CoverageTest",
+ "com.ibm.icu.dev.test.serializable.CompatibilityTest"},
+ "All Serializable Tests"
+ );
+ }
+
+ public static final String CLASS_TARGET_NAME = "Serializable";
+
+ public static void main(String[] args)
+ {
+ SerializableTest test = new SerializableTest();
+
+ test.run(args);
+ }
+}
+//eof