< prev index next >

test/java/awt/Robot/HiDPIMouseClick/HiDPIRobotMouseClick.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * 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
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.

@@ -25,49 +25,70 @@
 import java.awt.Rectangle;
 import java.awt.Robot;
 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() {
 
             @Override
             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);
 
         Rectangle rect = frame.getBounds();
         rect.setLocation(frame.getLocationOnScreen());

@@ -76,12 +97,14 @@
         int y = (int) rect.getCenterY();
 
         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!");
         }
     }
 }
< prev index next >