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]);
   }
 }
