--- old/jdk/test/java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java 2016-03-31 14:45:48.666150036 +0530 +++ new/jdk/test/java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java 2016-03-31 14:45:48.514074037 +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,14 +23,14 @@ import test.java.awt.regtesthelpers.Util; -import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; +import java.awt.event.MouseAdapter; /** * @test - * @bug 8012026 + * @bug 8012026 8027154 * @summary Component.getMousePosition() does not work in an applet on MacOS * @author Petr Pchelko * @library ../../regtesthelpers @@ -43,69 +43,79 @@ 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(); - } - }); + 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(null); - Util.waitForIdle(null); - r.mouseMove(149, 149); - Util.waitForIdle(null); - r.mouseMove(150, 150); - Util.waitForIdle(null); + frame2.addMouseMotionListener(new MouseMotionAdapter() { - } finally { - SwingUtilities.invokeLater(new Runnable() { @Override - public void run() { - frame1.dispose(); - frame2.dispose(); + public void mouseMoved(MouseEvent e) { + System.out.println("Mouse Moved"); + 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) { + System.out.println("Mouse Entered"); + if (!verified) { + verifyMousePosition(); + } } + }); - shown = true; + Util.waitForIdle(null); + Point loc = frame2.getLocationOnScreen(); + robot.mouseMove(loc.x + 30, loc.y + 30); + Util.waitForIdle(null); + robot.delay(6000); + if (!verified) { + throw new RuntimeException("No mouse events has been generated for the 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 positionInFrame2 = frame2.getMousePosition(); + System.out.println(positionInFrame2); + if (!(isValueInRange(positionInFrame2.x) && isValueInRange(positionInFrame2.y))) { + throw new RuntimeException("Wrong position reported. Should be in range from [25, 25] to [30, 30] but was [" + + positionInFrame2.x + ", " + positionInFrame2.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 doesn't return exact value, hence range + * is used. + */ + return value >= 25 && value <= 35; } } +