< prev index next >

test/java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 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.

@@ -21,91 +21,100 @@
  * questions.
  */
 
 import test.java.awt.regtesthelpers.Util;
 
-import javax.swing.*;
-import java.awt.*;
+import java.awt.Frame;
+import java.awt.Point;
+import java.awt.Robot;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseMotionAdapter;
+import java.awt.event.MouseAdapter;
 
-/**
+/*
  * @test
- * @bug 8012026
- * @summary Component.getMousePosition() does not work in an applet on MacOS
- * @author Petr Pchelko
+ * @bug 8012026 8027154
+ * @summary Component.getMousePosition() does not work in an applet on MacOS.
  * @library ../../regtesthelpers
  * @build Util
  * @compile GetMousePositionWithPopup.java
  * @run main/othervm GetMousePositionWithPopup
  */
 
 public class GetMousePositionWithPopup {
 
     private static Frame frame1;
     private static Frame frame2;
+    private static Robot robot = null;
+    private static volatile boolean verified = false;
 
     public static void main(String[] args) throws Exception {
         try {
-        Robot r = Util.createRobot();
-        r.mouseMove(0, 0);
-        Util.waitForIdle(null);
+            frame1 = new Frame("frame1");
+            frame1.setBounds(100, 100, 100, 100);
+            frame2 = new Frame("frame2");
+            frame2.setBounds(120, 120, 120, 120);
+            frame1.setVisible(true);
+            frame2.setVisible(true);
+            robot = Util.createRobot();
+            robot.mouseMove(0, 0);
+            Util.waitForIdle(robot);
 
-        SwingUtilities.invokeAndWait(new Runnable() {
+            frame2.addMouseMotionListener(new MouseMotionAdapter() {
             @Override
-            public void run() {
-                constructTestUI();
+                public void mouseMoved(MouseEvent e) {
+                    if (!verified) {
+                        verifyMousePosition();
+                    }
             }
         });
 
-        Util.waitForIdle(null);
-        r.mouseMove(149, 149);
-        Util.waitForIdle(null);
-        r.mouseMove(150, 150);
-        Util.waitForIdle(null);
-
-        } finally {
-            SwingUtilities.invokeLater(new Runnable() {
+            frame2.addMouseListener(new MouseAdapter() {
                 @Override
-                public void run() {
-                    frame1.dispose();
-                    frame2.dispose();
+                public void mouseEntered(MouseEvent e) {
+                    if (!verified) {
+                        verifyMousePosition();
+                    }
                 }
             });
+
+            Util.waitForIdle(robot);
+            Point loc = frame2.getLocationOnScreen();
+            robot.mouseMove(loc.x + 30, loc.y + 30);
+            Util.waitForIdle(robot);
+            robot.delay(200);
+            if (!verified) {
+                throw new RuntimeException(
+                    "No mouse events generated for frame");
         }
+        } finally {
+            frame2.dispose();
+            frame1.dispose();
+            frame1 = null;
+            frame2 = null;
     }
-
-    private static void constructTestUI() {
-        frame1 = new Frame();
-        frame1.setBounds(100, 100, 100, 100);
-        frame1.addMouseMotionListener(new MouseMotionAdapter() {
-
-            private boolean shown = false;
-
-            @Override
-            public void mouseMoved(MouseEvent e) {
-                if (shown) {
-                    return;
                 }
 
-                shown = true;
-
-                frame2 = new Frame();
-                frame2.setBounds(120, 120, 120, 120);
-                frame2.setVisible(true);
-
-                Point positionInFrame2 = frame2.getMousePosition();
-                if (positionInFrame2.x != 30 || positionInFrame2.y != 30) {
-                    throw new RuntimeException("Wrong position reported. Should be [30, 30] but was [" +
-                            positionInFrame2.x + ", " + positionInFrame2.y + "]");
+    public static void verifyMousePosition() {
+        verified = true;
+        Point posInFrm2 = frame2.getMousePosition();
+        if (!(isValueInRange(posInFrm2.x) && isValueInRange(posInFrm2.y))) {
+            throw new RuntimeException("Wrong position reported. Should be in"
+                + " range from [25, 25] to [35, 35] but was ["
+                + posInFrm2.x + ", " + posInFrm2.y + "]");
                 }
 
                 Point positionInFrame1 = frame1.getMousePosition();
                 if (positionInFrame1 != null) {
-                    throw new RuntimeException("Wrong position reported. Should be null");
+            throw new RuntimeException(
+                "Wrong position reported. Should be null");
                 }
-
             }
-        });
-        frame1.setVisible(true);
+
+    public static boolean isValueInRange(int value) {
+        /*
+         * Since all operating systems do not return exact value, hence range
+         * is used.
+         */
+        return value >= 25 && value <= 35;
     }
 }
< prev index next >