Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/java/awt/PrintJob/PageSetupDlgBlockingTest/PageSetupDlgBlockingTest.java
38828 views
1
/*
2
* Copyright (c) 2003, 2007, 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
/*
25
@test
26
@bug 4507585
27
@summary Native modal dialog shouldn't block event dispatching when called on EventDispatchThread.
28
@author [email protected]: area=awt.PrintJob
29
@run main/manual=yesno PageSetupDlgBlockingTest
30
31
*/
32
33
import java.awt.*;
34
import java.awt.print.*;
35
import java.awt.event.*;
36
import javax.swing.*;
37
import java.applet.*;
38
39
public class PageSetupDlgBlockingTest extends Panel {
40
public static Frame frame = new TestFrame("Test Frame");
41
42
public static void main(String[] args) {
43
PageSetupDlgBlockingTest a = new PageSetupDlgBlockingTest();
44
45
a.init();
46
a.start();
47
}
48
49
public void init()
50
{
51
//Create instructions for the user here, as well as set up
52
// the environment -- set the layout manager, add buttons,
53
// etc.
54
this.setLayout (new BorderLayout ());
55
56
String[] instructions =
57
{
58
"This test verifies that native modal 'Page Setup' dialog doesn't block event",
59
"handling when called on EventDispatchThread.",
60
" ",
61
"After test started you will see 'Test Frame' frame which contains",
62
"one 'Click Me' button.",
63
"1. Click the button:",
64
" - 'Page Setup' dialog will appear.",
65
"2. Drag the dialog over the 'Test Frame' so that to enforce its button redraw:",
66
" - if you're seeing the button redraw (as long as PAINT events are displayed)",
67
" the test PASSED else FAILED."
68
};
69
Sysout.createDialogWithInstructions(instructions);
70
}
71
72
73
public void start() {
74
JButton button = new JButton("Click Me");
75
final AWTEventListener listener = new AWTEventListener() {
76
public void eventDispatched(AWTEvent e) {
77
if (e.getSource().getClass() == TestFrame.class) {
78
Sysout.println(e.paramString() + " on <Test Frame>");
79
}
80
}
81
};
82
83
button.addActionListener(new ActionListener() {
84
public void actionPerformed(ActionEvent e) {
85
86
// Show PAINT events only when the dialog is displayed.
87
Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.PAINT_EVENT_MASK);
88
89
PrinterJob job = PrinterJob.getPrinterJob();
90
job.pageDialog(job.defaultPage());
91
92
Toolkit.getDefaultToolkit().removeAWTEventListener(listener);
93
}
94
});
95
96
button.setSize(100, 50);
97
98
frame.setLayout(new BorderLayout());
99
frame.setSize(200, 200);
100
frame.setLocation(500, 0);
101
frame.add(button, BorderLayout.CENTER);
102
frame.setVisible(true);
103
}
104
}
105
106
class TestFrame extends Frame {
107
TestFrame(String title) {
108
super(title);
109
}
110
}
111
112
/****************************************************
113
Standard Test Machinery
114
DO NOT modify anything below -- it's a standard
115
chunk of code whose purpose is to make user
116
interaction uniform, and thereby make it simpler
117
to read and understand someone else's test.
118
****************************************************/
119
120
/**
121
This is part of the standard test machinery.
122
It creates a dialog (with the instructions), and is the interface
123
for sending text messages to the user.
124
To print the instructions, send an array of strings to Sysout.createDialog
125
WithInstructions method. Put one line of instructions per array entry.
126
To display a message for the tester to see, simply call Sysout.println
127
with the string to be displayed.
128
This mimics System.out.println but works within the test harness as well
129
as standalone.
130
*/
131
132
class Sysout
133
{
134
private static TestDialog dialog;
135
136
public static void createDialogWithInstructions( String[] instructions )
137
{
138
dialog = new TestDialog( new Frame(), "Instructions" );
139
dialog.printInstructions( instructions );
140
dialog.setVisible(true);
141
println( "Any messages for the tester will display here." );
142
}
143
144
public static void createDialog( )
145
{
146
dialog = new TestDialog( new Frame(), "Instructions" );
147
String[] defInstr = { "Instructions will appear here. ", "" } ;
148
dialog.printInstructions( defInstr );
149
dialog.setVisible(true);
150
println( "Any messages for the tester will display here." );
151
}
152
153
154
public static void printInstructions( String[] instructions )
155
{
156
dialog.printInstructions( instructions );
157
}
158
159
160
public static void println( String messageIn )
161
{
162
dialog.displayMessage( messageIn );
163
}
164
165
}// Sysout class
166
167
/**
168
This is part of the standard test machinery. It provides a place for the
169
test instructions to be displayed, and a place for interactive messages
170
to the user to be displayed.
171
To have the test instructions displayed, see Sysout.
172
To have a message to the user be displayed, see Sysout.
173
Do not call anything in this dialog directly.
174
*/
175
class TestDialog extends Dialog
176
{
177
178
TextArea instructionsText;
179
TextArea messageText;
180
int maxStringLength = 80;
181
182
//DO NOT call this directly, go through Sysout
183
public TestDialog( Frame frame, String name )
184
{
185
super( frame, name );
186
int scrollBoth = TextArea.SCROLLBARS_BOTH;
187
instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
188
add( "North", instructionsText );
189
190
messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
191
add("Center", messageText);
192
193
pack();
194
195
setVisible(true);
196
}// TestDialog()
197
198
//DO NOT call this directly, go through Sysout
199
public void printInstructions( String[] instructions )
200
{
201
//Clear out any current instructions
202
instructionsText.setText( "" );
203
204
//Go down array of instruction strings
205
206
String printStr, remainingStr;
207
for( int i=0; i < instructions.length; i++ )
208
{
209
//chop up each into pieces maxSringLength long
210
remainingStr = instructions[ i ];
211
while( remainingStr.length() > 0 )
212
{
213
//if longer than max then chop off first max chars to print
214
if( remainingStr.length() >= maxStringLength )
215
{
216
//Try to chop on a word boundary
217
int posOfSpace = remainingStr.
218
lastIndexOf( ' ', maxStringLength - 1 );
219
220
if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
221
222
printStr = remainingStr.substring( 0, posOfSpace + 1 );
223
remainingStr = remainingStr.substring( posOfSpace + 1 );
224
}
225
//else just print
226
else
227
{
228
printStr = remainingStr;
229
remainingStr = "";
230
}
231
232
instructionsText.append( printStr + "\n" );
233
234
}// while
235
236
}// for
237
238
}//printInstructions()
239
240
//DO NOT call this directly, go through Sysout
241
public void displayMessage( String messageIn )
242
{
243
messageText.append( messageIn + "\n" );
244
System.out.println(messageIn);
245
}
246
247
}// TestDialog class
248
249