--- jsr166/src/test/tck/JSR166TestCase.java 2011/12/08 18:54:46 1.91
+++ jsr166/src/test/tck/JSR166TestCase.java 2013/01/21 19:51:46 1.96
@@ -11,8 +11,13 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadInfo;
+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.*;
@@ -69,7 +74,7 @@ import java.security.SecurityPermission;
*
*
*
- *
Other notes
+ *
Other notes
*
*
* - Usually, there is one testcase method per JSR166 method
@@ -142,7 +147,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 +514,16 @@ public class JSR166TestCase extends Test
}
/**
+ * A debugging tool to print all stack traces, as jstack does.
+ */
+ static void printAllStackTraces() {
+ for (ThreadInfo info :
+ ManagementFactory.getThreadMXBean()
+ .dumpAllThreads(true, true))
+ System.err.print(info);
+ }
+
+ /**
* Checks that thread does not terminate within the default
* millisecond delay of {@code timeoutMillis()}.
*/
@@ -623,11 +640,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 +707,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;
+ }
}
/**