8068228: Test closed/java/awt/Mouse/MaximizedFrameTest/MaximizedFrameTest fails with GTKLookAndFeel
authorssadetsky
Tue, 01 Dec 2015 19:07:45 +0300
changeset 34789 cb57420300a7
parent 34788 176e7a6529d4
child 34790 9c21084e8cb9
8068228: Test closed/java/awt/Mouse/MaximizedFrameTest/MaximizedFrameTest fails with GTKLookAndFeel Reviewed-by: ssadetsky, arapte
jdk/test/java/awt/Mouse/MaximizedFrameTest/MaximizedFrameTest.html
jdk/test/java/awt/Mouse/MaximizedFrameTest/MaximizedFrameTest.java
--- a/jdk/test/java/awt/Mouse/MaximizedFrameTest/MaximizedFrameTest.html	Tue Dec 01 19:02:50 2015 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2008, 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 6176814
-  @summary Metalworks frame maximizes after the move
-  @author Andrei.Dmitriev.Com area=Event
-  @run applet MaximizedFrameTest.html
-  -->
-<head>
-<title>  </title>
-</head>
-<body>
-
-<h1>bug 6176814<br>Bug ID:  6176814 </h1>
-
-<p> This is an AUTOMATIC test, simply wait for completion </p>
-
-<APPLET CODE="MaximizedFrameTest.class" WIDTH=200 HEIGHT=200></APPLET>
-</body>
-</html>
--- a/jdk/test/java/awt/Mouse/MaximizedFrameTest/MaximizedFrameTest.java	Tue Dec 01 19:02:50 2015 +0300
+++ b/jdk/test/java/awt/Mouse/MaximizedFrameTest/MaximizedFrameTest.java	Tue Dec 01 19:07:45 2015 +0300
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2015 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,91 +22,149 @@
  */
 
 /*
-  test
-  @bug 6176814
-  @summary  Metalworks frame maximizes after the move
-  @author Andrei.Dmitriev area=Event
-  @run applet MaximizedFrameTest.html
-*/
+ @test
+ @bug 6176814 8132766
+ @summary Metalworks frame maximizes after the move
+ @run main MaximizedFrameTest
+ */
 
-import java.applet.Applet;
-import javax.swing.*;
-import java.awt.event.*;
-import java.awt.*;
+import java.awt.AWTException;
+import java.awt.Component;
+import java.awt.Point;
+import java.awt.Robot;
+import java.awt.event.InputEvent;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.JFrame;
+import javax.swing.JLayeredPane;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.UnsupportedLookAndFeelException;
 
-public class MaximizedFrameTest extends Applet
-{
-    final int ITERATIONS_COUNT = 20;
-    Robot robot;
-    Point framePosition;
-    Point newFrameLocation;
-    JFrame  frame;
-    Rectangle gcBounds;
-    public static Object LOCK = new Object();
+public class MaximizedFrameTest {
+
+    final static int ITERATIONS_COUNT = 5;
+    private static JFrame frame;
+    private static Point tempMousePosition;
+    private static Component titleComponent;
 
-    public void init()
-    {
-        String[] instructions =
-        {
-            "This is an AUTOMATIC test",
-            "simply wait until it is done"
-        };
+    public void init() {
         JFrame.setDefaultLookAndFeelDecorated(true);
+
+        try {
+            UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
+        } catch (ClassNotFoundException | InstantiationException |
+                IllegalAccessException | UnsupportedLookAndFeelException ex) {
+            throw new RuntimeException("Test Failed. MetalLookAndFeel not set "
+                    + "for frame");
+        }
+
         frame = new JFrame("JFrame Maximization Test");
         frame.pack();
         frame.setSize(450, 260);
-    }//End  init()
+        frame.setVisible(true);
+    }
+
+    public void getTitleComponent() throws Exception {
+
+        SwingUtilities.invokeAndWait(new Runnable() {
+
+            @Override
+            public void run() {
+                JLayeredPane lPane = frame.getLayeredPane();
+                boolean titleFound = false;
+
+                for (int j = 0; j < lPane.getComponentsInLayer(
+                    JLayeredPane.FRAME_CONTENT_LAYER.intValue()).length; j++) {
+
+                    titleComponent = lPane.getComponentsInLayer(
+                    JLayeredPane.FRAME_CONTENT_LAYER.intValue())[j];
 
-    public void start ()
-    {
-        frame.setVisible(true);
-        validate();
-        JLayeredPane lPane = frame.getLayeredPane();
-        //        System.out.println("JFrame's LayeredPane " + lPane );
-        Component titleComponent = null;
-        boolean titleFound = false;
-        for (int j=0; j < lPane.getComponentsInLayer(JLayeredPane.FRAME_CONTENT_LAYER.intValue()).length; j++){
-            titleComponent = lPane.getComponentsInLayer(JLayeredPane.FRAME_CONTENT_LAYER.intValue())[j];
-            if (titleComponent.getClass().getName().equals("javax.swing.plaf.metal.MetalTitlePane")){
-                titleFound = true;
-                break;
+                    if (titleComponent.getClass().getName().equals(
+                        "javax.swing.plaf.metal.MetalTitlePane")) {
+
+                        titleFound = true;
+                        break;
+                    }
+                }
+
+                if (!titleFound) {
+                    try {
+                        dispose();
+                    } catch (Exception ex) {
+                        Logger.getLogger(MaximizedFrameTest.class.getName())
+                                .log(Level.SEVERE, null, ex);
+                    }
+                    throw new RuntimeException("Test Failed. Unable to "
+                            + "determine title component");
+                }
             }
-        }
-        if ( !titleFound ){
-            throw new RuntimeException("Test Failed. Unable to determine title's size.");
-        }
-        //--------------------------------
-        // it is sufficient to get maximized Frame only once.
-        Point tempMousePosition;
-        framePosition = frame.getLocationOnScreen();
+        });
+    }
+
+    public void doMaximizeFrameTest() throws Exception {
+
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                Point framePosition = frame.getLocationOnScreen();
+
+                tempMousePosition = new Point(framePosition.x
+                        + frame.getWidth() / 2, framePosition.y
+                                + titleComponent.getHeight() / 2);
+            }
+        });
+
         try {
-            robot = new Robot();
-            tempMousePosition = new Point(framePosition.x +
-                                          frame.getWidth()/2,
-                                          framePosition.y +
-                                          titleComponent.getHeight()/2);
+            Robot robot = new Robot();
             robot.mouseMove(tempMousePosition.x, tempMousePosition.y);
-            for (int iteration=0; iteration < ITERATIONS_COUNT; iteration++){
+            robot.waitForIdle();
+
+            for (int iteration = 0; iteration < ITERATIONS_COUNT; iteration++) {
                 robot.mousePress(InputEvent.BUTTON1_MASK);
-                gcBounds =
-                    GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getConfigurations()[0].getBounds();
-                //Moving a mouse pointer less than a few pixels
-                //leads to rising a double click event.
-                //We have to use exceeded the AWT_MULTICLICK_SMUDGE
-                //const value (which is 4 by default on GNOME) to test that.
+                robot.waitForIdle();
+
+                // Moving a mouse pointer less than a few pixels
+                // leads to rising a double click event.
+                // We have to use exceeded the AWT_MULTICLICK_SMUDGE
+                // const value (which is 4 by default on GNOME) to test that.
                 tempMousePosition.x += 5;
                 robot.mouseMove(tempMousePosition.x, tempMousePosition.y);
-                robot.delay(70);
+                robot.waitForIdle();
                 robot.mouseRelease(InputEvent.BUTTON1_MASK);
-                if ( frame.getExtendedState() != 0 ){
-                    throw new RuntimeException ("Test failed. JFrame was maximized. ExtendedState is : "+frame.getExtendedState());
+                robot.waitForIdle();
+
+                if (frame.getExtendedState() != 0) {
+                    dispose();
+                    throw new RuntimeException("Test failed. JFrame was "
+                            + "maximized. ExtendedState is : "
+                            + frame.getExtendedState());
                 }
-                robot.delay(500);
-            } //for iteration
+            }
+        } catch (AWTException e) {
+            dispose();
+            throw new RuntimeException("Test Failed. AWTException thrown.");
+        }
+        System.out.println("Test passed.");
+    }
 
-            }catch(AWTException e) {
-                throw new RuntimeException("Test Failed. AWTException thrown.");
+    private void dispose() throws Exception {
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                if (null != frame) {
+                    frame.dispose();
+                }
             }
-        System.out.println("Test passed.");
-    }// start()
-}// class
+        });
+    }
+
+    public static void main(String[] args) throws Exception {
+
+        MaximizedFrameTest maximizedFrameTest = new MaximizedFrameTest();
+        maximizedFrameTest.init();
+        maximizedFrameTest.getTitleComponent();
+        maximizedFrameTest.doMaximizeFrameTest();
+        maximizedFrameTest.dispose();
+    }
+}