You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by ka...@apache.org on 2013/04/04 11:22:15 UTC

svn commit: r1464386 - /db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/TimeHandlingTest.java

Author: kahatlen
Date: Thu Apr  4 09:22:15 2013
New Revision: 1464386

URL: http://svn.apache.org/r1464386
Log:
DERBY-3519: junit regression test failure in testInertTime(org.apache.derbyTesting.functionTests.tests.lang.TimeHandlingTest)junit.framework.AssertionFailedError: expected:<2> but was:<3>

Modified:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/TimeHandlingTest.java

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/TimeHandlingTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/TimeHandlingTest.java?rev=1464386&r1=1464385&r2=1464386&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/TimeHandlingTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/TimeHandlingTest.java Thu Apr  4 09:22:15 2013
@@ -20,8 +20,6 @@
  */
 package org.apache.derbyTesting.functionTests.tests.lang;
 
-import java.io.UnsupportedEncodingException;
-import java.sql.Date;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -126,9 +124,8 @@ public class TimeHandlingTest extends Ba
      * Simple set up, just get a Calendar
      * and ensure the table T_ALL is empty.
      * @throws SQLException 
-     * @throws UnsupportedEncodingException 
      */
-    protected void setUp() throws UnsupportedEncodingException, SQLException
+    protected void setUp() throws SQLException
     {
         cal = Calendar.getInstance();
         Statement s  = createStatement();
@@ -139,16 +136,15 @@ public class TimeHandlingTest extends Ba
     /**
      * Test inserting and selecting of TIME values.
      * A set of random TIME values are inserted along with an
-     * identifer that encodes the time value. The values are then
+     * identifier that encodes the time value. The values are then
      * fetched and compared to a value calculated from the identifier.
      * The returned values are fetched using checkTimeValue thus inheriting
      * all the checks within that method.
      * <BR>
      * 
      * @throws SQLException
-     * @throws UnsupportedEncodingException 
      */
-    public void testInertTime() throws SQLException, UnsupportedEncodingException
+    public void testInsertTime() throws SQLException
     {
         getConnection().setAutoCommit(false);
         // Insert a set of time values, 
@@ -642,10 +638,32 @@ public class TimeHandlingTest extends Ba
         long now2 = System.currentTimeMillis();
         assertNotNull(tsv);
         assertFalse(rs.wasNull());
-        
-        // Check the TIME portion is set to the same as tv
-        assertTimeEqual(tv, tsv);
-        
+
+        // Check if the timestamp is as expected. Skip the check if the test
+        // runs around midnight, since we don't know which date to expect in
+        // that case.
+        if (isDateEqual(now, new Timestamp(now2))) {
+            // When reading a TIME value with getTimestamp(), the date
+            // component of the timestamp will be based on the current date.
+            // See DERBY-889.
+            cal.clear();
+            cal.setTimeInMillis(now);
+            int thisYear = cal.get(Calendar.YEAR);
+            int thisMonth = cal.get(Calendar.MONTH);
+            int thisDate = cal.get(Calendar.DATE);
+
+            // Construct a new timestamp based on the time component of the
+            // TIME value and the date component of the current time.
+            cal.clear();
+            cal.setTime(tv);
+            cal.set(thisYear, thisMonth, thisDate);
+
+            // Verify that the timestamp returned from getTimestamp() is as
+            // expected.
+            Timestamp expectedValue = new Timestamp(cal.getTimeInMillis());
+            assertTimeEqual(expectedValue, tsv);
+        }
+
         // DERBY-1811, DERBY-889 being fixed could add tests
         // Check the returned date portion is the current date
         // using the value from 'now' and 'now2'. Double check
@@ -820,14 +838,10 @@ public class TimeHandlingTest extends Ba
     private Time getTime19700101(int hour, int min, int sec)
     {
         cal.clear();
-        cal.set(1970, Calendar.JANUARY, 1);
+        cal.set(1970, Calendar.JANUARY, 1, hour, min, sec);
         cal.set(Calendar.MILLISECOND, 0);
-        
-        cal.set(Calendar.HOUR_OF_DAY, hour);
-        cal.set(Calendar.MINUTE, min);
-        cal.set(Calendar.SECOND, sec);
-        
-        Time to =  new Time(cal.getTime().getTime());
+
+        Time to = new Time(cal.getTimeInMillis());
         assertTime1970(to);
         return to;
     }
@@ -845,13 +859,11 @@ public class TimeHandlingTest extends Ba
     private Time getTime19700101(long t, Calendar cal)
     {
         cal.clear();
-        // JDK 1.3 can't call this!
-        // cal.setTimeInMillis(t);
-        cal.setTime(new Date(t));
+        cal.setTimeInMillis(t);
         cal.set(1970, Calendar.JANUARY, 1);
         cal.set(Calendar.MILLISECOND, 0);
-        
-        Time to =  new Time(cal.getTime().getTime());
+
+        Time to = new Time(cal.getTimeInMillis());
         assertTime1970(to);
         return to;
     }
@@ -868,16 +880,7 @@ public class TimeHandlingTest extends Ba
      */
     private Time getTime19700101(String s, Calendar cal)
     {
-        cal.clear();
-        // JDK 1.3 can't call this!
-        // cal.setTimeInMillis(t);
-        cal.setTime(Time.valueOf(s));
-        cal.set(1970, Calendar.JANUARY, 1);
-        cal.set(Calendar.MILLISECOND, 0);
-        
-        Time to =  new Time(cal.getTime().getTime());
-        assertTime1970(to);
-        return to;
+        return getTime19700101(Time.valueOf(s).getTime(), cal);
     }
     
     /**
@@ -938,7 +941,7 @@ public class TimeHandlingTest extends Ba
     private boolean isDateEqual(long d, Timestamp tsv)
     {
         cal.clear();
-        cal.setTime(new java.util.Date(d));
+        cal.setTimeInMillis(d);
         int day = cal.get(Calendar.DAY_OF_MONTH);
         int month = cal.get(Calendar.MONTH);
         int year = cal.get(Calendar.YEAR);