--- a/jdk/test/java/awt/Focus/DisposedWindow/DisposeDialogNotActivateOwnerTest/DisposeDialogNotActivateOwnerTest.java Fri Nov 04 17:27:56 2016 +0530
+++ b/jdk/test/java/awt/Focus/DisposedWindow/DisposeDialogNotActivateOwnerTest/DisposeDialogNotActivateOwnerTest.java Fri Nov 04 21:55:19 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2016, 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
@@ -22,237 +22,103 @@
*/
/*
- test
- @bug 6386592
- @summary Tests that disposing a dialog doesn't activate its invisible owner.
- @author anton.tarasov@sun.com: area=awt.focus
- @run applet DisposeDialogNotActivateOwnerTest.html
+ @test
+ @key headful
+ @bug 6386592 8160766
+ @summary Tests that disposing a dialog doesn't activate its invisible owner.
*/
-import java.awt.*;
-import java.awt.event.*;
-import java.applet.Applet;
+import java.awt.AWTException;
+import java.awt.Button;
+import java.awt.Component;
+import java.awt.Dialog;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.Point;
+import java.awt.Robot;
+import java.awt.event.FocusAdapter;
+import java.awt.event.FocusEvent;
+import java.awt.event.InputEvent;
-public class DisposeDialogNotActivateOwnerTest extends Applet {
+public class DisposeDialogNotActivateOwnerTest {
Robot robot;
-
- Frame frame = new Frame("Owner Frame");
- Dialog dialog = new Dialog(new Frame(), "Owned Dialog");
- Button frameButton = new Button("button");
-
- static boolean passed = false;
+ Frame frame;
+ Frame dialogInvisibleOwner;
+ Dialog dialog;
+ Button frameButton;
+ static volatile boolean buttonReceivedFocus = false;
public static void main(String[] args) {
- DisposeDialogNotActivateOwnerTest app = new DisposeDialogNotActivateOwnerTest();
- app.init();
- app.start();
+ DisposeDialogNotActivateOwnerTest test =
+ new DisposeDialogNotActivateOwnerTest();
+ test.performTest();
+ test.dispose();
}
- public void init() {
+ public DisposeDialogNotActivateOwnerTest() {
try {
robot = new Robot();
} catch (AWTException e) {
- throw new RuntimeException("Error: unable to create robot", e);
+ throw new RuntimeException("Error: unable to create robot");
}
- // Create instructions for the user here, as well as set up
- // the environment -- set the layout manager, add buttons,
- // etc.
- this.setLayout (new BorderLayout ());
- Sysout.createDialogWithInstructions(new String[]
- {"This is automatic test. Simply wait until it is done."
- });
+
+ dialogInvisibleOwner = new Frame("Dialog Invisible Owner Frame");
+ dialog = new Dialog(dialogInvisibleOwner, "Owned Dialog");
- frame.setBounds(800, 50, 200, 100);
+ frame = new Frame("A Frame");
+ frameButton = new Button("button");
+ frameButton.addFocusListener(new FocusAdapter() {
+ public void focusGained(FocusEvent e) {
+ buttonReceivedFocus = true;
+ }
+ });
+ frame.setBounds(0, 0, 400, 200);
frame.add(frameButton);
- dialog.setBounds(800, 300, 200, 100);
+ dialog.setBounds(100, 50, 200, 100);
}
- public void start() {
-
- frameButton.addFocusListener(new FocusAdapter() {
- public void focusGained(FocusEvent e) {
- passed = true;
- }
- });
-
+ public void performTest() {
frame.setVisible(true);
robot.waitForIdle();
-
- // make sure the frame is focused
- clickOn(frame);
+ clickOnTitle(frame);
+ robot.waitForIdle();
+ robot.delay(200);
if (!frame.isFocused()) {
- throw new RuntimeException("Error: a frame didn't get initial focus.");
+ dispose();
+ throw new RuntimeException("Error: frame didn't get initial focus");
}
dialog.setVisible(true);
robot.waitForIdle();
-
- // make sure the dialog is focused
+ robot.delay(200);
if (!dialog.isFocused()) {
- throw new RuntimeException("Error: a dialog didn't get initial focus.");
+ dispose();
+ throw new RuntimeException("Error: dialog didn't get initial focus");
}
dialog.dispose();
robot.waitForIdle();
-
- if (passed) {
- Sysout.println("Test passed.");
- } else {
- throw new RuntimeException("Test failed: a dialog activates invisible owner when disposed!");
+ robot.delay(200);
+ if (!buttonReceivedFocus) {
+ dispose();
+ throw new RuntimeException(
+ "Test failed: Dialog activates invisible owner when disposed!");
}
}
- void clickOn(Component c) {
+ public void dispose() {
+ frame.dispose();
+ dialog.dispose();
+ dialogInvisibleOwner.dispose();
+ }
+
+ void clickOnTitle(Component c) {
Point p = c.getLocationOnScreen();
Dimension d = c.getSize();
-
- if (c instanceof Frame) {
- robot.mouseMove(p.x + (int)(d.getWidth()/2), p.y + ((Frame)c).getInsets().top/2);
- } else {
- robot.mouseMove(p.x + (int)(d.getWidth()/2), p.y + (int)(d.getHeight()/2));
- }
-
+ robot.mouseMove(p.x + (int)(d.getWidth() / 2),
+ p.y + ((Frame)c).getInsets().top / 2);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.delay(20);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
-
- robot.waitForIdle();
}
}
-
-/****************************************************
- 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
-{
- 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();
-
- setVisible(true);
- }// 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