8025440: [TEST_BUG] com/sun/awt/SecurityWarning/GetSizeShouldNotReturnZero.java failed since jdk8b108
Reviewed-by: anthony
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/com/sun/awt/SecurityWarning/CustomSecurityManager.java Thu Nov 14 11:42:46 2013 +0400
@@ -0,0 +1,11 @@
+import sun.security.util.SecurityConstants;
+import java.security.Permission;
+
+public class CustomSecurityManager extends SecurityManager {
+ @Override
+ public void checkPermission(Permission perm) {
+ if (perm.implies(SecurityConstants.AWT.TOPLEVEL_WINDOW_PERMISSION)) {
+ throw new SecurityException();
+ }
+ }
+}
--- a/jdk/test/com/sun/awt/SecurityWarning/GetSizeShouldNotReturnZero.java Thu Nov 14 10:52:19 2013 +0400
+++ b/jdk/test/com/sun/awt/SecurityWarning/GetSizeShouldNotReturnZero.java Thu Nov 14 11:42:46 2013 +0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -27,8 +27,9 @@
@summary The size returned by SecurityWarning.getSize() should not be zero
@author anthony.petrov@sun.com: area=awt.toplevel
@library ../../../../java/awt/regtesthelpers
- @build Util
- @run main GetSizeShouldNotReturnZero
+ @build Util CustomSecurityManager CopyClassFile
+ @run main CopyClassFile CustomSecurityManager bootcp/
+ @run main/othervm/secure=CustomSecurityManager -Xbootclasspath/a:bootcp GetSizeShouldNotReturnZero
*/
/**
@@ -37,11 +38,10 @@
* summary: The size returned by SecurityWarning.getSize() should not be zero
*/
+import com.sun.awt.SecurityWarning;
+import test.java.awt.regtesthelpers.Util;
+
import java.awt.*;
-import java.awt.event.*;
-import java.security.Permission;
-import test.java.awt.regtesthelpers.Util;
-import com.sun.awt.SecurityWarning;
public class GetSizeShouldNotReturnZero
{
@@ -56,21 +56,6 @@
Sysout.createDialog( );
Sysout.printInstructions( instructions );
-
- // Install the security manager so that all subsequently created
- // windows display the security warning.
- System.setSecurityManager(new SecurityManager() {
-
- @Override
- public void checkPermission(Permission perm) {
- }
-
- @Override
- public boolean checkTopLevelWindow(Object window) {
- return false;
- }
- });
-
Frame f = new Frame();
f.setSize(100, 100);
f.setVisible(true);
@@ -87,7 +72,6 @@
}//End init()
-
/*****************************************************
* Standard Test Machinery Section
* DO NOT modify anything in this section -- it's a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/regtesthelpers/CopyClassFile.java Thu Nov 14 11:42:46 2013 +0400
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.util.Arrays;
+
+/**
+ * A utility to copy the class and all it's inner classes to the specified directory.
+ * <p>
+ * Usage in jtreg:
+ *
+ * @build CopyClassFile
+ * @run main CopyClassFile package.class dest_directory
+ */
+public class CopyClassFile {
+
+ private static final ClassLoader cl = CopyClassFile.class.getClassLoader();
+
+ private static String destinationDir;
+ private static String className;
+ private static String classFile;
+
+ public static void main(String[] args) throws Exception {
+ if (args.length != 2) {
+ throw new IllegalArgumentException("Illegal usage: class name and destination directory should be specified");
+ }
+
+ destinationDir = args[1];
+ className = args[0];
+ classFile = className.replaceAll("\\.", File.separator) + ".class";
+
+ URL url = cl.getResource(classFile);
+ if (url == null) {
+ throw new RuntimeException("Could not find a class: " + classFile);
+ }
+
+ File[] files = new File(url.toURI())
+ .getParentFile()
+ .listFiles((dir, name) -> name.startsWith(cutPackageName(className)) && name.endsWith(".class"));
+
+ Arrays.stream(files).forEach(CopyClassFile::copyFile);
+ }
+
+ private static String cutPackageName(String className) {
+ int dotIndex = className.lastIndexOf(".") + 1;
+ if (dotIndex <= 0) {
+ return className;
+ } else {
+ return className.substring(dotIndex);
+ }
+ }
+
+ private static void copyFile(File f) {
+ try {
+ Path classFilePath = Paths.get(classFile);
+ String packagePath = classFilePath.getParent() == null ? "" : classFilePath.getParent().toString();
+ Path p = Paths.get(destinationDir + packagePath + File.separator + f.getName());
+ Files.createDirectories(p.getParent());
+ try (InputStream is = new FileInputStream(f)) {
+ Files.copy(is, p, StandardCopyOption.REPLACE_EXISTING);
+ }
+ } catch (IOException ex) {
+ throw new RuntimeException("Could not copy file " + f, ex);
+ }
+ }
+}