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/Frame/DisposeStressTest/DisposeStressTest.java
38828 views
1
/*
2
* Copyright (c) 2014, 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
/*
26
test
27
@bug 4051487 4145670 8062021
28
@summary Tests that disposing of an empty Frame or a Frame with a MenuBar
29
while it is being created does not crash the VM.
30
@author dpm area=Threads
31
@run applet/timeout=7200 DisposeStressTest.html
32
*/
33
34
// Note there is no @ in front of test above. This is so that the
35
// harness will not mistake this file as a test file. It should
36
// only see the html file as a test file. (the harness runs all
37
// valid test files, so it would run this test twice if this file
38
// were valid as well as the html file.)
39
// Also, note the area= after Your Name in the author tag. Here, you
40
// should put which functional area the test falls in. See the
41
// AWT-core home page -> test areas and/or -> AWT team for a list of
42
// areas.
43
// Note also the 'DisposeStressTest.html' in the run tag. This should
44
// be changed to the name of the test.
45
46
47
/**
48
* DisposeStressTest.java
49
*
50
* summary:
51
*/
52
53
import java.applet.Applet;
54
import java.awt.*;
55
56
57
//Automated tests should run as applet tests if possible because they
58
// get their environments cleaned up, including AWT threads, any
59
// test created threads, and any system resources used by the test
60
// such as file descriptors. (This is normally not a problem as
61
// main tests usually run in a separate VM, however on some platforms
62
// such as the Mac, separate VMs are not possible and non-applet
63
// tests will cause problems). Also, you don't have to worry about
64
// synchronisation stuff in Applet tests they way you do in main
65
// tests...
66
67
68
public class DisposeStressTest extends Applet
69
{
70
//Declare things used in the test, like buttons and labels here
71
72
public void init()
73
{
74
//Create instructions for the user here, as well as set up
75
// the environment -- set the layout manager, add buttons,
76
// etc.
77
78
this.setLayout (new BorderLayout ());
79
80
String[] instructions =
81
{
82
"This is an AUTOMATIC test",
83
"simply wait until it is done"
84
};
85
Sysout.createDialog( );
86
Sysout.printInstructions( instructions );
87
88
}//End init()
89
90
public void start ()
91
{
92
for (int i = 0; i < 1000; i++) {
93
Frame f = new Frame();
94
f.setBounds(10, 10, 10, 10);
95
f.show();
96
f.dispose();
97
98
Frame f2 = new Frame();
99
f2.setBounds(10, 10, 100, 100);
100
MenuBar bar = new MenuBar();
101
Menu menu = new Menu();
102
menu.add(new MenuItem("foo"));
103
bar.add(menu);
104
f2.setMenuBar(bar);
105
f2.show();
106
f2.dispose();
107
}
108
}// start()
109
110
}// class DisposeStressTest
111
112
113
/****************************************************
114
Standard Test Machinery
115
DO NOT modify anything below -- it's a standard
116
chunk of code whose purpose is to make user
117
interaction uniform, and thereby make it simpler
118
to read and understand someone else's test.
119
****************************************************/
120
121
/**
122
This is part of the standard test machinery.
123
It creates a dialog (with the instructions), and is the interface
124
for sending text messages to the user.
125
To print the instructions, send an array of strings to Sysout.createDialog
126
WithInstructions method. Put one line of instructions per array entry.
127
To display a message for the tester to see, simply call Sysout.println
128
with the string to be displayed.
129
This mimics System.out.println but works within the test harness as well
130
as standalone.
131
*/
132
133
class Sysout
134
{
135
private static TestDialog dialog;
136
137
public static void createDialogWithInstructions( String[] instructions )
138
{
139
dialog = new TestDialog( new Frame(), "Instructions" );
140
dialog.printInstructions( instructions );
141
dialog.show();
142
println( "Any messages for the tester will display here." );
143
}
144
145
public static void createDialog( )
146
{
147
dialog = new TestDialog( new Frame(), "Instructions" );
148
String[] defInstr = { "Instructions will appear here. ", "" } ;
149
dialog.printInstructions( defInstr );
150
dialog.show();
151
println( "Any messages for the tester will display here." );
152
}
153
154
155
public static void printInstructions( String[] instructions )
156
{
157
dialog.printInstructions( instructions );
158
}
159
160
161
public static void println( String messageIn )
162
{
163
dialog.displayMessage( messageIn );
164
}
165
166
}// Sysout class
167
168
/**
169
This is part of the standard test machinery. It provides a place for the
170
test instructions to be displayed, and a place for interactive messages
171
to the user to be displayed.
172
To have the test instructions displayed, see Sysout.
173
To have a message to the user be displayed, see Sysout.
174
Do not call anything in this dialog directly.
175
*/
176
class TestDialog extends Dialog
177
{
178
179
TextArea instructionsText;
180
TextArea messageText;
181
int maxStringLength = 80;
182
183
//DO NOT call this directly, go through Sysout
184
public TestDialog( Frame frame, String name )
185
{
186
super( frame, name );
187
int scrollBoth = TextArea.SCROLLBARS_BOTH;
188
instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
189
add( "North", instructionsText );
190
191
messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
192
add("South", messageText);
193
194
pack();
195
196
show();
197
}// TestDialog()
198
199
//DO NOT call this directly, go through Sysout
200
public void printInstructions( String[] instructions )
201
{
202
//Clear out any current instructions
203
instructionsText.setText( "" );
204
205
//Go down array of instruction strings
206
207
String printStr, remainingStr;
208
for( int i=0; i < instructions.length; i++ )
209
{
210
//chop up each into pieces maxSringLength long
211
remainingStr = instructions[ i ];
212
while( remainingStr.length() > 0 )
213
{
214
//if longer than max then chop off first max chars to print
215
if( remainingStr.length() >= maxStringLength )
216
{
217
//Try to chop on a word boundary
218
int posOfSpace = remainingStr.
219
lastIndexOf( ' ', maxStringLength - 1 );
220
221
if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
222
223
printStr = remainingStr.substring( 0, posOfSpace + 1 );
224
remainingStr = remainingStr.substring( posOfSpace + 1 );
225
}
226
//else just print
227
else
228
{
229
printStr = remainingStr;
230
remainingStr = "";
231
}
232
233
instructionsText.append( printStr + "\n" );
234
235
}// while
236
237
}// for
238
239
}//printInstructions()
240
241
//DO NOT call this directly, go through Sysout
242
public void displayMessage( String messageIn )
243
{
244
messageText.append( messageIn + "\n" );
245
}
246
247
}// TestDialog class
248
249