I have now checked in code that I think should resolve these issues, but you will have to be the test of that. I didn't use your exact patches but I think I understood the issues you reported and handled them. Please let me know if anything was missed.

Steve

Neeme Praks wrote:
ok, these new patches make the failures go away in a bit cleaner manner, by manipulating the default locale setting.

Also, I noticed that your java sources are in some strange encoding. If I open those tests that use french letters in my Eclipse and save them then they become corrupt and will fail.
My configuration assumes that all source files are in UTF8 and I think that should be the most reasonable assumption, no?


Rgds,
Neeme

Steve Cohen wrote:

Okay, now that I understand the problem in general terms, can you please provide stack traces or other information indicating where in the code failures are happening? Your patches provide me with a possible fix, but I need to understand fully the problem. Also if you could tell me the locale and other jvm properties that would help.


I think there may be other, more standard fixes that I can apply, but I need to understand the problem fully. It would probably be better, if possible, if could provide a setUp() routine that puts the JVM into the same locale-state anywhere that yours is in by default.


I will be non-responsive for several days, but will look at this when I return later in the week.

Steve


Neeme Praks wrote:


Two patches to make the FTP timestamp parsing tests pass also on non-english systems.
I'm not sure if this is the best way to fix those issues, though.


Rgds,
Neeme


------------------------------------------------------------------------

Index: FTPTimestampParserImplTest.java
===================================================================
--- FTPTimestampParserImplTest.java (revision 159615)
+++ FTPTimestampParserImplTest.java (working copy)
@@ -15,6 +15,7 @@
*/
package org.apache.commons.net.ftp.parser;

+import java.text.DateFormatSymbols;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
@@ -73,8 +74,19 @@

FTPTimestampParserImpl parser = new FTPTimestampParserImpl();

+ // assume we are FTPing a server in Chicago, two hours ahead of + // L. A.
+ FTPClientConfig config = + new FTPClientConfig(FTPClientConfig.SYST_UNIX);
+ config.setDefaultDateFormatStr(FTPTimestampParser.DEFAULT_SDF);
+ config.setRecentDateFormatStr(FTPTimestampParser.DEFAULT_RECENT_SDF);
+ // 2 hours difference
+ config.setServerTimeZoneId("America/Chicago");
+ parser.configure(config);
+ + SimpleDateFormat sdf = - new SimpleDateFormat(parser.getRecentDateFormatString());
+ new SimpleDateFormat(parser.getRecentDateFormatString(), parser.getRecentDateFormat().getDateFormatSymbols());
// assume we're in the US Pacific Time Zone
TimeZone tzla = TimeZone.getTimeZone("America/Los_Angeles");
sdf.setTimeZone(tzla);
@@ -84,17 +96,6 @@
String fmtTimePlusThreeHours = sdf.format(threeHoursFromNow);



- // assume we are FTPing a server in Chicago, two hours ahead of - // L. A.
- FTPClientConfig config = - new FTPClientConfig(FTPClientConfig.SYST_UNIX);
- config.setDefaultDateFormatStr(FTPTimestampParser.DEFAULT_SDF);
- config.setRecentDateFormatStr(FTPTimestampParser.DEFAULT_RECENT_SDF);
- // 2 hours difference
- config.setServerTimeZoneId("America/Chicago");
- parser.configure(config);
-
-
try {
Calendar parsed = parser.parseTimestamp(fmtTimePlusOneHour);
// the only difference should be the two hours
@@ -103,7 +104,7 @@
(long)TWO_HOURS_OF_MILLISECONDS, cal.getTime().getTime() - parsed.getTime().getTime());
} catch (ParseException e){
- fail("Unable to parse");
+ fail("Unable to parse " + fmtTimePlusOneHour);
}


//but if the file's timestamp is THREE hours ahead of now, that should @@ -123,13 +124,18 @@

public void testParser() {
FTPTimestampParserImpl parser = new FTPTimestampParserImpl();
+ Calendar cal = Calendar.getInstance();
+ cal.set(Calendar.YEAR, 2002);
+ cal.set(Calendar.MONTH, 1);
+ cal.set(Calendar.DAY_OF_MONTH, 22);
+ SimpleDateFormat sdf = new SimpleDateFormat("MMM dd yyyy");
try {
- parser.parseTimestamp("feb 22 2002");
+ parser.parseTimestamp(sdf.format(cal.getTime()));
} catch (ParseException e) {
fail("failed.to.parse.default");
}
try {
- parser.parseTimestamp("fïv 22 2002");
+ parser.parseTimestamp("fïv 22 2002");
fail("should.have.failed.to.parse.default");
} catch (ParseException e) {
// this is the success case
@@ -140,14 +146,17 @@
config.setRecentDateFormatStr("d MMM HH:mm");
config.setServerLanguageCode("fr");
parser.configure(config);
+ DateFormatSymbols dfs = FTPClientConfig.lookupDateFormatSymbols("fr");
+ sdf = new SimpleDateFormat("MMM d yyyy", dfs);
try {
- parser.parseTimestamp("dïc 22 2002");
+ parser.parseTimestamp(sdf.format(cal.getTime()));
fail("incorrect.field.order");
} catch (ParseException e) {
// this is the success case
}
+ sdf = new SimpleDateFormat("d MMM yyyy", dfs);
try {
- parser.parseTimestamp("22 dïc 2002");
+ parser.parseTimestamp(sdf.format(cal.getTime()));
} catch (ParseException e) {
fail("failed.to.parse.french");
}
@@ -159,27 +168,28 @@
// this is the success case
}
try {
- parser.parseTimestamp("29 fïv 2002");
+ parser.parseTimestamp("29 fïv 2002");
fail("nonexistent.date");
} catch (ParseException e) {
// this is the success case
}

try {
- parser.parseTimestamp("22 aoï 30:02");
+ parser.parseTimestamp("22 aoï 30:02");
fail("bad.hour");
} catch (ParseException e) {
// this is the success case
}

try {
- parser.parseTimestamp("22 aoï 20:74");
+ parser.parseTimestamp("22 aoï 20:74");
fail("bad.minute");
} catch (ParseException e) {
// this is the success case
}
+ sdf = new SimpleDateFormat("d MMM HH:mm", dfs);
try {
- parser.parseTimestamp("28 aoï 20:02");
+ parser.parseTimestamp(sdf.format(cal.getTime()));
} catch (ParseException e) {
fail("failed.to.parse.french.recent");
}


------------------------------------------------------------------------

Index: FTPClientConfigTest.java
===================================================================
--- FTPClientConfigTest.java (revision 159615)
+++ FTPClientConfigTest.java (working copy)
@@ -67,6 +67,7 @@
String tooLong = "jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec|jan";
String tooShort = "jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov";
String fakeLang = "abc|def|ghi|jkl|mno|pqr|stu|vwx|yza|bcd|efg|hij";
+ String standard = "jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec";

public void testSetShortMonthNames() {
}
@@ -153,12 +154,18 @@
// should have failed
}
DateFormatSymbols dfs = null;
+ DateFormatSymbols dfs2 = null;
try {
dfs = FTPClientConfig.getDateFormatSymbols(fakeLang);
} catch (Exception e){
fail("rejected valid short month string");
}
- SimpleDateFormat sdf1 = new SimpleDateFormat("MMM dd, yyyy");
+ try {
+ dfs2 = FTPClientConfig.getDateFormatSymbols(standard);
+ } catch (Exception e){
+ fail("rejected valid short month string");
+ }
+ SimpleDateFormat sdf1 = new SimpleDateFormat("MMM dd, yyyy", dfs2);
SimpleDateFormat sdf2 = new SimpleDateFormat("MMM dd, yyyy", dfs);
Date d1 = null;
@@ -166,7 +173,7 @@
try {
d1 = sdf1.parse("dec 31, 2004");
} catch (ParseException px) {
- fail("failed.to.parse.std");
+ fail("failed.to.parse.std " + px);
}
try {
d2 = sdf2.parse("hij 31, 2004");




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




------------------------------------------------------------------------

Index: FTPTimestampParserImplTest.java
===================================================================
--- FTPTimestampParserImplTest.java (revision 160173)
+++ FTPTimestampParserImplTest.java (working copy)
@@ -19,6 +19,7 @@
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
+import java.util.Locale;
import java.util.TimeZone;
import org.apache.commons.net.ftp.FTPClientConfig;
@@ -122,6 +123,8 @@
public void testParser() {
+ Locale defaultLocale = Locale.getDefault();
+ Locale.setDefault(Locale.ENGLISH);
FTPTimestampParserImpl parser = new FTPTimestampParserImpl();
try {
parser.parseTimestamp("feb 22 2002");
@@ -183,6 +186,7 @@
} catch (ParseException e) {
fail("failed.to.parse.french.recent");
}
+ Locale.setDefault(defaultLocale);
}

/**



------------------------------------------------------------------------

Index: FTPClientConfigTest.java
===================================================================
--- FTPClientConfigTest.java (revision 160173)
+++ FTPClientConfigTest.java (working copy)
@@ -19,6 +19,7 @@
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.Locale;
import junit.framework.TestCase;
@@ -133,6 +134,8 @@
}
public void testGetDateFormatSymbols() {
+ Locale defaultLocale = Locale.getDefault();
+ Locale.setDefault(Locale.ENGLISH);
try {
FTPClientConfig.getDateFormatSymbols(badDelim);
@@ -188,6 +191,7 @@
}
+ Locale.setDefault(defaultLocale);
}
}


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to