Author: niallp
Date: Mon Nov 6 02:52:49 2006
New Revision: 471689
URL: http://svn.apache.org/viewvc?view=rev&rev=471689
Log:
Fix JDK 1.3 java.sql.Timestamp's getTime() issue and add missing tests to
ConverterTestSuite
Modified:
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/DateTimeConverter.java
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/ConverterTestSuite.java
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/DateConverterTestBase.java
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/SqlDateConverterTestCase.java
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/SqlTimeConverterTestCase.java
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/SqlTimestampConverterTestCase.java
Modified:
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/DateTimeConverter.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/DateTimeConverter.java?view=diff&rev=471689&r1=471688&r2=471689
==============================================================================
---
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/DateTimeConverter.java
(original)
+++
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/DateTimeConverter.java
Mon Nov 6 02:52:49 2006
@@ -250,7 +250,21 @@
*/
protected Object convertToType(Class type, Object value) throws Exception {
- // Handle Date (includs java.sql.Date, java.sql.Time &
java.sql.Timestamp)
+ // Handle java.sql.Timestamp
+ if (value instanceof java.sql.Timestamp) {
+
+ // ---------------------- JDK 1.3 Fix ----------------------
+ // N.B. Prior to JDK 1.4 the Timestamp's getTime() method
+ // didn't include the milliseconds. The following code
+ // ensures it works consistently accross JDK versions
+ java.sql.Timestamp timestamp = (java.sql.Timestamp)value;
+ long timeInMillis = ((timestamp.getTime() / 1000) * 1000);
+ timeInMillis += timestamp.getNanos() / 1000000;
+ // ---------------------- JDK 1.3 Fix ----------------------
+ return toDate(type, timeInMillis);
+ }
+
+ // Handle Date (includes java.sql.Date & java.sql.Time)
if (value instanceof Date) {
Date date = (Date)value;
return toDate(type, date.getTime());
Modified:
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/ConverterTestSuite.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/ConverterTestSuite.java?view=diff&rev=471689&r1=471688&r2=471689
==============================================================================
---
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/ConverterTestSuite.java
(original)
+++
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/ConverterTestSuite.java
Mon Nov 6 02:52:49 2006
@@ -37,13 +37,27 @@
*/
public static Test suite() {
TestSuite testSuite = new TestSuite();
+ testSuite.addTestSuite(ArrayConverterTestCase.class);
+ testSuite.addTestSuite(BigDecimalConverterTestCase.class);
+ testSuite.addTestSuite(BigIntegerConverterTestCase.class);
+ testSuite.addTestSuite(BooleanArrayConverterTestCase.class);
+ testSuite.addTestSuite(BooleanConverterTestCase.class);
testSuite.addTestSuite(ByteConverterTestCase.class);
+ testSuite.addTestSuite(CalendarConverterTestCase.class);
+ testSuite.addTestSuite(CharacterConverterTestCase.class);
+ testSuite.addTestSuite(ClassConverterTestCase.class);
+ testSuite.addTestSuite(DateConverterTestCase.class);
testSuite.addTestSuite(DoubleConverterTestCase.class);
+ testSuite.addTestSuite(FileConverterTestCase.class);
testSuite.addTestSuite(FloatConverterTestCase.class);
testSuite.addTestSuite(IntegerConverterTestCase.class);
testSuite.addTestSuite(LongConverterTestCase.class);
testSuite.addTestSuite(ShortConverterTestCase.class);
+ testSuite.addTestSuite(SqlDateConverterTestCase.class);
+ testSuite.addTestSuite(SqlTimeConverterTestCase.class);
+ testSuite.addTestSuite(SqlTimestampConverterTestCase.class);
testSuite.addTestSuite(StringArrayConverterTestCase.class);
+ testSuite.addTestSuite(URLConverterTestCase.class);
return testSuite;
}
}
Modified:
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/DateConverterTestBase.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/DateConverterTestBase.java?view=diff&rev=471689&r1=471688&r2=471689
==============================================================================
---
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/DateConverterTestBase.java
(original)
+++
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/DateConverterTestBase.java
Mon Nov 6 02:52:49 2006
@@ -113,7 +113,7 @@
};
// Initialize calendar also with same ms to avoid a failing test in a
new time slice
- ((GregorianCalendar)date[1]).setTimeInMillis(now);
+ ((GregorianCalendar)date[1]).setTime(new Date(now));
for (int i = 0; i < date.length; i++) {
Object val = makeConverter().convert(getExpectedType(), date[i]);
@@ -121,7 +121,7 @@
assertTrue("Convert " + message[i] + " should return a " +
getExpectedType().getName(),
getExpectedType().isInstance(val));
assertEquals("Convert " + message[i] + " should return a " +
date[0],
- now, (Calendar.class.isInstance(val) ?
((Calendar)val).getTimeInMillis() : ((Date)val).getTime()));
+ now, getTimeInMillis(val));
}
}
@@ -489,7 +489,7 @@
* @return The converted java.sql.Date
*/
java.sql.Date toSqlDate(Calendar calendar) {
- return new java.sql.Date(calendar.getTimeInMillis());
+ return new java.sql.Date(getTimeInMillis(calendar));
}
/**
@@ -498,7 +498,7 @@
* @return The converted java.sql.Time
*/
java.sql.Time toSqlTime(Calendar calendar) {
- return new java.sql.Time(calendar.getTimeInMillis());
+ return new java.sql.Time(getTimeInMillis(calendar));
}
/**
@@ -507,6 +507,31 @@
* @return The converted java.sql.Timestamp
*/
java.sql.Timestamp toSqlTimestamp(Calendar calendar) {
- return new java.sql.Timestamp(calendar.getTimeInMillis());
+ return new java.sql.Timestamp(getTimeInMillis(calendar));
+ }
+
+ /**
+ * Convert a Date or Calendar objects to the time in millisconds
+ * @param date The date or calendar object
+ * @return The time in milliseconds
+ */
+ long getTimeInMillis(Object date) {
+
+ if (date instanceof java.sql.Timestamp) {
+ // ---------------------- JDK 1.3 Fix ----------------------
+ // N.B. Prior to JDK 1.4 the Timestamp's getTime() method
+ // didn't include the milliseconds. The following code
+ // ensures it works consistently accross JDK versions
+ java.sql.Timestamp timestamp = (java.sql.Timestamp)date;
+ long timeInMillis = ((timestamp.getTime() / 1000) * 1000);
+ timeInMillis += timestamp.getNanos() / 1000000;
+ return timeInMillis;
+ }
+
+ if (date instanceof Calendar) {
+ return ((Calendar)date).getTime().getTime();
+ } else {
+ return ((Date)date).getTime();
+ }
}
}
Modified:
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/SqlDateConverterTestCase.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/SqlDateConverterTestCase.java?view=diff&rev=471689&r1=471688&r2=471689
==============================================================================
---
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/SqlDateConverterTestCase.java
(original)
+++
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/SqlDateConverterTestCase.java
Mon Nov 6 02:52:49 2006
@@ -118,7 +118,7 @@
* @return The converted value
*/
protected Object toType(Calendar value) {
- return new java.sql.Date(value.getTimeInMillis());
+ return new java.sql.Date(getTimeInMillis(value));
}
}
Modified:
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/SqlTimeConverterTestCase.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/SqlTimeConverterTestCase.java?view=diff&rev=471689&r1=471688&r2=471689
==============================================================================
---
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/SqlTimeConverterTestCase.java
(original)
+++
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/SqlTimeConverterTestCase.java
Mon Nov 6 02:52:49 2006
@@ -140,7 +140,7 @@
* @return The converted value
*/
protected Object toType(Calendar value) {
- return new Time(value.getTimeInMillis());
+ return new Time(getTimeInMillis(value));
}
}
Modified:
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/SqlTimestampConverterTestCase.java
URL:
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/SqlTimestampConverterTestCase.java?view=diff&rev=471689&r1=471688&r2=471689
==============================================================================
---
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/SqlTimestampConverterTestCase.java
(original)
+++
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/SqlTimestampConverterTestCase.java
Mon Nov 6 02:52:49 2006
@@ -137,7 +137,7 @@
* @return The converted value
*/
protected Object toType(Calendar value) {
- return new Timestamp(value.getTimeInMillis());
+ return new Timestamp(getTimeInMillis(value));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]