java/awt/KeyboardFocusmanager/TypeAhead/FreezeTest/FreezeTest.java
Print this page
@@ -1,34 +1,61 @@
/*
-test
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/*
+@test
@bug 4799136
@summary Tests that type-ahead for dialog works and doesn't block program
@author Dmitry.Cherepanov@SUN.COM area=awt.focus
-@run applet FreezeTest.html
+@run main FreezeTest
*/
-import java.applet.Applet;
import java.awt.*;
import java.lang.reflect.InvocationTargetException;
import java.awt.event.*;
-import sun.awt.SunToolkit;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
/*
* Tests that type-ahead doesn't block program.
*/
-public class FreezeTest extends Applet
+public class FreezeTest
{
static Frame f;
static Button b;
static Dialog d;
static TextField tf;
- static Semaphore robotSema = new Semaphore();
+ static CountDownLatch robotLatch = new CountDownLatch(1);
static Robot robot;
static int click_count = 100;
static int deliver_count = 0;
+ public static void main(String args[]) throws Exception {
+ FreezeTest test = new FreezeTest();
+ test.init();
+ test.start();
+ }
public void init()
{
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
public void eventDispatched(AWTEvent e) {
if (e instanceof KeyEvent){
@@ -42,11 +69,10 @@
System.err.println(e.toString());
}
}
}, AWTEvent.KEY_EVENT_MASK | AWTEvent.FOCUS_EVENT_MASK);
- this.setLayout (new BorderLayout ());
f = new Frame("frame");
b = new Button("press");
d = new Dialog(f, "dialog", true);
tf = new TextField("");
@@ -57,11 +83,11 @@
f.pack();
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.err.println(e.toString()+","+e.getWhen());
System.err.println("B pressed");
- robotSema.raise();
+ robotLatch.countDown();
EventQueue.invokeLater(new Runnable() {
public void run() {
waitTillShown(d);
FreezeTest.this.d.toFront();
@@ -72,49 +98,40 @@
}
});
}//End init()
- public void start ()
+ public void start () throws Exception
{
- //Get things going. Request focus, set size, et cetera
- setSize (200,200);
- setVisible(true);
- validate();
- try {
robot = new Robot();
- } catch (Exception e) {
- throw new RuntimeException("Can't create robot:" + e);
- }
f.setVisible(true);
waitTillShown(b);
System.err.println("b is shown");
f.toFront();
moveMouseOver(f);
- ((SunToolkit)Toolkit.getDefaultToolkit()).realSync();
+ robot.waitForIdle();
makeFocused(b);
- ((SunToolkit)Toolkit.getDefaultToolkit()).realSync();
+ robot.waitForIdle();
System.err.println("b is focused");
robot.keyPress(KeyEvent.VK_SPACE);
robot.keyRelease(KeyEvent.VK_SPACE);
- try {
- robotSema.doWait(1000);
- } catch (InterruptedException ie) {
- throw new RuntimeException("Interrupted!");
+ boolean ok = robotLatch.await(1, TimeUnit.SECONDS);
+ if(!ok) {
+ throw new RuntimeException("Was B button pressed?");
}
for (int i = 0; i < click_count; i++){
System.err.println("click# "+(i+1));
robot.keyPress(KeyEvent.VK_SPACE);
robot.delay(10);
robot.keyRelease(KeyEvent.VK_SPACE);
robot.delay(50);
}
- ((SunToolkit)Toolkit.getDefaultToolkit()).realSync();
+ robot.waitForIdle();
int deliver_count = this.deliver_count;
int expected_count = (click_count + 1) * 3;
if (deliver_count != expected_count){
@@ -197,144 +214,6 @@
}
public synchronized boolean getState() {
return state;
}
}
-}// class TestDialogTypeAhead
-
-
-/****************************************************
- Standard Test Machinery
- DO NOT modify anything below -- it's a standard
- chunk of code whose purpose is to make user
- interaction uniform, and thereby make it simpler
- to read and understand someone else's test.
- ****************************************************/
-
-/**
- This is part of the standard test machinery.
- It creates a dialog (with the instructions), and is the interface
- for sending text messages to the user.
- To print the instructions, send an array of strings to Sysout.createDialog
- WithInstructions method. Put one line of instructions per array entry.
- To display a message for the tester to see, simply call Sysout.println
- with the string to be displayed.
- This mimics System.out.println but works within the test harness as well
- as standalone.
- */
-
-class Sysout
-{
- private static TestDialog dialog;
-
- public static void createDialogWithInstructions( String[] instructions )
- {
- dialog = new TestDialog( new Frame(), "Instructions" );
- dialog.printInstructions( instructions );
- dialog.setVisible(true);
- println( "Any messages for the tester will display here." );
- }
-
- public static void createDialog( )
- {
- dialog = new TestDialog( new Frame(), "Instructions" );
- String[] defInstr = { "Instructions will appear here. ", "" } ;
- dialog.printInstructions( defInstr );
- dialog.setVisible(true);
- println( "Any messages for the tester will display here." );
- }
-
-
- public static void printInstructions( String[] instructions )
- {
- dialog.printInstructions( instructions );
- }
-
-
- public static void println( String messageIn )
- {
- dialog.displayMessage( messageIn );
- }
-
-}// Sysout class
-
-/**
- This is part of the standard test machinery. It provides a place for the
- test instructions to be displayed, and a place for interactive messages
- to the user to be displayed.
- To have the test instructions displayed, see Sysout.
- To have a message to the user be displayed, see Sysout.
- Do not call anything in this dialog directly.
- */
-class TestDialog extends Dialog
-{
-
- TextArea instructionsText;
- TextArea messageText;
- int maxStringLength = 80;
-
- //DO NOT call this directly, go through Sysout
- public TestDialog( Frame frame, String name )
- {
- super( frame, name );
- int scrollBoth = TextArea.SCROLLBARS_BOTH;
- instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
- add( "North", instructionsText );
-
- messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
- add("Center", messageText);
-
- pack();
-
- show();
- }// TestDialog()
-
- //DO NOT call this directly, go through Sysout
- public void printInstructions( String[] instructions )
- {
- //Clear out any current instructions
- instructionsText.setText( "" );
-
- //Go down array of instruction strings
-
- String printStr, remainingStr;
- for( int i=0; i < instructions.length; i++ )
- {
- //chop up each into pieces maxSringLength long
- remainingStr = instructions[ i ];
- while( remainingStr.length() > 0 )
- {
- //if longer than max then chop off first max chars to print
- if( remainingStr.length() >= maxStringLength )
- {
- //Try to chop on a word boundary
- int posOfSpace = remainingStr.
- lastIndexOf( ' ', maxStringLength - 1 );
-
- if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
-
- printStr = remainingStr.substring( 0, posOfSpace + 1 );
- remainingStr = remainingStr.substring( posOfSpace + 1 );
- }
- //else just print
- else
- {
- printStr = remainingStr;
- remainingStr = "";
- }
-
- instructionsText.append( printStr + "\n" );
-
- }// while
-
- }// for
-
- }//printInstructions()
-
- //DO NOT call this directly, go through Sysout
- public void displayMessage( String messageIn )
- {
- messageText.append( messageIn + "\n" );
- System.out.println(messageIn);
- }
-
-}// TestDialog class
+}