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]

Reply via email to