ICU-4530 Initial version of tests.
X-SVN-Rev: 18661
This commit is contained in:
parent
953d673966
commit
519b15e3c6
197
icu4j/src/com/ibm/icu/dev/test/serializable/CalendarTests.java
Normal file
197
icu4j/src/com/ibm/icu/dev/test/serializable/CalendarTests.java
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
/*
|
||||||
|
*******************************************************************************
|
||||||
|
* Copyright (C) 1996-2005, International Business Machines Corporation and *
|
||||||
|
* others. All Rights Reserved. *
|
||||||
|
*******************************************************************************
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.ibm.icu.dev.test.serializable;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.ObjectInputStream;
|
||||||
|
import java.io.ObjectOutputStream;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import com.ibm.icu.util.BuddhistCalendar;
|
||||||
|
import com.ibm.icu.util.Calendar;
|
||||||
|
import com.ibm.icu.util.ChineseCalendar;
|
||||||
|
import com.ibm.icu.util.CopticCalendar;
|
||||||
|
import com.ibm.icu.util.EthiopicCalendar;
|
||||||
|
import com.ibm.icu.util.GregorianCalendar;
|
||||||
|
import com.ibm.icu.util.HebrewCalendar;
|
||||||
|
import com.ibm.icu.util.IslamicCalendar;
|
||||||
|
import com.ibm.icu.util.JapaneseCalendar;
|
||||||
|
import com.ibm.icu.util.TimeZone;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author emader
|
||||||
|
*
|
||||||
|
* TODO To change the template for this generated type comment go to
|
||||||
|
* Window - Preferences - Java - Code Style - Code Templates
|
||||||
|
*/
|
||||||
|
public class CalendarTests
|
||||||
|
{
|
||||||
|
static class CalendarTest implements SerializableTest.Handler
|
||||||
|
{
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
TimeZone pst = TimeZone.getTimeZone("America/Los_Angeles");
|
||||||
|
Calendar calendars[] = new Calendar[locales.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < locales.length; i += 1) {
|
||||||
|
calendars[i] = Calendar.getInstance(pst, locales[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return calendars;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasSameBehavior(Object a, Object b)
|
||||||
|
{
|
||||||
|
Calendar cal_a = (Calendar) a;
|
||||||
|
Calendar cal_b = (Calendar) b;
|
||||||
|
long now = System.currentTimeMillis();
|
||||||
|
|
||||||
|
cal_a.setTimeInMillis(now);
|
||||||
|
cal_a.roll(Calendar.MONTH, 1);
|
||||||
|
|
||||||
|
cal_b.setTimeInMillis(now);
|
||||||
|
cal_b.roll(Calendar.MONTH, 1);
|
||||||
|
|
||||||
|
return cal_a.getTime().equals(cal_a.getTime());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class BuddhistCalendarTest extends CalendarTest
|
||||||
|
{
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
TimeZone tst = TimeZone.getTimeZone("Asia/Bangkok");
|
||||||
|
BuddhistCalendar calendars[] = new BuddhistCalendar[locales.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < locales.length; i += 1) {
|
||||||
|
calendars[i] = new BuddhistCalendar(tst, locales[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return calendars;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class ChineseCalendarTest extends CalendarTest
|
||||||
|
{
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
TimeZone cst = TimeZone.getTimeZone("Asia/Shanghai");
|
||||||
|
ChineseCalendar calendars[] = new ChineseCalendar[locales.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < locales.length; i += 1) {
|
||||||
|
calendars[i] = new ChineseCalendar(cst, locales[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return calendars;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class CopticCalendarTest extends CalendarTest
|
||||||
|
{
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
TimeZone ast = TimeZone.getTimeZone("Europe/Athens");
|
||||||
|
CopticCalendar calendars[] = new CopticCalendar[locales.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < locales.length; i += 1) {
|
||||||
|
calendars[i] = new CopticCalendar(ast, locales[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return calendars;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class EthiopicCalendarTest extends CalendarTest
|
||||||
|
{
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
TimeZone ast = TimeZone.getTimeZone("Africa/Addis_Ababa");
|
||||||
|
EthiopicCalendar calendars[] = new EthiopicCalendar[locales.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < locales.length; i += 1) {
|
||||||
|
calendars[i] = new EthiopicCalendar(ast, locales[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return calendars;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class GregorianCalendarTest extends CalendarTest
|
||||||
|
{
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
TimeZone pst = TimeZone.getTimeZone("America/Los_Angeles");
|
||||||
|
GregorianCalendar calendars[] = new GregorianCalendar[locales.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < locales.length; i += 1) {
|
||||||
|
calendars[i] = new GregorianCalendar(pst, locales[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return calendars;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class HebrewCalendarTest extends CalendarTest
|
||||||
|
{
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
TimeZone jst = TimeZone.getTimeZone("Asia/Jerusalem");
|
||||||
|
HebrewCalendar calendars[] = new HebrewCalendar[locales.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < locales.length; i += 1) {
|
||||||
|
calendars[i] = new HebrewCalendar(jst, locales[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return calendars;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class IslamicCalendarTest extends CalendarTest
|
||||||
|
{
|
||||||
|
public Object[] getTestObjects() {
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
TimeZone cst = TimeZone.getTimeZone("Africa/Cairo");
|
||||||
|
IslamicCalendar calendars[] = new IslamicCalendar[locales.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < locales.length; i += 1) {
|
||||||
|
calendars[i] = new IslamicCalendar(cst, locales[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return calendars;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class JapaneseCalendarTest extends CalendarTest
|
||||||
|
{
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
TimeZone jst = TimeZone.getTimeZone("Asia/Tokyo");
|
||||||
|
JapaneseCalendar calendars[] = new JapaneseCalendar[locales.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < locales.length; i += 1) {
|
||||||
|
calendars[i] = new JapaneseCalendar(jst, locales[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return calendars;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args)
|
||||||
|
{
|
||||||
|
//nothing needed yet...
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
*******************************************************************************
|
||||||
|
* Copyright (C) 1996-2005, International Business Machines Corporation and *
|
||||||
|
* others. All Rights Reserved. *
|
||||||
|
*******************************************************************************
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.ibm.icu.dev.test.serializable;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import com.ibm.icu.text.ArabicShapingException;
|
||||||
|
import com.ibm.icu.text.StringPrepParseException;
|
||||||
|
import com.ibm.icu.util.UResourceTypeMismatchException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author emader
|
||||||
|
*
|
||||||
|
* TODO To change the template for this generated type comment go to
|
||||||
|
* Window - Preferences - Java - Code Style - Code Templates
|
||||||
|
*/
|
||||||
|
public class ExceptionTests
|
||||||
|
{
|
||||||
|
static abstract class ExceptionTest implements SerializableTest.Handler
|
||||||
|
{
|
||||||
|
abstract public Object[] getTestObjects();
|
||||||
|
|
||||||
|
public boolean hasSameBehavior(Object a, Object b)
|
||||||
|
{
|
||||||
|
Exception ea = (Exception) a;
|
||||||
|
Exception eb = (Exception) b;
|
||||||
|
|
||||||
|
return ea.toString().equals(eb.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class ArabicShapingExceptionTest extends ExceptionTest
|
||||||
|
{
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
ArabicShapingException exceptions[] = new ArabicShapingException[locales.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < locales.length; i += 1) {
|
||||||
|
exceptions[i] = new ArabicShapingException(locales[i].toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return exceptions;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class StringPrepParseExceptionTest extends ExceptionTest
|
||||||
|
{
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
String rules = "This is a very odd little set of rules, just for testing, you know...";
|
||||||
|
StringPrepParseException exceptions[] = new StringPrepParseException[locales.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < locales.length; i += 1) {
|
||||||
|
exceptions[i] = new StringPrepParseException(locales[i].toString(), i, rules, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
return exceptions;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class UResourceTypeMismatchExceptionTest extends ExceptionTest
|
||||||
|
{
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
UResourceTypeMismatchException exceptions[] = new UResourceTypeMismatchException[locales.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < locales.length; i += 1) {
|
||||||
|
exceptions[i] = new UResourceTypeMismatchException(locales[i].toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return exceptions;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
309
icu4j/src/com/ibm/icu/dev/test/serializable/FormatTests.java
Normal file
309
icu4j/src/com/ibm/icu/dev/test/serializable/FormatTests.java
Normal file
@ -0,0 +1,309 @@
|
|||||||
|
/*
|
||||||
|
*******************************************************************************
|
||||||
|
* Copyright (C) 1996-2005, International Business Machines Corporation and *
|
||||||
|
* others. All Rights Reserved. *
|
||||||
|
*******************************************************************************
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.ibm.icu.dev.test.serializable;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import com.ibm.icu.text.ChineseDateFormat;
|
||||||
|
import com.ibm.icu.text.ChineseDateFormatSymbols;
|
||||||
|
import com.ibm.icu.text.DateFormat;
|
||||||
|
import com.ibm.icu.text.DateFormatSymbols;
|
||||||
|
import com.ibm.icu.text.DecimalFormat;
|
||||||
|
import com.ibm.icu.text.DecimalFormatSymbols;
|
||||||
|
import com.ibm.icu.text.MessageFormat;
|
||||||
|
import com.ibm.icu.text.NumberFormat;
|
||||||
|
import com.ibm.icu.text.RuleBasedNumberFormat;
|
||||||
|
import com.ibm.icu.text.SimpleDateFormat;
|
||||||
|
import com.ibm.icu.util.GregorianCalendar;
|
||||||
|
import com.ibm.icu.util.ULocale;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author emader
|
||||||
|
*
|
||||||
|
* TODO To change the template for this generated type comment go to
|
||||||
|
* Window - Preferences - Java - Code Style - Code Templates
|
||||||
|
*/
|
||||||
|
public class FormatTests
|
||||||
|
{
|
||||||
|
|
||||||
|
public static class NumberFormatTest implements SerializableTest.Handler
|
||||||
|
{
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
NumberFormat formats[] = {
|
||||||
|
NumberFormat.getInstance(Locale.US),
|
||||||
|
NumberFormat.getCurrencyInstance(Locale.US),
|
||||||
|
NumberFormat.getPercentInstance(Locale.US),
|
||||||
|
NumberFormat.getScientificInstance(Locale.US)
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
return formats;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasSameBehavior(Object a, Object b)
|
||||||
|
{
|
||||||
|
NumberFormat format_a = (NumberFormat) a;
|
||||||
|
NumberFormat format_b = (NumberFormat) b;
|
||||||
|
double number = 1234.56;
|
||||||
|
|
||||||
|
return format_a.format(number).equals(format_b.format(number));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class DecimalFormatTest extends NumberFormatTest
|
||||||
|
{
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
DecimalFormat formats[] = new DecimalFormat[locales.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < locales.length; i += 1) {
|
||||||
|
formats[i] = new DecimalFormat("#,##0.###", new DecimalFormatSymbols(locales[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
return formats;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class RuleBasedNumberFormatTest extends NumberFormatTest
|
||||||
|
{
|
||||||
|
int types[] = {RuleBasedNumberFormat.SPELLOUT, RuleBasedNumberFormat.ORDINAL, RuleBasedNumberFormat.DURATION};
|
||||||
|
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
RuleBasedNumberFormat formats[] = new RuleBasedNumberFormat[types.length * locales.length];
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
for (int t = 0; t < types.length; t += 1) {
|
||||||
|
for (int l = 0; l < locales.length; l += 1) {
|
||||||
|
formats[i++] = new RuleBasedNumberFormat(locales[l], types[t]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return formats;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class DecimalFormatSymbolsTest implements SerializableTest.Handler
|
||||||
|
{
|
||||||
|
private char[] getCharSymbols(DecimalFormatSymbols dfs)
|
||||||
|
{
|
||||||
|
char symbols[] = {
|
||||||
|
dfs.getDecimalSeparator(),
|
||||||
|
dfs.getDigit(),
|
||||||
|
dfs.getGroupingSeparator(),
|
||||||
|
dfs.getMinusSign(),
|
||||||
|
dfs.getMonetaryDecimalSeparator(),
|
||||||
|
dfs.getPadEscape(),
|
||||||
|
dfs.getPatternSeparator(),
|
||||||
|
dfs.getPercent(),
|
||||||
|
dfs.getPerMill(),
|
||||||
|
dfs.getPlusSign(),
|
||||||
|
dfs.getSignificantDigit(),
|
||||||
|
dfs.getZeroDigit()
|
||||||
|
};
|
||||||
|
|
||||||
|
return symbols;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String[] getStringSymbols(DecimalFormatSymbols dfs)
|
||||||
|
{
|
||||||
|
String symbols[] = {
|
||||||
|
dfs.getCurrencySymbol(),
|
||||||
|
dfs.getExponentSeparator(),
|
||||||
|
dfs.getInfinity(),
|
||||||
|
dfs.getInternationalCurrencySymbol(),
|
||||||
|
dfs.getNaN()
|
||||||
|
};
|
||||||
|
|
||||||
|
return symbols;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
DecimalFormatSymbols dfs[] = new DecimalFormatSymbols[locales.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < locales.length; i += 1) {
|
||||||
|
dfs[i] = new DecimalFormatSymbols(locales[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return dfs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasSameBehavior(Object a, Object b)
|
||||||
|
{
|
||||||
|
DecimalFormatSymbols dfs_a = (DecimalFormatSymbols) a;
|
||||||
|
DecimalFormatSymbols dfs_b = (DecimalFormatSymbols) b;
|
||||||
|
String strings_a[] = getStringSymbols(dfs_a);
|
||||||
|
String strings_b[] = getStringSymbols(dfs_b);
|
||||||
|
char chars_a[] = getCharSymbols(dfs_a);
|
||||||
|
char chars_b[] = getCharSymbols(dfs_b);
|
||||||
|
|
||||||
|
return SerializableTest.compareStrings(strings_a, strings_b) && SerializableTest.compareChars(chars_a, chars_b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class MessageFormatTest implements SerializableTest.Handler
|
||||||
|
{
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
MessageFormat formats[] = {new MessageFormat("pattern{0}")};
|
||||||
|
|
||||||
|
return formats;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasSameBehavior(Object a, Object b)
|
||||||
|
{
|
||||||
|
MessageFormat mfa = (MessageFormat) a;
|
||||||
|
MessageFormat mfb = (MessageFormat) b;
|
||||||
|
Object arguments[] = {new Integer(123456)};
|
||||||
|
|
||||||
|
return mfa.format(arguments) != mfb.format(arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class DateFormatTest implements SerializableTest.Handler
|
||||||
|
{
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
DateFormat formats[] = new DateFormat[locales.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < locales.length; i += 1) {
|
||||||
|
formats[i] = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, locales[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return formats;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasSameBehavior(Object a, Object b)
|
||||||
|
{
|
||||||
|
DateFormat dfa = (DateFormat) a;
|
||||||
|
DateFormat dfb = (DateFormat) b;
|
||||||
|
Date date = new Date(System.currentTimeMillis());
|
||||||
|
|
||||||
|
return dfa.format(date).equals(dfb.format(date));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class DateFormatSymbolsTest implements SerializableTest.Handler
|
||||||
|
{
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
DateFormatSymbols dfs[] = new DateFormatSymbols[locales.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < locales.length; i += 1) {
|
||||||
|
dfs[i] = new DateFormatSymbols(GregorianCalendar.class, ULocale.forLocale(locales[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
return dfs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasSameBehavior(Object a, Object b)
|
||||||
|
{
|
||||||
|
DateFormatSymbols dfs_a = (DateFormatSymbols) a;
|
||||||
|
DateFormatSymbols dfs_b = (DateFormatSymbols) b;
|
||||||
|
String months_a[] = dfs_a.getMonths();
|
||||||
|
String months_b[] = dfs_b.getMonths();
|
||||||
|
|
||||||
|
return SerializableTest.compareStrings(months_a, months_b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class SimpleDateFormatTest extends DateFormatTest
|
||||||
|
{
|
||||||
|
String patterns[] = {
|
||||||
|
"EEEE, yyyy MMMM dd",
|
||||||
|
"yyyy MMMM d",
|
||||||
|
"yyyy MMM d",
|
||||||
|
"yy/MM/dd"
|
||||||
|
};
|
||||||
|
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
SimpleDateFormat dateFormats[] = new SimpleDateFormat[patterns.length * locales.length];
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
for (int p = 0; p < patterns.length; p += 1) {
|
||||||
|
for (int l = 0; l < locales.length; l += 1) {
|
||||||
|
dateFormats[i++] = new SimpleDateFormat(patterns[p], ULocale.forLocale(locales[l]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dateFormats;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ChineseDateFormatTest extends DateFormatTest
|
||||||
|
{
|
||||||
|
String patterns[] = {
|
||||||
|
"EEEE y'x'G-Ml-d",
|
||||||
|
"y'x'G-Ml-d",
|
||||||
|
"y'x'G-Ml-d",
|
||||||
|
"y'x'G-Ml-d"
|
||||||
|
};
|
||||||
|
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
ChineseDateFormat dateFormats[] = new ChineseDateFormat[patterns.length * locales.length];
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
for (int p = 0; p < patterns.length; p += 1) {
|
||||||
|
for (int l = 0; l < locales.length; l += 1) {
|
||||||
|
ULocale locale = new ULocale(locales[l].toString() + "@calendar=chinese");
|
||||||
|
|
||||||
|
dateFormats[i++] = new ChineseDateFormat(patterns[p], locale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dateFormats;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ChineseDateFormatSymbolsTest extends DateFormatSymbolsTest
|
||||||
|
{
|
||||||
|
public Object[] getTestObjects()
|
||||||
|
{
|
||||||
|
Locale locales[] = SerializableTest.getLocales();
|
||||||
|
ChineseDateFormatSymbols cdfs[] = new ChineseDateFormatSymbols[locales.length];
|
||||||
|
|
||||||
|
for (int i = 0; i < locales.length; i += 1) {
|
||||||
|
cdfs[i] = new ChineseDateFormatSymbols(locales[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return cdfs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasSameBehavior(Object a, Object b)
|
||||||
|
{
|
||||||
|
if (! super.hasSameBehavior(a, b)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ChineseDateFormatSymbols cdfs_a = (ChineseDateFormatSymbols) a;
|
||||||
|
ChineseDateFormatSymbols cdfs_b = (ChineseDateFormatSymbols) b;
|
||||||
|
|
||||||
|
return cdfs_a.getLeapMonth(0).equals(cdfs_b.getLeapMonth(0)) &&
|
||||||
|
cdfs_a.getLeapMonth(1).equals(cdfs_b.getLeapMonth(1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args)
|
||||||
|
{
|
||||||
|
// nothing needed...
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,421 @@
|
|||||||
|
/*
|
||||||
|
*******************************************************************************
|
||||||
|
* Copyright (C) 1996-2005, International Business Machines Corporation and *
|
||||||
|
* others. All Rights Reserved. *
|
||||||
|
*******************************************************************************
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.ibm.icu.dev.test.serializable;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.ObjectInputStream;
|
||||||
|
|
||||||
|
import com.ibm.icu.impl.OlsonTimeZone;
|
||||||
|
import com.ibm.icu.math.BigDecimal;
|
||||||
|
import com.ibm.icu.math.MathContext;
|
||||||
|
import com.ibm.icu.util.Currency;
|
||||||
|
import com.ibm.icu.util.SimpleTimeZone;
|
||||||
|
import com.ibm.icu.util.TimeZone;
|
||||||
|
import com.ibm.icu.util.ULocale;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author emader
|
||||||
|
*
|
||||||
|
* TODO To change the template for this generated type comment go to
|
||||||
|
* Window - Preferences - Java - Code Style - Code Templates
|
||||||
|
*/
|
||||||
|
public class SerializableTest
|
||||||
|
{
|
||||||
|
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 TimeZoneTest 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;
|
||||||
|
|
||||||
|
return zone_a.getDisplayName().equals(zone_b.getDisplayName()) && zone_a.hasSameRules(zone_b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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 SimpleTimeZoneTest extends TimeZoneTest
|
||||||
|
{
|
||||||
|
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 ULocaleTest 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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class CurrencyTest 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 class OlsonTimeZoneTest implements Handler
|
||||||
|
{
|
||||||
|
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"
|
||||||
|
};
|
||||||
|
|
||||||
|
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;
|
||||||
|
long now = System.currentTimeMillis();
|
||||||
|
int a_offsets[] = {0, 0};
|
||||||
|
int b_offsets[] = {0, 0};
|
||||||
|
|
||||||
|
otz_a.getOffset(now, false, a_offsets);
|
||||||
|
otz_b.getOffset(now, false, b_offsets);
|
||||||
|
|
||||||
|
return a_offsets[0] == b_offsets[0] && a_offsets[1] == b_offsets[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class BigDecimalTest 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 MathContextTest 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 TimeZoneTest());
|
||||||
|
map.put("com.ibm.icu.util.SimpleTimeZone", new SimpleTimeZoneTest());
|
||||||
|
map.put("com.ibm.icu.util.ULocale", new ULocaleTest());
|
||||||
|
map.put("com.ibm.icu.util.Currency", new CurrencyTest());
|
||||||
|
map.put("com.ibm.icu.impl.OlsonTimeZone", new OlsonTimeZoneTest());
|
||||||
|
map.put("com.ibm.icu.math.BigDecimal", new BigDecimalTest());
|
||||||
|
map.put("com.ibm.icu.math.MathContext", new MathContextTest());
|
||||||
|
|
||||||
|
map.put("com.ibm.icu.text.NumberFormat", new FormatTests.NumberFormatTest());
|
||||||
|
map.put("com.ibm.icu.text.DecimalFormat", new FormatTests.DecimalFormatTest());
|
||||||
|
map.put("com.ibm.icu.text.RuleBasedNumberFormat", new FormatTests.RuleBasedNumberFormatTest());
|
||||||
|
map.put("com.ibm.icu.text.DecimalFormatSymbols", new FormatTests.DecimalFormatSymbolsTest());
|
||||||
|
map.put("com.ibm.icu.text.MessageFormat", new FormatTests.MessageFormatTest());
|
||||||
|
map.put("com.ibm.icu.text.DateFormat", new FormatTests.DateFormatTest());
|
||||||
|
map.put("com.ibm.icu.text.DateFormatSymbols", new FormatTests.DateFormatSymbolsTest());
|
||||||
|
map.put("com.ibm.icu.text.SimpleDateFormat", new FormatTests.SimpleDateFormatTest());
|
||||||
|
map.put("com.ibm.icu.text.ChineseDateFormat", new FormatTests.ChineseDateFormatTest());
|
||||||
|
map.put("com.ibm.icu.text.ChineseDateFormatSymbols", new FormatTests.ChineseDateFormatSymbolsTest());
|
||||||
|
|
||||||
|
map.put("com.ibm.icu.util.Calendar", new CalendarTests.CalendarTest());
|
||||||
|
map.put("com.ibm.icu.util.BuddhistCalendar", new CalendarTests.BuddhistCalendarTest());
|
||||||
|
map.put("com.ibm.icu.util.ChineseCalendar", new CalendarTests.ChineseCalendarTest());
|
||||||
|
map.put("com.ibm.icu.util.CopticCalendar", new CalendarTests.CopticCalendarTest());
|
||||||
|
map.put("com.ibm.icu.util.EthiopicCalendar", new CalendarTests.EthiopicCalendarTest());
|
||||||
|
map.put("com.ibm.icu.util.GregorianCalendar", new CalendarTests.GregorianCalendarTest());
|
||||||
|
map.put("com.ibm.icu.util.HebrewCalendar", new CalendarTests.HebrewCalendarTest());
|
||||||
|
map.put("com.ibm.icu.util.IslamicCalendar", new CalendarTests.IslamicCalendarTest());
|
||||||
|
map.put("com.ibm.icu.util.JapaneseCalendar", new CalendarTests.JapaneseCalendarTest());
|
||||||
|
|
||||||
|
map.put("com.ibm.icu.text.ArabicShapingException", new ExceptionTests.ArabicShapingExceptionTest());
|
||||||
|
map.put("com.ibm.icu.text.StringPrepParseException", new ExceptionTests.StringPrepParseExceptionTest());
|
||||||
|
map.put("com.ibm.icu.util.UResourceTypeMismatchException", new ExceptionTests.UResourceTypeMismatchExceptionTest());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testDirectory(File dir)
|
||||||
|
{
|
||||||
|
File files[] = dir.listFiles();
|
||||||
|
|
||||||
|
for (int i = 0; i < files.length; i += 1) {
|
||||||
|
check(files[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void check(File file)
|
||||||
|
{
|
||||||
|
String filename = file.getName();
|
||||||
|
int ix = filename.lastIndexOf(".dat");
|
||||||
|
|
||||||
|
if (ix < 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String className = filename.substring(0, ix);
|
||||||
|
Handler handler = getHandler(className);
|
||||||
|
|
||||||
|
System.out.print(className + " - ");
|
||||||
|
|
||||||
|
if (handler == null) {
|
||||||
|
System.out.println("no test.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
FileInputStream fs = new FileInputStream(file);
|
||||||
|
|
||||||
|
ObjectInputStream in = new ObjectInputStream(fs);
|
||||||
|
Object inputObjects[] = (Object[]) in.readObject();
|
||||||
|
Object testObjects[] = handler.getTestObjects();
|
||||||
|
boolean passed = true;
|
||||||
|
|
||||||
|
in.close();
|
||||||
|
fs.close();
|
||||||
|
|
||||||
|
// TODO: add equality test...
|
||||||
|
for (int i = 0; i < testObjects.length; i += 1) {
|
||||||
|
if (! handler.hasSameBehavior(inputObjects[i], testObjects[i])) {
|
||||||
|
passed = false;
|
||||||
|
System.out.println("Input object " + i + " failed behavior test.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (passed) {
|
||||||
|
System.out.println("test passed.");
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Error processing test object: " + e.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args)
|
||||||
|
{
|
||||||
|
SerializableTest test = new SerializableTest();
|
||||||
|
List argList = Arrays.asList(args);
|
||||||
|
boolean write = false;
|
||||||
|
|
||||||
|
for (Iterator it = argList.iterator(); it.hasNext(); /*anything?*/) {
|
||||||
|
String arg = (String) it.next();
|
||||||
|
|
||||||
|
try {
|
||||||
|
File dir = new File(arg);
|
||||||
|
|
||||||
|
if (! dir.isDirectory()) {
|
||||||
|
System.out.println(dir + " is not a directory.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("Checking test data from " + arg + ":");
|
||||||
|
test.testDirectory(dir);
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Error processing " + arg + ": " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -9,9 +9,23 @@
|
|||||||
package com.ibm.icu.dev.tool.serializable;
|
package com.ibm.icu.dev.tool.serializable;
|
||||||
|
|
||||||
import com.ibm.icu.impl.URLHandler;
|
import com.ibm.icu.impl.URLHandler;
|
||||||
|
import com.ibm.icu.dev.test.serializable.SerializableTest;
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.ObjectInputStream;
|
||||||
|
import java.io.ObjectOutputStream;
|
||||||
import java.lang.Class;
|
import java.lang.Class;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class examines all the classes in a Jar file or a directory
|
* This class examines all the classes in a Jar file or a directory
|
||||||
@ -23,18 +37,50 @@ import java.net.URL;
|
|||||||
public class SerializableChecker implements URLHandler.URLVisitor
|
public class SerializableChecker implements URLHandler.URLVisitor
|
||||||
{
|
{
|
||||||
private static Class serializable;
|
private static Class serializable;
|
||||||
private static Class throwable;
|
//private static Class throwable;
|
||||||
|
|
||||||
|
private String path = null;
|
||||||
|
|
||||||
|
private boolean write;
|
||||||
|
|
||||||
|
public SerializableChecker(String path)
|
||||||
|
{
|
||||||
|
this.path = path;
|
||||||
|
|
||||||
|
if (path != null) {
|
||||||
|
File dir = new File(path);
|
||||||
|
|
||||||
|
if (!dir.exists()) {
|
||||||
|
dir.mkdirs();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
serializable = Class.forName("java.io.Serializable");
|
serializable = Class.forName("java.io.Serializable");
|
||||||
throwable = Class.forName("java.lang.Throwable");
|
//throwable = Class.forName("java.lang.Throwable");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// we're in deep trouble...
|
// we're in deep trouble...
|
||||||
System.out.println("Woops! Can't get class info for Serializable and Throwable.");
|
System.out.println("Woops! Can't get class info for Serializable and Throwable.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void writeFile(String className, byte bytes[])
|
||||||
|
{
|
||||||
|
File file = new File(path + File.separator + className + ".dat");
|
||||||
|
FileOutputStream stream;
|
||||||
|
|
||||||
|
try {
|
||||||
|
stream = new FileOutputStream(file);
|
||||||
|
|
||||||
|
stream.write(bytes);
|
||||||
|
stream.close();
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.print(" - can't write file!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void visit(String str)
|
public void visit(String str)
|
||||||
{
|
{
|
||||||
int ix = str.lastIndexOf(".class");
|
int ix = str.lastIndexOf(".class");
|
||||||
@ -49,39 +95,112 @@ public class SerializableChecker implements URLHandler.URLVisitor
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
Class c = Class.forName(className);
|
Class c = Class.forName(className);
|
||||||
|
int m = c.getModifiers();
|
||||||
|
|
||||||
if (serializable.isAssignableFrom(c) && ! throwable.isAssignableFrom(c)) {
|
if (serializable.isAssignableFrom(c) /*&&
|
||||||
|
(! throwable.isAssignableFrom(c) || c.getDeclaredFields().length > 0)*/) {
|
||||||
Field uid;
|
Field uid;
|
||||||
|
|
||||||
System.out.print(className);
|
System.out.print(className + " (" + Modifier.toString(m) + ") - ");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
uid = c.getDeclaredField("serialVersionUID");
|
uid = c.getDeclaredField("serialVersionUID");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.out.print(" - no serialVersionUID!");
|
System.out.print("no serialVersionUID - ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Modifier.isPublic(m)) {
|
||||||
|
SerializableTest.Handler handler = SerializableTest.getHandler(className);
|
||||||
|
|
||||||
|
if (handler != null) {
|
||||||
|
Object objectsOut[] = handler.getTestObjects();
|
||||||
|
Object objectsIn[];
|
||||||
|
boolean passed = true;
|
||||||
|
|
||||||
|
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
|
||||||
|
ObjectOutputStream out = new ObjectOutputStream(byteOut);
|
||||||
|
|
||||||
|
try {
|
||||||
|
out.writeObject(objectsOut);
|
||||||
|
out.close();
|
||||||
|
byteOut.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.out.println("Eror writing test objects:" + e.toString());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (path != null) {
|
||||||
|
writeFile(className, byteOut.toByteArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
|
||||||
|
ObjectInputStream in = new ObjectInputStream(byteIn);
|
||||||
|
|
||||||
|
try {
|
||||||
|
objectsIn = (Object[]) in.readObject();
|
||||||
|
in.close();
|
||||||
|
byteIn.close();
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Error reading test objects:" + e.toString());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < objectsIn.length; i += 1) {
|
||||||
|
if (! handler.hasSameBehavior(objectsIn[i], objectsOut[i])) {
|
||||||
|
passed = false;
|
||||||
|
System.out.println("Object " + i + " failed behavior test.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (passed) {
|
||||||
|
System.out.print("test passed.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// it's OK to not have tests for abstract classes...
|
||||||
|
if (! Modifier.isAbstract(m)) {
|
||||||
|
System.out.print("no test.");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println();
|
System.out.println();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.out.println("Error processing " + className);
|
System.out.println("Error processing " + className + ": " + e.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws java.net.MalformedURLException
|
public static void main(String[] args) throws java.net.MalformedURLException
|
||||||
{
|
{
|
||||||
|
List argList = Arrays.asList(args);
|
||||||
|
String path = null;
|
||||||
|
|
||||||
|
for (Iterator it = argList.iterator(); it.hasNext(); /*anything?*/) {
|
||||||
|
String arg = (String) it.next();
|
||||||
|
|
||||||
|
if (arg.equals("-w")) {
|
||||||
|
if (it.hasNext()) {
|
||||||
|
path = (String) it.next();
|
||||||
|
} else {
|
||||||
|
System.out.println("Missing directory name on -w command.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
//URL jarURL = new URL("jar:file:/dev/eclipse/workspace/icu4j/icu4j.jar!/com/ibm/icu");
|
//URL jarURL = new URL("jar:file:/dev/eclipse/workspace/icu4j/icu4j.jar!/com/ibm/icu");
|
||||||
//URL fileURL = new URL("file:/dev/eclipse/workspace/icu4j/classes/com/ibm/icu");
|
//URL fileURL = new URL("file:/dev/eclipse/workspace/icu4j/classes/com/ibm/icu");
|
||||||
URL url = new URL(args[0]);
|
URL url = new URL(arg);
|
||||||
URLHandler handler = URLHandler.get(url);
|
URLHandler handler = URLHandler.get(url);
|
||||||
SerializableChecker checker = new SerializableChecker();
|
SerializableChecker checker = new SerializableChecker(path);
|
||||||
|
|
||||||
System.out.println("Checking classes from " + args[0] + ":");
|
System.out.println("Checking classes from " + arg + ":");
|
||||||
handler.guide(checker, true, false);
|
handler.guide(checker, true, false);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.out.println("Error processing URL \"" + args[0] + "\" - " + e.getMessage());
|
System.out.println("Error processing URL \"" + arg + "\" - " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user