< prev index next >

test/java/awt/Focus/DisposedWindow/DisposeDialogNotActivateOwnerTest/DisposeDialogNotActivateOwnerTest.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * 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
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.

@@ -20,239 +20,105 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
 
 /*
-  test
-  @bug       6386592
+  @test
+  @key headful
+  @bug 6386592 8160766
   @summary   Tests that disposing a dialog doesn't activate its invisible owner.
-  @author    anton.tarasov@sun.com: area=awt.focus
-  @run       applet DisposeDialogNotActivateOwnerTest.html
 */
 
-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 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."
-            });
 
-        frame.setBounds(800, 50, 200, 100);
-        frame.add(frameButton);
-        dialog.setBounds(800, 300, 200, 100);
-    }
-
-    public void start() {
+        dialogInvisibleOwner = new Frame("Dialog Invisible Owner Frame");
+        dialog = new Dialog(dialogInvisibleOwner, "Owned Dialog");
 
+        frame = new Frame("A Frame");
+        frameButton = new Button("button");
         frameButton.addFocusListener(new FocusAdapter() {
                 public void focusGained(FocusEvent e) {
-                    passed = true;
+                buttonReceivedFocus = true;
                 }
             });
+        frame.setBounds(0, 0, 400, 200);
+        frame.add(frameButton);
+        dialog.setBounds(100, 50, 200, 100);
+    }
 
+    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) {
-        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));
+    public void dispose() {
+        frame.dispose();
+        dialog.dispose();
+        dialogInvisibleOwner.dispose();
         }
 
+    void clickOnTitle(Component c) {
+        Point p = c.getLocationOnScreen();
+        Dimension d = c.getSize();
+        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
< prev index next >