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