From 9f5ad43358a4e209b4cd1c91bcc86b997f371548 Mon Sep 17 00:00:00 2001 From: Renjith Kannath Pariyangad Date: Thu, 21 Mar 2024 10:29:19 +0000 Subject: [PATCH] 8320675: PrinterJob/SecurityDialogTest.java hangs Co-authored-by: Alexey Ivanov Reviewed-by: aivanov, tr --- .../print/PrinterJob/SecurityDialogTest.java | 292 ++++++------------ 1 file changed, 96 insertions(+), 196 deletions(-) diff --git a/test/jdk/java/awt/print/PrinterJob/SecurityDialogTest.java b/test/jdk/java/awt/print/PrinterJob/SecurityDialogTest.java index d6a9efeb97c..dc103dc6f56 100644 --- a/test/jdk/java/awt/print/PrinterJob/SecurityDialogTest.java +++ b/test/jdk/java/awt/print/PrinterJob/SecurityDialogTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2024, 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 @@ -21,210 +21,110 @@ * questions. */ -/** +import java.awt.Frame; +import java.awt.print.PageFormat; +import java.awt.print.PrinterJob; +import java.lang.reflect.InvocationTargetException; + +import javax.print.PrintService; +import javax.print.attribute.HashPrintRequestAttributeSet; +import javax.print.attribute.PrintRequestAttributeSet; +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.SwingUtilities; + +/* * @test * @bug 4937672 5100706 6252456 * @key printer - * @run main/othervm/manual -Djava.security.manager=allow SecurityDialogTest + * @summary Verifies "Print to file" option is disable if reading/writing files + * is not allowed by Security Manager. + * @library /java/awt/regtesthelpers + * @build PassFailJFrame + * @run main/manual/othervm -Djava.security.manager=allow SecurityDialogTest */ - -import java.awt.* ; -import java.awt.print.* ; -import java.io.*; -import java.security.*; -import javax.print.*; -import javax.print.attribute.*; - public class SecurityDialogTest { + private static final String INSTRUCTIONS = + "This test brings up a native and cross-platform page and print dialogs.\n" + + "\n" + + "If the dialog has an option to save to file, the option ought " + + "to be disabled.\n" + + "\n" + + "Press the Pass button if the \"Print to file\" option was disabled in\n" + + "all the dialogs where it was present.\n" + + "Otherwise, press the Fail button.\n" + + "\n" + + "The dialogs should be displayed even when " + + "there is no queuePrintJob permission."; + private static JLabel dialogType; - public static void main ( String args[] ) { - - String[] instructions = - { - "You must have a printer available to perform this test.", - "This test brings up a native and cross-platform page and", - "print dialogs.", - "The dialogs should be displayed even when ", - "there is no queuePrintJob permission.", - "If the dialog has an option to save to file, the option ought", - "to be disabled if there is no read/write file permission.", - "You should test this by trying different policy files." - }; - - Sysout.createDialog( ); - Sysout.printInstructions( instructions ); - - SecurityDialogTest pjc = new SecurityDialogTest() ; - } - - - public SecurityDialogTest() { - - PrinterJob pj = PrinterJob.getPrinterJob() ; - - // Install a security manager which does not allow reading and - // writing of files. - //PrintTestSecurityManager ptsm = new PrintTestSecurityManager(); - SecurityManager ptsm = new SecurityManager(); - - try { - System.setSecurityManager(ptsm); - } catch (SecurityException e) { - System.out.println("Could not run test - security exception"); - } - - try { - PrintJob pjob = Toolkit.getDefaultToolkit().getPrintJob(new Frame(), "Printing", null, null); - Sysout.println("If the value of pjob is null, the test fails.\n"); - Sysout.println(" pjob = "+pjob); - } catch (SecurityException e) { - } - - PrintService[] services = PrinterJob.lookupPrintServices(); - for (int i=0; i dialogType.setText(type)); + } } -class Sysout { - private static TestDialog dialog; - - public static void createDialogWithInstructions( String[] instructions ) - { - dialog = new TestDialog( new Frame(), "Instructions" ); - dialog.printInstructions( instructions ); - dialog.show(); - println( "Any messages for the tester will display here." ); - } - - public static void createDialog( ) - { - dialog = new TestDialog( new Frame(), "Instructions" ); - String[] defInstr = { "Instructions will appear here. ", "" } ; - dialog.printInstructions( defInstr ); - dialog.show(); - println( "Any messages for the tester will display here." ); - } - - - public static void printInstructions( String[] instructions ) - { - dialog.printInstructions( instructions ); - } - - - public static void println( String messageIn ) - { - dialog.displayMessage( messageIn ); - } - -}// Sysout class - -/** - This is part of the standard test machinery. It provides a place for the - test instructions to be displayed, and a place for interactive messages - to the user to be displayed. - To have the test instructions displayed, see Sysout. - To have a message to the user be displayed, see Sysout. - Do not call anything in this dialog directly. - */ -class TestDialog extends Dialog { - - TextArea instructionsText; - TextArea messageText; - int maxStringLength = 80; - - //DO NOT call this directly, go through Sysout - public TestDialog( Frame frame, String name ) - { - super( frame, name ); - int scrollBoth = TextArea.SCROLLBARS_BOTH; - instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); - add( "North", instructionsText ); - - messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); - add("Center", messageText); - - pack(); - - show(); - }// TestDialog() - - //DO NOT call this directly, go through Sysout - public void printInstructions( String[] instructions ) - { - //Clear out any current instructions - instructionsText.setText( "" ); - - //Go down array of instruction strings - - String printStr, remainingStr; - for( int i=0; i < instructions.length; i++ ) - { - //chop up each into pieces maxSringLength long - remainingStr = instructions[ i ]; - while( remainingStr.length() > 0 ) - { - //if longer than max then chop off first max chars to print - if( remainingStr.length() >= maxStringLength ) - { - //Try to chop on a word boundary - int posOfSpace = remainingStr. - lastIndexOf( ' ', maxStringLength - 1 ); - - if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; - - printStr = remainingStr.substring( 0, posOfSpace + 1 ); - remainingStr = remainingStr.substring( posOfSpace + 1 ); - } - //else just print - else - { - printStr = remainingStr; - remainingStr = ""; - } - - instructionsText.append( printStr + "\n" ); - - }// while - - }// for - - }//printInstructions() - - //DO NOT call this directly, go through Sysout - public void displayMessage( String messageIn ) - { - messageText.append( messageIn + "\n" ); - } - - }// TestDialog class