From 76991c8129a6599a3dfaa0cfdc77a23014a02b35 Mon Sep 17 00:00:00 2001 From: Harshitha Onkar Date: Tue, 2 May 2023 23:22:17 +0000 Subject: [PATCH] 8282232: [Win] GetMousePositionWithPopup test fails due to wrong mouse position Reviewed-by: prr --- .../GetMousePositionWithPopup.java | 140 +++++++++++------- 1 file changed, 89 insertions(+), 51 deletions(-) diff --git a/test/jdk/java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java b/test/jdk/java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java index fd779d721f3..452054a8f11 100644 --- a/test/jdk/java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java +++ b/test/jdk/java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, 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 @@ -21,65 +21,89 @@ * questions. */ -import test.java.awt.regtesthelpers.Util; - -import javax.swing.SwingUtilities; import java.awt.Frame; import java.awt.Point; import java.awt.Robot; +import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; +import javax.swing.SwingUtilities; -/** +/* * @test * @key headful * @bug 8012026 8027154 * @summary Component.getMousePosition() does not work in an applet on MacOS - * @library ../../regtesthelpers - * @build Util - * @compile GetMousePositionWithPopup.java - * @run main GetMousePositionWithPopup + * + * @requires (os.family == "windows") + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1 GetMousePositionWithPopup + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.25 GetMousePositionWithPopup + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.5 GetMousePositionWithPopup + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1.75 GetMousePositionWithPopup + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2 GetMousePositionWithPopup + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3 GetMousePositionWithPopup + */ + +/* + * @test + * @key headful + * @bug 8012026 8027154 + * @summary Component.getMousePosition() does not work in an applet on MacOS + * + * @requires (os.family == "mac" | os.family == "linux") + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=1 GetMousePositionWithPopup + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=2 GetMousePositionWithPopup + * @run main/othervm -Dsun.java2d.uiScale.enabled=true -Dsun.java2d.uiScale=3 GetMousePositionWithPopup */ public class GetMousePositionWithPopup { private static Frame frame1; private static Frame frame2; + private static Robot robot; + + private static final int MOUSE_POS1 = 0; + private static final int MOUSE_POS2 = 149; + private static final int MOUSE_POS3 = 170; + + private static final int FRAME1_DIM = 100; + private static final int FRAME2_DIM = 120; + + //expected mouse position w.r.t to Component + //(2nd Frame in this test) after 3rd mouse move. + private static final int EXPECTED_MOUSE_POS = MOUSE_POS3 - FRAME2_DIM; public static void main(String[] args) throws Exception { try { - Robot r = Util.createRobot(); - r.setAutoDelay(100); - r.mouseMove(0, 0); - Util.waitForIdle(null); + robot = new Robot(); + robot.setAutoDelay(200); - SwingUtilities.invokeAndWait(new Runnable() { - @Override - public void run() { - constructTestUI(); - } - }); + //1st mouse move + robot.mouseMove(MOUSE_POS1, MOUSE_POS1); + syncLocationToWindowManager(); - Util.waitForIdle(null); - r.mouseMove(149, 149); - Util.waitForIdle(null); - r.mouseMove(170, 170); - Util.waitForIdle(null); + SwingUtilities.invokeAndWait(GetMousePositionWithPopup::createTestUI); + syncLocationToWindowManager(); + //2nd mouse move + robot.mouseMove(MOUSE_POS2, MOUSE_POS2); + syncLocationToWindowManager(); + + SwingUtilities.invokeAndWait(GetMousePositionWithPopup::addMouseListenerToFrame2); + //3rd mouse move + robot.mouseMove(MOUSE_POS3, MOUSE_POS3); + syncLocationToWindowManager(); } finally { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - frame1.dispose(); - frame2.dispose(); - } + SwingUtilities.invokeLater(() -> { + frame1.dispose(); + frame2.dispose(); }); } } - private static void constructTestUI() { + private static void createTestUI() { frame1 = new Frame(); - frame1.setBounds(100, 100, 100, 100); + frame1.setBounds(FRAME1_DIM, FRAME1_DIM, FRAME1_DIM, FRAME1_DIM); frame1.setVisible(true); frame1.addMouseMotionListener(new MouseMotionAdapter() { @Override @@ -88,27 +112,41 @@ public class GetMousePositionWithPopup { return; } frame2 = new Frame(); - frame2.setBounds(120, 120, 120, 120); + frame2.setBounds(FRAME2_DIM, FRAME2_DIM, FRAME2_DIM, FRAME2_DIM); frame2.setVisible(true); - frame2.addMouseMotionListener(new MouseMotionAdapter() { - @Override - public void mouseMoved(MouseEvent e) - { - Point positionInFrame2 = frame2.getMousePosition(); - int deltaX = Math.abs(50 - positionInFrame2.x); - int deltaY = Math.abs(50 - positionInFrame2.y); - if (deltaX > 2 || deltaY > 2) { - throw new RuntimeException("Wrong position reported. Should be [50, 50] but was [" + - positionInFrame2.x + ", " + positionInFrame2.y + "]"); - } - - Point positionInFrame1 = frame1.getMousePosition(); - if (positionInFrame1 != null) { - throw new RuntimeException("Wrong position reported. Should be null"); - } - } - }); } }); } + + private static void addMouseListenerToFrame2() { + frame2.addMouseMotionListener(new MouseMotionAdapter() { + @Override + public void mouseMoved(MouseEvent e) { + Point positionInFrame2 = frame2.getMousePosition(); + int deltaX = Math.abs(EXPECTED_MOUSE_POS - positionInFrame2.x); + int deltaY = Math.abs(EXPECTED_MOUSE_POS - positionInFrame2.y); + if (deltaX > 2 || deltaY > 2) { + throw new RuntimeException("Wrong position reported for Frame 2." + + " Should be [50, 50] but was " + "[" + positionInFrame2.x + + ", " + positionInFrame2.y + "]"); + } + + Point positionInFrame1 = frame1.getMousePosition(); + if (positionInFrame1 != null) { + throw new RuntimeException("Wrong position reported for Frame 1." + + " Should be null"); + } + } + }); + } + + private static void syncLocationToWindowManager() { + Toolkit.getDefaultToolkit().sync(); + try { + Thread.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + robot.waitForIdle(); + } }