Do not attempt to re-run test if an exception is of type/sub-type java.lang.Error.

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@6739 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/junit/JUnitMessageQueue.java b/user/src/com/google/gwt/junit/JUnitMessageQueue.java
index 4c06882..ddc8550 100644
--- a/user/src/com/google/gwt/junit/JUnitMessageQueue.java
+++ b/user/src/com/google/gwt/junit/JUnitMessageQueue.java
@@ -57,11 +57,20 @@
     }
   }
 
+  private static final Set<Class<? extends Throwable>> THROWABLES_NOT_RETRIED = createThrowablesNotRetried();
+
+  private static Set<Class<? extends Throwable>> createThrowablesNotRetried() {
+    Set<Class<? extends Throwable>> throwableSet = new HashSet<Class<? extends Throwable>>();
+    throwableSet.add(com.google.gwt.junit.JUnitFatalLaunchException.class);
+    throwableSet.add(java.lang.Error.class);
+    return throwableSet;
+  }
+
   /**
    * Records results for each client; must lock before accessing.
    */
   private final Map<String, ClientStatus> clientStatuses = new HashMap<String, ClientStatus>();
-
+  
   /**
    * A set of the GWT user agents (eg. ie6, gecko) that have connected. 
    */
@@ -100,7 +109,7 @@
    */
   JUnitMessageQueue() {
   }
-
+  
   /**
    * Called by the servlet to query for for the next block to test.
    * 
@@ -390,9 +399,10 @@
     }
   }
 
-  /*
+  /**
    * Returns true iff any there are no results, missing results, or any of the
-   * test results is an exception other than JUnitFatalLaunchException.
+   * test results is an exception other than those in {@code
+   * THROWABLES_NOT_RETRIED}.
    */
   boolean needsRerunning(TestInfo testInfo) {
     Map<String, JUnitResult> results = getResults(testInfo);
@@ -408,8 +418,7 @@
         return true;
       }
       Throwable exception = result.getException();
-      if (exception != null
-          && !(exception instanceof JUnitFatalLaunchException)) {
+      if (exception != null && !isMember(exception, THROWABLES_NOT_RETRIED)) {
         return true;
       }
     }
@@ -461,7 +470,7 @@
     }
     return clientStatus;
   }
-  
+
   /**
    * Get the map of test results from all clients for a given {@link TestInfo},
    * creating it if necessary.
@@ -477,4 +486,13 @@
     }
     return results;
   }
+
+  private boolean isMember(Throwable exception, Set<Class<? extends Throwable>> throwableSet) {
+    for (Class<? extends Throwable> throwable : throwableSet) {
+      if (throwable.isInstance(exception)) {
+        return true;
+      }
+    }
+    return false;
+  }
 }