Very good! I was hoping that if I plant a seed, a tree starts to grow ;)
need to check out and test the new functionality right away... Great! regards, Martin On 10/7/05, Arvid Hülsebus <[EMAIL PROTECTED]> wrote: > Looks like I'm ending up spending as much time on date parsing as Martin... > > Parsing of MMM and MMMM starts to work now, too. Additionally I looked > into parsing and formatting of yy vs. yyyy. > > Regards, > Arvid > > > import org.mozilla.javascript.JavaScriptException; > > import java.text.SimpleDateFormat; > import java.text.DecimalFormat; > import java.text.ParseException; > import java.util.Date; > import java.util.Locale; > import java.util.Calendar; > import java.io.IOException; > > public class DateTest extends JavaScriptTestCase { > > private static final int[] YEAR_MONTH_DAY > = {Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH}; > > protected void setUp() throws Exception { > super.setUp(); > // loadScriptFile("debug.js"); > loadScriptFile("prototype-basics.js"); > loadScriptFile("date.js"); > } > > public void testNumberOnlyDateFormats() throws IOException, > JavaScriptException { > Date date = new Date(); > > checkFormat("yyyyMMdd", date, YEAR_MONTH_DAY); > checkFormat("ddMMyyyy", date, YEAR_MONTH_DAY); > checkFormat("dd/MM/yyyy", date, YEAR_MONTH_DAY); > checkFormat("dd/MM/yyy", date, YEAR_MONTH_DAY); > checkFormat("dd/MM/yy", date, YEAR_MONTH_DAY); > checkFormat("EddMMyyyy", date, YEAR_MONTH_DAY); > } > > public void testEnglishMonths() throws IOException { > for (int month = 0; month < 12; ++month) { > Calendar calendar = Calendar.getInstance(Locale.ENGLISH); > calendar.set(Calendar.MONTH, month); > Date date = calendar.getTime(); > > StringBuffer format = new StringBuffer("M"); > for (int i = 0; i < 4; ++i) { > format.append('M'); > checkFormat(format.toString(), date, new int[] {Calendar.MONTH}); > } > } > } > > public void testTwoDigitYears() throws IOException, ParseException { > DecimalFormat decimalFormat = new DecimalFormat("00"); > SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yy", > Locale.ENGLISH); > Calendar calendar = Calendar.getInstance(Locale.ENGLISH); > for (int year = 0; year < 100; ++year) { > String yearString = decimalFormat.format(year); > calendar.setTime(simpleDateFormat.parse(yearString)); > assertEquals(calendar.get(Calendar.YEAR), evalParseDate(yearString, > "yy").get(Calendar.YEAR)); > } > } > > public void testEnglishWeekDays() throws IOException { > for (int day = 1; day <= 7; ++day) { > Calendar calendar = Calendar.getInstance(); > calendar.set(Calendar.DAY_OF_WEEK, day); > Date date = calendar.getTime(); > > StringBuffer format = new StringBuffer(); > for (int i = 0; i < 4; ++i) { > format.append('E'); > checkFormat(format.toString(), date, new int[0]); // XXX new int[] > {Calendar.DAY_OF_WEEK} > } > } > } > > private Object evalFormatDate(Date date, String format) { > return eval("new SimpleDateFormat(\"" + format + "\")" > + ".format(new Date(" + date.getTime() + "))"); > } > > private Calendar evalParseDate(String input, String format) { > long time = evalLong("new SimpleDateFormat(\"" + format + "\")" > + ".parse(\"" + input + "\").getTime()"); > Calendar calendar = Calendar.getInstance(Locale.ENGLISH); > calendar.setTime(new Date(time)); > return calendar; > } > > private void checkFormat(String format, Date date, int[] fields) { > SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format, > Locale.ENGLISH); > assertEquals(simpleDateFormat.format(date), evalFormatDate(date, format)); > Calendar calendar1 = Calendar.getInstance(Locale.ENGLISH); > calendar1.setTime(date); > Calendar calendar2 = evalParseDate(simpleDateFormat.format(date), > format.toString()); > for (int i = 0; i < fields.length; i++) { > int field = fields[i]; > checkField(calendar1, calendar2, field); > } > } > > private void checkField(Calendar calendar1, Calendar calendar2, int field) { > assertEquals(calendar1.get(field), calendar2.get(field)); > } > > } > > > import junit.framework.TestCase; > import org.mozilla.javascript.Context; > import org.mozilla.javascript.Scriptable; > import org.mozilla.javascript.JavaScriptException; > > import java.io.IOException; > import java.io.FileReader; > import java.util.Date; > > public class JavaScriptTestCase extends TestCase { > > protected Context cx; > protected Scriptable scope; > > protected void setUp() throws Exception { > super.setUp(); > cx = Context.enter(); > scope = cx.initStandardObjects(null); > } > > protected void tearDown() throws Exception { > Context.exit(); > } > > protected Object eval(String script) throws JavaScriptException { > return cx.evaluateString(scope, script, "test", 1, null); > } > > protected int evalInt(String script) throws JavaScriptException { > Object o = eval(script); > if (o instanceof Number) { > return ((Number) o).intValue(); > } > throw new JavaScriptException(null, "invalid return type " > + o.getClass().getName() + " with value " + o, 0); > } > > protected long evalLong(String script) throws JavaScriptException { > Object o = eval(script); > if (o instanceof Number) { > return ((Number) o).longValue(); > } > throw new JavaScriptException(null, "invalid return type " > + o.getClass().getName() + " with value " + o, 0); > } > > protected boolean evalBoolean(String script) throws JavaScriptException { > Object o = eval(script); > if (o instanceof Boolean) { > return ((Boolean) o).booleanValue(); > } > throw new JavaScriptException(null, "invalid return type " > + o.getClass().getName() + " with value " + o, 0); > } > > // XXX directory handling > protected void loadScriptFile(String jsFile) > throws IOException, JavaScriptException { > cx.evaluateReader(scope, new FileReader(jsFile), jsFile, 0, null); > } > } > > > > -- http://www.irian.at Your JSF powerhouse - JSF Trainings in English and German