--- jsr166/src/test/tck/JSR166TestCase.java 2012/11/18 18:03:11 1.92 +++ jsr166/src/test/tck/JSR166TestCase.java 2013/01/21 19:43:52 1.95 @@ -11,8 +11,11 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.util.ArrayList; import java.util.Arrays; import java.util.Date; +import java.util.Enumeration; +import java.util.List; import java.util.NoSuchElementException; import java.util.PropertyPermission; import java.util.concurrent.*; @@ -142,7 +145,9 @@ public class JSR166TestCase extends Test } /** - * Runs all JSR166 unit tests using junit.textui.TestRunner + * Runs all JSR166 unit tests using junit.textui.TestRunner. + * Optional command line arg provides the number of iterations to + * repeat running the tests. */ public static void main(String[] args) { if (useSecurityManager) { @@ -507,6 +512,16 @@ public class JSR166TestCase extends Test } /** + * A debugging tool to print all stack traces, as jstack does. + */ + void printAllStackTraces() { + System.err.println( + Arrays.toString( + java.lang.management.ManagementFactory.getThreadMXBean() + .dumpAllThreads(true, true))); + } + + /** * Checks that thread does not terminate within the default * millisecond delay of {@code timeoutMillis()}. */ @@ -623,11 +638,26 @@ public class JSR166TestCase extends Test SecurityManager sm = System.getSecurityManager(); if (sm == null) { r.run(); + } + runWithSecurityManagerWithPermissions(r, permissions); + } + + /** + * Runs Runnable r with a security policy that permits precisely + * the specified permissions. If there is no current security + * manager, a temporary one is set for the duration of the + * Runnable. We require that any security manager permit + * getPolicy/setPolicy. + */ + public void runWithSecurityManagerWithPermissions(Runnable r, + Permission... permissions) { + SecurityManager sm = System.getSecurityManager(); + if (sm == null) { Policy savedPolicy = Policy.getPolicy(); try { Policy.setPolicy(permissivePolicy()); System.setSecurityManager(new SecurityManager()); - runWithPermissions(r, permissions); + runWithSecurityManagerWithPermissions(r, permissions); } finally { System.setSecurityManager(null); Policy.setPolicy(savedPolicy); @@ -675,6 +705,12 @@ public class JSR166TestCase extends Test return perms.implies(p); } public void refresh() {} + public String toString() { + List ps = new ArrayList(); + for (Enumeration e = perms.elements(); e.hasMoreElements();) + ps.add(e.nextElement()); + return "AdjustablePolicy with permissions " + ps; + } } /**