More expectations for our test runs
diff --git a/libcore/tools/runner/expectations.txt b/libcore/tools/runner/expectations.txt
index 44d26d0..641ec88 100644
--- a/libcore/tools/runner/expectations.txt
+++ b/libcore/tools/runner/expectations.txt
@@ -28,7 +28,7 @@
 pattern .*cannot find symbol.*
 
 
-# Dalvik don't include the "SunJCE" crypto provider
+# Dalvik doesn't include the "SunJCE" crypto provider
 test com.sun.crypto.provider.Cipher.AES.Test4513830
 result EXEC_FAILED
 pattern .*NoClassDefFoundError: com.sun.crypto.provider.SunJCE.*
@@ -601,3 +601,76 @@
 test com.sun.jdi.VMDeathRequestTest
 result COMPILE_FAILED
 pattern .*package com.sun.jdi does not exist.*
+
+
+# Dalvik doesn't include a com.sun.net HTTP server
+test com.sun.net.httpserver
+result UNSUPPORTED
+
+test sun.net.www
+result UNSUPPORTED
+
+
+# Dalvik doesn't include AWT except the font package
+test java.awt
+result UNSUPPORTED
+
+test java.awt.FontClass
+result SUCCESS
+
+
+# Dalvik doesn't include java.beans except for property listeners
+test java.beans
+result UNSUPPORTED
+
+test java.beans.PropertyChangeSupport
+result SUCCESS
+
+
+# Dalvik doesn't include java.lang.instrument
+test java.lang.instrument
+result UNSUPPORTED
+
+
+# Dalvik doesn't include java.lang.management
+test java.lang.management
+result UNSUPPORTED
+
+
+# Dalvik doesn't include RMI
+test java.rmi
+result UNSUPPORTED
+
+test sun.rmi
+result UNSUPPORTED
+
+
+# Dalvik doesn't include javax.management
+test javax.management
+result UNSUPPORTED
+
+
+# Dalvik doesn't include javax.naming
+test javax.naming
+result UNSUPPORTED
+
+
+# Dalvik doesn't include javax.sound
+test javax.sound
+result UNSUPPORTED
+
+
+# Dalvik doesn't include javax.swing
+test javax.swing
+result UNSUPPORTED
+
+
+# Dalvik doesn't include sun.management
+test sun.management
+result UNSUPPORTED
+
+
+# Dalvik doesn't include javax.smartcardio
+test sun.security.smartcardio
+result UNSUPPORTED
+
diff --git a/libcore/tools/runner/java/dalvik/runner/Driver.java b/libcore/tools/runner/java/dalvik/runner/Driver.java
index 695417d..cf29d9c 100644
--- a/libcore/tools/runner/java/dalvik/runner/Driver.java
+++ b/libcore/tools/runner/java/dalvik/runner/Driver.java
@@ -112,16 +112,19 @@
             builders.submit(new Runnable() {
                 public void run() {
                     try {
-                        ExpectedResult expectedResult = expectedResults.get(
-                                testRun.getQualifiedName());
-                        if (expectedResult == null) {
-                            expectedResult = ExpectedResult.SUCCESS;
-                        }
+                        ExpectedResult expectedResult = lookupExpectedResult(testRun);
                         testRun.setExpectedResult(expectedResult);
 
-                        vm.buildAndInstall(testRun);
-                        logger.fine("installed test " + runIndex + "; "
-                                + readyToRun.size() + " are ready to run");
+                        if (expectedResult.getResult() == Result.UNSUPPORTED) {
+                            testRun.setResult(Result.UNSUPPORTED, Collections.<String>emptyList());
+                            logger.fine("skipping test " + testRun
+                                    + " because the expectations file says it is unsupported.");
+
+                        } else {
+                            vm.buildAndInstall(testRun);
+                            logger.fine("installed test " + runIndex + "; "
+                                    + readyToRun.size() + " are ready to run");
+                        }
 
                         readyToRun.put(testRun);
                     } catch (Throwable throwable) {
@@ -163,6 +166,29 @@
     }
 
     /**
+     * Finds the expected result for the specified test run. This strips off
+     * parts of the test's qualified name until it either finds a match or runs
+     * out of name.
+     */
+    private ExpectedResult lookupExpectedResult(TestRun testRun) {
+        String name = testRun.getQualifiedName();
+
+        while (true) {
+            ExpectedResult expectedResult = expectedResults.get(name);
+            if (expectedResult != null) {
+                return expectedResult;
+            }
+
+            int dot = name.lastIndexOf('.');
+            if (dot == -1) {
+                return ExpectedResult.SUCCESS;
+            }
+
+            name = name.substring(0, dot);
+        }
+    }
+
+    /**
      * Executes a single test and then prints the result.
      */
     private void execute(TestRun testRun) {
diff --git a/libcore/tools/runner/java/dalvik/runner/TestRun.java b/libcore/tools/runner/java/dalvik/runner/TestRun.java
index ff72297..3e85d92 100644
--- a/libcore/tools/runner/java/dalvik/runner/TestRun.java
+++ b/libcore/tools/runner/java/dalvik/runner/TestRun.java
@@ -21,7 +21,6 @@
 import java.io.StringWriter;
 import java.util.Arrays;
 import java.util.List;
-import java.util.regex.Pattern;
 
 /**
  * A test run and its outcome. This class tracks the complete lifecycle of a
@@ -224,4 +223,8 @@
 
         return builder.toString();
     }
+
+    @Override public String toString() {
+        return qualifiedName;
+    }
 }