diff --git a/test/com/sun/awt/SecurityWarning/CustomSecurityManager.java b/test/com/sun/awt/SecurityWarning/CustomSecurityManager.java new file mode 100644 index 0000000000000000000000000000000000000000..3885f168de3b828a53e2c5fb19f36bd821a1d583 --- /dev/null +++ b/test/com/sun/awt/SecurityWarning/CustomSecurityManager.java @@ -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(); + } + } +} diff --git a/test/com/sun/awt/SecurityWarning/GetSizeShouldNotReturnZero.java b/test/com/sun/awt/SecurityWarning/GetSizeShouldNotReturnZero.java index f66366c9121e558b4c16ed5270f2dd3e9eb0115b..bf4cdc5bb3a632dac754c31a165c87a162812a72 100644 --- a/test/com/sun/awt/SecurityWarning/GetSizeShouldNotReturnZero.java +++ b/test/com/sun/awt/SecurityWarning/GetSizeShouldNotReturnZero.java @@ -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 java.awt.*; -import java.awt.event.*; -import java.security.Permission; -import test.java.awt.regtesthelpers.Util; import com.sun.awt.SecurityWarning; +import test.java.awt.regtesthelpers.Util; + +import java.awt.*; public class GetSizeShouldNotReturnZero { @@ -56,21 +56,6 @@ public class GetSizeShouldNotReturnZero 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 @@ public class GetSizeShouldNotReturnZero }//End init() - /***************************************************** * Standard Test Machinery Section * DO NOT modify anything in this section -- it's a diff --git a/test/java/awt/regtesthelpers/CopyClassFile.java b/test/java/awt/regtesthelpers/CopyClassFile.java new file mode 100644 index 0000000000000000000000000000000000000000..1ee6513638f14b7f08e0043811987b7dd15353f2 --- /dev/null +++ b/test/java/awt/regtesthelpers/CopyClassFile.java @@ -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. + *
+ * 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); + } + } +}