1 /*
2  * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23  /*
24  * @test
25  * @bug 6529030 8159134
26  * @summary  Verifies if Java Printing: Selection radiobutton gets enabled.
27  * @requires (os.family == "windows")
28  * @run main/manual PrintDlgSelectionAttribTest
29  */
30 import java.awt.BorderLayout;
31 import java.awt.FlowLayout;
32 import java.awt.Graphics;
33 import java.awt.print.Printable;
34 import java.awt.print.PageFormat;
35 import java.awt.print.PrinterException;
36 import java.awt.print.PrinterJob;
37 import javax.swing.JButton;
38 import javax.swing.JDialog;
39 import javax.swing.JPanel;
40 import javax.swing.JTextArea;
41 import javax.swing.SwingUtilities;
42 
43 public class PrintDlgSelectionAttribTest {
44 
45     private static Thread mainThread;
46     private static boolean testPassed;
47     private static boolean testGeneratedInterrupt;
48     private static PrinterJob printJob;
49 
print()50     public static void print() {
51 
52         // Set working printable to print pages
53         printJob.setPrintable(new Printable() {
54             public int print(Graphics graphics, PageFormat pageFormat,
55                     int pageIndex) throws PrinterException {
56                 return NO_SUCH_PAGE;
57             }
58         });
59 
60         // Display Print dialog
61         if (!printJob.printDialog()) {
62             System.out.println("\tPrinting canceled by user");
63             return;
64         }
65 
66         try {
67             printJob.print();
68         } catch (PrinterException e) {
69         }
70     }
71 
printTest()72     public static void printTest() {
73         printJob = PrinterJob.getPrinterJob();
74         System.out.println(" -=- Starting printing #1 -=-");
75         print();
76         System.out.println(" -=- Starting printing #2 -=-");
77         print();
78     }
79 
main(String[] args)80     public static void main(String[] args) throws Exception {
81         SwingUtilities.invokeAndWait(() -> {
82             doTest(PrintDlgSelectionAttribTest::printTest);
83         });
84         mainThread = Thread.currentThread();
85         try {
86             Thread.sleep(60000);
87         } catch (InterruptedException e) {
88             if (!testPassed && testGeneratedInterrupt) {
89                 throw new RuntimeException(""
90                         + "Selection radio button is enabled in print dialog");
91             }
92         }
93         if (!testGeneratedInterrupt) {
94             throw new RuntimeException("user has not executed the test");
95         }
96     }
97 
pass()98     public static synchronized void pass() {
99         testPassed = true;
100         testGeneratedInterrupt = true;
101         mainThread.interrupt();
102     }
103 
fail()104     public static synchronized void fail() {
105         testPassed = false;
106         testGeneratedInterrupt = true;
107         mainThread.interrupt();
108     }
109 
doTest(Runnable action)110     private static void doTest(Runnable action) {
111         String description
112                 = " Visual inspection of print dialog is required.\n"
113                 + " Initially, a print dialog will be shown.\n "
114                 + " Please verify Selection radio button is disabled.\n"
115                 + " Press OK. Then 2nd print dialog will be shown.\n"
116                 + " Please verify the Selection radio button is disabled\n"
117                 + " in 2nd print dialog. If disabled, press PASS else press fail";
118 
119         final JDialog dialog = new JDialog();
120         dialog.setTitle("printSelectionTest");
121         JTextArea textArea = new JTextArea(description);
122         textArea.setEditable(false);
123         final JButton testButton = new JButton("Start Test");
124         final JButton passButton = new JButton("PASS");
125         passButton.setEnabled(false);
126         passButton.addActionListener((e) -> {
127             dialog.dispose();
128             pass();
129         });
130         final JButton failButton = new JButton("FAIL");
131         failButton.setEnabled(false);
132         failButton.addActionListener((e) -> {
133             dialog.dispose();
134             fail();
135         });
136         testButton.addActionListener((e) -> {
137             testButton.setEnabled(false);
138             action.run();
139             passButton.setEnabled(true);
140             failButton.setEnabled(true);
141         });
142         JPanel mainPanel = new JPanel(new BorderLayout());
143         mainPanel.add(textArea, BorderLayout.CENTER);
144         JPanel buttonPanel = new JPanel(new FlowLayout());
145         buttonPanel.add(testButton);
146         buttonPanel.add(passButton);
147         buttonPanel.add(failButton);
148         mainPanel.add(buttonPanel, BorderLayout.SOUTH);
149         dialog.add(mainPanel);
150         dialog.pack();
151         dialog.setVisible(true);
152     }
153 }
154