--- old/test/java/awt/Robot/HiDPIMouseClick/HiDPIRobotMouseClick.java 2017-04-06 20:19:31.000000000 +0300 +++ new/test/java/awt/Robot/HiDPIMouseClick/HiDPIRobotMouseClick.java 2017-04-06 20:19:31.000000000 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, 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 @@ -27,31 +27,52 @@ import java.awt.event.InputEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import javax.swing.UIManager; +import java.util.List; +import java.util.concurrent.CountDownLatch; + +import jdk.testlibrary.OSInfo; /* @test * @bug 8073320 * @summary Windows HiDPI support - * @author Alexander Scherbatiy - * @requires (os.family == "windows") - * @run main/othervm -Dsun.java2d.win.uiScale=2 HiDPIRobotMouseClick + * @library ../../../../lib/testlibrary + * @build jdk.testlibrary.OSInfo + * @run main/othervm HiDPIRobotMouseClick + * @run main/othervm -Dsun.java2d.uiScale=1 HiDPIRobotMouseClick + * @run main/othervm -Dsun.java2d.uiScale=2 HiDPIRobotMouseClick + * @run main/othervm -Dsun.java2d.win.uiScaleX=3 -Dsun.java2d.win.uiScaleY=2 + * HiDPIRobotMouseClick + * @run main/othervm -Dsun.java2d.win.uiScaleX=2 -Dsun.java2d.win.uiScaleY=3 + * HiDPIRobotMouseClick */ public class HiDPIRobotMouseClick { private static volatile int mouseX; private static volatile int mouseY; + private static CountDownLatch go; + private static Robot robot; public static void main(String[] args) throws Exception { - - try { - UIManager.setLookAndFeel( - "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); - } catch (Exception e) { + if (!OSInfo.getOSType().equals(OSInfo.OSType.WINDOWS) + && System.getProperty("sun.java2d.win.uiScaleX") != null) { return; } + robot = new Robot(); + robot.setAutoDelay(50); + for (int size : List.of(50, 87, 100, 123, 137, 150)) { + test(size); + } + } + + private static void test(int size) throws Exception { + go = new CountDownLatch(1); + mouseX = -1; + mouseY = -1; + robot.mouseMove(100, 100); Frame frame = new Frame(); - frame.setBounds(30, 20, 400, 300); + frame.setSize(size, size + 1); + frame.setLocationRelativeTo(null); frame.setUndecorated(true); frame.addMouseListener(new MouseAdapter() { @@ -60,12 +81,12 @@ public void mouseClicked(MouseEvent e) { mouseX = e.getXOnScreen(); mouseY = e.getYOnScreen(); + go.countDown(); } }); frame.setVisible(true); - Robot robot = new Robot(); robot.waitForIdle(); Thread.sleep(200); @@ -78,9 +99,11 @@ robot.mouseMove(x, y); robot.mousePress(InputEvent.BUTTON1_MASK); robot.mouseRelease(InputEvent.BUTTON1_MASK); - robot.waitForIdle(); - + go.await(); + frame.dispose(); if (x != mouseX || y != mouseY) { + System.err.println("Expected: x = " + x + ", y = " + y); + System.err.println("Actual: x = " + mouseX + ", y = " + mouseY); throw new RuntimeException("Wrong mouse click point!"); } }