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/Mixing/setComponentZOrder.java
47867 views
1
/*
2
* Copyright (c) 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 6589530
27
@summary Mixing code should correctly handle insertion of components with setComponentZOrder.
28
@author antohny.petrov@...: area=awt.mixing
29
@run main setComponentZOrder
30
*/
31
32
/**
33
* setComponentZOrder.java
34
*
35
* summary: Mixing code should correctly handle insertion of components with setComponentZOrder.
36
*/
37
38
import java.awt.*;
39
import java.awt.event.*;
40
41
42
public class setComponentZOrder
43
{
44
45
//*** test-writer defined static variables go here ***
46
47
48
private static void init()
49
{
50
//*** Create instructions for the user here ***
51
52
String[] instructions =
53
{
54
"This is an AUTOMATIC test, simply wait until it is done.",
55
"The result (passed or failed) will be shown in the",
56
"message window below."
57
};
58
Sysout.createDialog( );
59
Sysout.printInstructions( instructions );
60
61
try {
62
Container c = new Container();
63
Button b = new Button("b");
64
c.setComponentZOrder(b, 0);
65
} catch (ArrayIndexOutOfBoundsException e) {
66
e.printStackTrace();
67
fail("The setComponentZOrder method used to insert a component caused the mixing code to throw the exception: " + e);
68
}
69
70
pass();
71
72
}//End init()
73
74
75
76
/*****************************************************
77
* Standard Test Machinery Section
78
* DO NOT modify anything in this section -- it's a
79
* standard chunk of code which has all of the
80
* synchronisation necessary for the test harness.
81
* By keeping it the same in all tests, it is easier
82
* to read and understand someone else's test, as
83
* well as insuring that all tests behave correctly
84
* with the test harness.
85
* There is a section following this for test-
86
* classes
87
******************************************************/
88
private static boolean theTestPassed = false;
89
private static boolean testGeneratedInterrupt = false;
90
private static String failureMessage = "";
91
92
private static Thread mainThread = null;
93
94
private static int sleepTime = 300000;
95
96
// Not sure about what happens if multiple of this test are
97
// instantiated in the same VM. Being static (and using
98
// static vars), it aint gonna work. Not worrying about
99
// it for now.
100
public static void main( String args[] ) throws InterruptedException
101
{
102
mainThread = Thread.currentThread();
103
try
104
{
105
init();
106
}
107
catch( TestPassedException e )
108
{
109
//The test passed, so just return from main and harness will
110
// interepret this return as a pass
111
return;
112
}
113
//At this point, neither test pass nor test fail has been
114
// called -- either would have thrown an exception and ended the
115
// test, so we know we have multiple threads.
116
117
//Test involves other threads, so sleep and wait for them to
118
// called pass() or fail()
119
try
120
{
121
Thread.sleep( sleepTime );
122
//Timed out, so fail the test
123
throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" );
124
}
125
catch (InterruptedException e)
126
{
127
//The test harness may have interrupted the test. If so, rethrow the exception
128
// so that the harness gets it and deals with it.
129
if( ! testGeneratedInterrupt ) throw e;
130
131
//reset flag in case hit this code more than once for some reason (just safety)
132
testGeneratedInterrupt = false;
133
134
if ( theTestPassed == false )
135
{
136
throw new RuntimeException( failureMessage );
137
}
138
}
139
140
}//main
141
142
public static synchronized void setTimeoutTo( int seconds )
143
{
144
sleepTime = seconds * 1000;
145
}
146
147
public static synchronized void pass()
148
{
149
Sysout.println( "The test passed." );
150
Sysout.println( "The test is over, hit Ctl-C to stop Java VM" );
151
//first check if this is executing in main thread
152
if ( mainThread == Thread.currentThread() )
153
{
154
//Still in the main thread, so set the flag just for kicks,
155
// and throw a test passed exception which will be caught
156
// and end the test.
157
theTestPassed = true;
158
throw new TestPassedException();
159
}
160
theTestPassed = true;
161
testGeneratedInterrupt = true;
162
mainThread.interrupt();
163
}//pass()
164
165
public static synchronized void fail()
166
{
167
//test writer didn't specify why test failed, so give generic
168
fail( "it just plain failed! :-)" );
169
}
170
171
public static synchronized void fail( String whyFailed )
172
{
173
Sysout.println( "The test failed: " + whyFailed );
174
Sysout.println( "The test is over, hit Ctl-C to stop Java VM" );
175
//check if this called from main thread
176
if ( mainThread == Thread.currentThread() )
177
{
178
//If main thread, fail now 'cause not sleeping
179
throw new RuntimeException( whyFailed );
180
}
181
theTestPassed = false;
182
testGeneratedInterrupt = true;
183
failureMessage = whyFailed;
184
mainThread.interrupt();
185
}//fail()
186
187
}// class setComponentZOrder
188
189
//This exception is used to exit from any level of call nesting
190
// when it's determined that the test has passed, and immediately
191
// end the test.
192
class TestPassedException extends RuntimeException
193
{
194
}
195
196
//*********** End Standard Test Machinery Section **********
197
198
199
//************ Begin classes defined for the test ****************
200
201
// if want to make listeners, here is the recommended place for them, then instantiate
202
// them in init()
203
204
/* Example of a class which may be written as part of a test
205
class NewClass implements anInterface
206
{
207
static int newVar = 0;
208
209
public void eventDispatched(AWTEvent e)
210
{
211
//Counting events to see if we get enough
212
eventCount++;
213
214
if( eventCount == 20 )
215
{
216
//got enough events, so pass
217
218
setComponentZOrder.pass();
219
}
220
else if( tries == 20 )
221
{
222
//tried too many times without getting enough events so fail
223
224
setComponentZOrder.fail();
225
}
226
227
}// eventDispatched()
228
229
}// NewClass class
230
231
*/
232
233
234
//************** End classes defined for the test *******************
235
236
237
238
239
/****************************************************
240
Standard Test Machinery
241
DO NOT modify anything below -- it's a standard
242
chunk of code whose purpose is to make user
243
interaction uniform, and thereby make it simpler
244
to read and understand someone else's test.
245
****************************************************/
246
247
/**
248
This is part of the standard test machinery.
249
It creates a dialog (with the instructions), and is the interface
250
for sending text messages to the user.
251
To print the instructions, send an array of strings to Sysout.createDialog
252
WithInstructions method. Put one line of instructions per array entry.
253
To display a message for the tester to see, simply call Sysout.println
254
with the string to be displayed.
255
This mimics System.out.println but works within the test harness as well
256
as standalone.
257
*/
258
259
class Sysout
260
{
261
private static TestDialog dialog;
262
263
public static void createDialogWithInstructions( String[] instructions )
264
{
265
dialog = new TestDialog( new Frame(), "Instructions" );
266
dialog.printInstructions( instructions );
267
dialog.setVisible(true);
268
println( "Any messages for the tester will display here." );
269
}
270
271
public static void createDialog( )
272
{
273
dialog = new TestDialog( new Frame(), "Instructions" );
274
String[] defInstr = { "Instructions will appear here. ", "" } ;
275
dialog.printInstructions( defInstr );
276
dialog.setVisible(true);
277
println( "Any messages for the tester will display here." );
278
}
279
280
281
public static void printInstructions( String[] instructions )
282
{
283
dialog.printInstructions( instructions );
284
}
285
286
287
public static void println( String messageIn )
288
{
289
dialog.displayMessage( messageIn );
290
System.out.println(messageIn);
291
}
292
293
}// Sysout class
294
295
/**
296
This is part of the standard test machinery. It provides a place for the
297
test instructions to be displayed, and a place for interactive messages
298
to the user to be displayed.
299
To have the test instructions displayed, see Sysout.
300
To have a message to the user be displayed, see Sysout.
301
Do not call anything in this dialog directly.
302
*/
303
class TestDialog extends Dialog
304
{
305
306
TextArea instructionsText;
307
TextArea messageText;
308
int maxStringLength = 80;
309
310
//DO NOT call this directly, go through Sysout
311
public TestDialog( Frame frame, String name )
312
{
313
super( frame, name );
314
int scrollBoth = TextArea.SCROLLBARS_BOTH;
315
instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
316
add( "North", instructionsText );
317
318
messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
319
add("Center", messageText);
320
321
pack();
322
323
setVisible(true);
324
}// TestDialog()
325
326
//DO NOT call this directly, go through Sysout
327
public void printInstructions( String[] instructions )
328
{
329
//Clear out any current instructions
330
instructionsText.setText( "" );
331
332
//Go down array of instruction strings
333
334
String printStr, remainingStr;
335
for( int i=0; i < instructions.length; i++ )
336
{
337
//chop up each into pieces maxSringLength long
338
remainingStr = instructions[ i ];
339
while( remainingStr.length() > 0 )
340
{
341
//if longer than max then chop off first max chars to print
342
if( remainingStr.length() >= maxStringLength )
343
{
344
//Try to chop on a word boundary
345
int posOfSpace = remainingStr.
346
lastIndexOf( ' ', maxStringLength - 1 );
347
348
if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
349
350
printStr = remainingStr.substring( 0, posOfSpace + 1 );
351
remainingStr = remainingStr.substring( posOfSpace + 1 );
352
}
353
//else just print
354
else
355
{
356
printStr = remainingStr;
357
remainingStr = "";
358
}
359
360
instructionsText.append( printStr + "\n" );
361
362
}// while
363
364
}// for
365
366
}//printInstructions()
367
368
//DO NOT call this directly, go through Sysout
369
public void displayMessage( String messageIn )
370
{
371
messageText.append( messageIn + "\n" );
372
System.out.println(messageIn);
373
}
374
375
}// TestDialog class
376
377