--- old/test/java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java 2016-04-27 17:53:45.123506459 +0530 +++ new/test/java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java 2016-04-27 17:53:44.927506459 +0530 @@ -1,5 +1,5 @@ /* - * 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 @@ -23,16 +23,17 @@ 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 @@ -43,69 +44,77 @@ 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); - - SwingUtilities.invokeAndWait(new Runnable() { - @Override - public void run() { - constructTestUI(); - } - }); - - Util.waitForIdle(null); - r.mouseMove(149, 149); - Util.waitForIdle(null); - r.mouseMove(150, 150); - 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); - } finally { - SwingUtilities.invokeLater(new Runnable() { + frame2.addMouseMotionListener(new MouseMotionAdapter() { @Override - public void run() { - frame1.dispose(); - frame2.dispose(); + public void mouseMoved(MouseEvent e) { + if (!verified) { + verifyMousePosition(); + } } }); - } - } - 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; + frame2.addMouseListener(new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent e) { + if (!verified) { + verifyMousePosition(); + } } + }); - shown = true; + 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; + } + } - 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"); - } + Point positionInFrame1 = frame1.getMousePosition(); + if (positionInFrame1 != 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; } }