Fix external issue 4711 - java.sql.Timestamp#compareTo(java.util.Date) silently crashes in Firefox and Chrome

Review at http://gwt-code-reviews.appspot.com/634802

Review by: jat@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8362 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/super/com/google/gwt/emul/java/sql/Timestamp.java b/user/super/com/google/gwt/emul/java/sql/Timestamp.java
index bf9aa00..8e2c62a 100644
--- a/user/super/com/google/gwt/emul/java/sql/Timestamp.java
+++ b/user/super/com/google/gwt/emul/java/sql/Timestamp.java
@@ -108,8 +108,11 @@
 
   @Override
   public int compareTo(java.util.Date o) {
-    // JavaDoc says a ClassCastException is correct behavior
-    return compareTo((Timestamp) o);
+    if (o instanceof Timestamp) {
+      return compareTo((Timestamp) o);
+    } else {
+      return compareTo(new Timestamp(o.getTime()));
+    }
   }
 
   public int compareTo(Timestamp o) {
diff --git a/user/test/com/google/gwt/emultest/java/sql/SqlTimestampTest.java b/user/test/com/google/gwt/emultest/java/sql/SqlTimestampTest.java
index b211971..99210c9 100644
--- a/user/test/com/google/gwt/emultest/java/sql/SqlTimestampTest.java
+++ b/user/test/com/google/gwt/emultest/java/sql/SqlTimestampTest.java
@@ -15,7 +15,6 @@
  */
 package com.google.gwt.emultest.java.sql;
 
-import com.google.gwt.core.client.GWT;
 import com.google.gwt.junit.client.GWTTestCase;
 
 import java.sql.Timestamp;
@@ -59,16 +58,9 @@
     assertEquals("d2, t", d2, t);
     assertEquals("hashcode", d2.hashCode(), t.hashCode());
     assertFalse("t.equals(d2)", t.equals(d2));
-
-    if (GWT.isScript()) {
-      // It looks like not all JVMs will throw the CCE, just check web mode.
-      try {
-        t.compareTo(d2);
-        fail("Should throw ClassCastException");
-      } catch (ClassCastException e) {
-        // Correct
-      }
-    }
+    
+    // t is later then d2 by some number of nanoseconds
+    assertEquals(1, t.compareTo(d2));
 
     Timestamp t2 = new Timestamp(d.getTime());
     t2.setNanos(t.getNanos() + 1);