ICU-4567 data driven fmt test for J

X-SVN-Rev: 22365
This commit is contained in:
Steven R. Loomis 2007-08-13 19:21:16 +00:00
parent e1e81dcdd6
commit 8c862fa548
4 changed files with 216 additions and 0 deletions

2
.gitattributes vendored
View File

@ -245,6 +245,7 @@ icu4j/src/com/ibm/icu/dev/test/duration/testdata/testdata_zh_Hans.txt -text
icu4j/src/com/ibm/icu/dev/test/duration/testdata/testdata_zh_Hans_SG.txt -text
icu4j/src/com/ibm/icu/dev/test/duration/testdata/testdata_zh_Hant.txt -text
icu4j/src/com/ibm/icu/dev/test/duration/testdata/testdata_zh_Hant_HK.txt -text
icu4j/src/com/ibm/icu/dev/test/format/DataDrivenFormatTest.java -text
icu4j/src/com/ibm/icu/dev/test/perf/data/collation/TestNames_Asian.txt -text
icu4j/src/com/ibm/icu/dev/test/perf/data/collation/TestNames_Chinese.txt -text
icu4j/src/com/ibm/icu/dev/test/perf/data/collation/TestNames_Japanese.txt -text
@ -295,6 +296,7 @@ icu4j/src/com/ibm/icu/dev/test/serializable/data/ICU_3.6/com.ibm.icu.util.ULocal
icu4j/src/com/ibm/icu/dev/test/serializable/data/ICU_3.6/com.ibm.icu.util.UResourceTypeMismatchException.dat -text
icu4j/src/com/ibm/icu/dev/test/timezone/TimeZoneRuleTest.java -text
icu4j/src/com/ibm/icu/dev/test/util/CalendarFieldsSet.java -text
icu4j/src/com/ibm/icu/dev/test/util/DateTimeStyleSet.java -text
icu4j/src/com/ibm/icu/dev/test/util/DebugUtilities.java -text
icu4j/src/com/ibm/icu/dev/test/util/DebugUtilitiesData.java -text
icu4j/src/com/ibm/icu/dev/test/util/DebugUtilitiesTest.java -text

View File

@ -0,0 +1,157 @@
/*
*******************************************************************************
* Copyright (C) 2007, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.dev.test.format;
import java.text.FieldPosition;
import java.text.ParsePosition;
import java.util.Date;
import java.util.Iterator;
import com.ibm.icu.dev.test.ModuleTest;
import com.ibm.icu.dev.test.TestDataModule;
import com.ibm.icu.dev.test.TestDataModule.DataMap;
import com.ibm.icu.dev.test.util.CalendarFieldsSet;
import com.ibm.icu.dev.test.util.DateTimeStyleSet;
import com.ibm.icu.text.DateFormat;
import com.ibm.icu.text.SimpleDateFormat;
import com.ibm.icu.util.Calendar;
import com.ibm.icu.util.ULocale;
/**
* @author srl
*
*/
public class DataDrivenFormatTest extends ModuleTest {
/**
* @param baseName
* @param locName
*/
public DataDrivenFormatTest() {
super("com/ibm/icu/dev/data/testdata/", "format");
}
/* (non-Javadoc)
* @see com.ibm.icu.dev.test.ModuleTest#processModules()
*/
public void processModules() {
//String testName = t.getName().toString();
for (Iterator siter = t.getSettingsIterator(); siter.hasNext();) {
// Iterate through and get each of the test case to process
DataMap settings = (DataMap) siter.next();
String type = settings.getString("Type");
if(type.equals("date_format")) {
testConvertDate(t, settings, true);
} else if(type.equals("date_parse")) {
testConvertDate(t, settings, false);
} else {
errln("Unknown type: " + type);
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
new DataDrivenFormatTest().run(args);
}
private static final String kPATTERN = "PATTERN=";
private static final String kMILLIS = "MILLIS=";
private void testConvertDate(TestDataModule.TestData testData, DataMap settings, boolean fmt) {
DateFormat basicFmt = new SimpleDateFormat("EEE MMM dd yyyy / YYYY'-W'ww-ee");
int n = 0;
for (Iterator iter = testData.getDataIterator(); iter.hasNext();) {
++n;
DataMap currentCase = (DataMap) iter.next();
String caseString = "["+testData.getName()+"#"+n+(fmt?"format":"parse")+"]";
String locale = currentCase.getString("locale");
String spec = currentCase.getString("spec");
String date = currentCase.getString("date");
String str = currentCase.getString("str");
Date fromDate = null;
boolean useDate = false;
ULocale loc = new ULocale(locale);
String pattern = null;
// boolean usePattern = false;
DateFormat format = null;
DateTimeStyleSet styleSet;
CalendarFieldsSet fromSet = null;
// parse 'spec' - either 'PATTERN=yy mm dd' or 'DATE=x,TIME=y'
if(spec.startsWith(kPATTERN)) {
pattern = spec.substring(kPATTERN.length());
// usePattern = true;
format = new SimpleDateFormat(pattern, loc);
} else {
styleSet = new DateTimeStyleSet();
styleSet.parseFrom(spec);
format = DateFormat.getDateTimeInstance(styleSet.getDateStyle(), styleSet.getTimeStyle(), loc);
}
// parse 'date' - either 'MILLIS=12345' or a CalendarFieldsSet
if(date.startsWith(kMILLIS)) {
useDate = true;
fromDate = new Date(Long.parseLong(date.substring(kMILLIS.length())));
} else {
fromSet = new CalendarFieldsSet();
fromSet.parseFrom(date);
}
// run the test
Calendar cal = Calendar.getInstance(loc);
if(fmt) {
StringBuffer output = new StringBuffer();
cal.clear();
FieldPosition pos = new FieldPosition(0);
if(useDate) {
output = format.format(date, output, pos);
} else {
fromSet.setOnCalendar(cal);
format.format(cal, output, pos);
}
if(output.toString().equals(str)) {
logln(caseString + " Success - strings match: " + output);
} else {
errln(caseString + " FAIL: got " + output + " expected " + str);
}
} else { // parse
cal.clear();
ParsePosition pos = new ParsePosition(0);
format.parse(str, cal, pos);
if(useDate) {
Date gotDate = cal.getTime();
if(gotDate.equals(fromDate)) {
logln(caseString + " SUCCESS: got=parse="+str);
} else {
errln(caseString + " FAIL: parsed " + str + " but got " +
basicFmt.format(gotDate) + " - " + gotDate + " expected " +
basicFmt.format(fromDate));
}
} else {
CalendarFieldsSet diffSet = new CalendarFieldsSet();
if(!fromSet.matches(cal, diffSet)) {
String diffs = diffSet.diffFrom(fromSet);
errln(caseString + " FAIL: differences: " + diffs);
} else {
logln(caseString + " SUCCESS: got=parse: " + str + " - " + fromSet.toString());
}
}
}
}
}
}

View File

@ -28,6 +28,7 @@ public class TestAll extends TestGroup {
"TestAll$PluralFormat",
"com.ibm.icu.dev.test.format.BigNumberFormatTest",
"com.ibm.icu.dev.test.format.GlobalizationPreferencesTest",
"DataDrivenFormatTest"
},
"Formatting Tests");
}

View File

@ -0,0 +1,56 @@
/*
*******************************************************************************
* Copyright (C) 2007, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.dev.test.util;
import com.ibm.icu.text.DateFormat;
/**
* @author srl
*
*/
public class DateTimeStyleSet extends FieldsSet {
private static final int DTS_DATE = 0;
private static final String kDATE = "DATE";
private static final int DTS_TIME = 1;
private static final String kTIME = "TIME";
private static final int DTS_COUNT = 2;
private int getOrNone(int which) {
if(!isSet(which)) {
return DateFormat.NONE;
} else {
return get(which);
}
}
public DateTimeStyleSet() {
super(FieldsSet.NO_ENUM, DTS_COUNT);
}
public int getDateStyle() {
return getOrNone(DTS_DATE);
}
public int getTimeStyle() {
return getOrNone(DTS_TIME);
}
protected void handleParseValue(FieldsSet inheritFrom, int field, String substr) {
parseValueEnum(DebugUtilitiesData.UDateFormatStyle, inheritFrom, field, substr);
}
protected int handleParseName(FieldsSet inheritFrom, String name, String substr) {
if(name.equals(kDATE)) {
return DTS_DATE;
} else if(name.equals(kTIME)) {
return DTS_TIME;
} else {
throw new IllegalArgumentException("Bad field: " + name);
}
}
}