Fix JRE tests to pass under JDK11 semantics

Change-Id: Id8f5a6cd97d9eff67b593d193c431ec4ef8f134a
Review-Link: https://gwt-review.googlesource.com/#/c/21960/
diff --git a/user/test/com/google/gwt/emultest/java/lang/StringTest.java b/user/test/com/google/gwt/emultest/java/lang/StringTest.java
index 05c1d00..556626e 100644
--- a/user/test/com/google/gwt/emultest/java/lang/StringTest.java
+++ b/user/test/com/google/gwt/emultest/java/lang/StringTest.java
@@ -690,7 +690,9 @@
 
     try {
       test.regionMatches(true, -1, null, -1, -1);
-      fail();
+      if (TestUtils.getJdkVersion() < 11) {
+        fail();
+      }
     } catch (NullPointerException expected) {
       // NPE must be thrown before any range checks
     }
diff --git a/user/test/com/google/gwt/emultest/java/util/ArrayDequeTest.java b/user/test/com/google/gwt/emultest/java/util/ArrayDequeTest.java
index 13e5a09..988523f 100644
--- a/user/test/com/google/gwt/emultest/java/util/ArrayDequeTest.java
+++ b/user/test/com/google/gwt/emultest/java/util/ArrayDequeTest.java
@@ -19,6 +19,8 @@
 
 import com.google.gwt.core.client.JavaScriptException;
 
+import com.google.gwt.testing.TestUtils;
+
 import org.apache.commons.collections.TestCollection;
 
 import java.util.ArrayDeque;
@@ -236,7 +238,9 @@
     deque.removeLast();
     try {
       it.next();
-      fail();
+      if (TestUtils.getJdkVersion() < 11) {
+        fail();
+      }
     } catch (ConcurrentModificationException expected) { }
 
     deque = new ArrayDeque<>(asList(getFullNonNullElements()));
@@ -260,7 +264,9 @@
     deque.addLast(new Object());
     try {
       it.next();
-      fail();
+      if (TestUtils.getJdkVersion() < 11) {
+        fail();
+      }
     } catch (ConcurrentModificationException expected) { }
 
     deque = new ArrayDeque<>(asList(getFullNonNullElements()));
@@ -282,7 +288,9 @@
     deque.removeFirst();
     try {
       it.remove();
-      fail();
+      if (TestUtils.getJdkVersion() < 11) {
+        fail();
+      }
     } catch (ConcurrentModificationException expected) { }
   }
 
@@ -299,7 +307,9 @@
     deque.removeFirst();
     try {
       it.next();
-      fail();
+      if (TestUtils.getJdkVersion() < 11) {
+        fail();
+      }
     } catch (ConcurrentModificationException expected) { }
 
     deque = new ArrayDeque<>(asList(getFullNonNullElements()));
@@ -318,7 +328,9 @@
     try {
       it.next();
     } catch (ConcurrentModificationException e) {
-      fail();
+      if (TestUtils.getJdkVersion() < 11) {
+        fail();
+      }
     }
     deque.addFirst(new Object());
     try {
@@ -345,7 +357,9 @@
     deque.removeLast();
     try {
       it.remove();
-      fail();
+      if (TestUtils.getJdkVersion() < 11) {
+        fail();
+      }
     } catch (ConcurrentModificationException expected) { }
   }
 
diff --git a/user/test/com/google/gwt/emultest/java8/util/stream/StreamTest.java b/user/test/com/google/gwt/emultest/java8/util/stream/StreamTest.java
index bfb828a..08c4c89 100644
--- a/user/test/com/google/gwt/emultest/java8/util/stream/StreamTest.java
+++ b/user/test/com/google/gwt/emultest/java8/util/stream/StreamTest.java
@@ -20,6 +20,8 @@
 
 import com.google.gwt.emultest.java.util.EmulTestBase;
 
+import com.google.gwt.testing.TestUtils;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -474,6 +476,15 @@
     // not called again on subsequent closes
     assertEquals(1, calledCount[0]);
 
+    if (TestUtils.getJdkVersion() >= 11) {
+      try {
+        s = s.onClose(() -> calledCount[0]++);
+        fail();
+      } catch (IllegalStateException expected) {
+      }
+      return;
+    }
+
     // Add a handler after close, and re-close, the handler will only go off after the _second_
     // close
     calledCount[0] = 0;
diff --git a/user/test/com/google/gwt/testing/TestUtils.java b/user/test/com/google/gwt/testing/TestUtils.java
index b1ee1ff..14af34c 100644
--- a/user/test/com/google/gwt/testing/TestUtils.java
+++ b/user/test/com/google/gwt/testing/TestUtils.java
@@ -25,7 +25,6 @@
     if (versionString.equals("none")) {
       return -1;
     }
-
     return getMajorVersion(versionString);
   }
 
@@ -36,6 +35,8 @@
   private static int getMajorVersion(String versionString) {
     String[] split = versionString.split("\\.");
     assert split.length >= 1;
-    return Integer.parseInt(split[1]);
+    return versionString.startsWith("1.")
+        ? /* Java <9 format, e.g. 1.7.0 */ Integer.parseInt(split[1])
+        : /* Java 9+ format, e.g. 9.1.0 */ Integer.parseInt(split[0]);
   }
 }