diff --git a/test/jdk/java/awt/image/multiresolution/MultiDisplayTest/MultiDisplayTest.java b/test/jdk/java/awt/image/multiresolution/MultiDisplayTest.java similarity index 50% rename from test/jdk/java/awt/image/multiresolution/MultiDisplayTest/MultiDisplayTest.java rename to test/jdk/java/awt/image/multiresolution/MultiDisplayTest.java index b1c56d5e452..f8214a8ddb0 100644 --- a/test/jdk/java/awt/image/multiresolution/MultiDisplayTest/MultiDisplayTest.java +++ b/test/jdk/java/awt/image/multiresolution/MultiDisplayTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024, 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,63 +21,99 @@ * questions. */ +import java.awt.Color; +import java.awt.Dialog; +import java.awt.Font; +import java.awt.Frame; +import java.awt.Graphics; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.image.BaseMultiResolutionImage; +import java.awt.image.BufferedImage; -/* - @test - @bug 8142861 8143062 8147016 - @summary Check if multiresolution image behaves properly - on HiDPI + non-HiDPI display pair. - @author a.stepanov - @library /test/lib - @build jdk.test.lib.Platform - @run applet/manual=yesno MultiDisplayTest.html -*/ - - -import java.applet.Applet; -import java.awt.*; -import java.awt.event.*; -import java.awt.image.*; +import javax.swing.JButton; import jdk.test.lib.Platform; +import jtreg.SkippedException; -public class MultiDisplayTest extends Applet { +/* + * @test + * @bug 8142861 8143062 8147016 + * @library /java/awt/regtesthelpers /test/lib + * @build PassFailJFrame jdk.test.lib.Platform + * @requires (os.family == "windows" | os.family == "mac") + * @summary Check if multiresolution image behaves properly + * on HiDPI + non-HiDPI display pair. + * @run main/manual MultiDisplayTest + */ - private static final int W = 200, H = 200; +public class MultiDisplayTest { + private static final String INSTRUCTIONS = + """ + The test requires two-display configuration, where + + - 1st display is operating in HiDPI mode; + - 2nd display is non-HiDPI. + + In other cases please simply push "Pass". + + To run test please push "Start". + + Then drag parent / child to different displays and check + that the proper image is shown for every window + (must be "black 1x" for non-HiDPI and "blue 2x" for HiDPI). + + Please try to drag both parent and child, + do it fast several times and check if no artefacts occur. + + Try to switch display resolution (high to low and back). + + For Mac OS X please check also the behavior for + translucent windows appearing on the 2nd (non-active) display + and Mission Control behavior. + + Close the Child & Parent windows. + + In case if no issues occur please push "Pass", otherwise "Fail". + """; + + private static final int W = 200; + private static final int H = 200; private static final BaseMultiResolutionImage IMG = new BaseMultiResolutionImage(new BufferedImage[]{ generateImage(1, Color.BLACK), generateImage(2, Color.BLUE)}); + public static void main(String[] args) throws Exception { + if (!checkOS()) { + throw new SkippedException("Invalid OS." + + "Please run test on either Windows or MacOS"); + } + PassFailJFrame + .builder() + .title("MultiDisplayTest Instructions") + .instructions(INSTRUCTIONS) + .rows((int) INSTRUCTIONS.lines().count() + 2) + .columns(40) + .splitUIBottom(MultiDisplayTest::createAndShowGUI) + .build() + .awaitAndCheck(); + } + + public static JButton createAndShowGUI() { + JButton b = new JButton("Start"); + b.addActionListener(e -> { + ParentFrame p = new ParentFrame(); + new ChildDialog(p); + }); + return b; + } + private static boolean checkOS() { return Platform.isWindows() || Platform.isOSX(); } - public void init() { this.setLayout(new BorderLayout()); } - - public void start() { - - Button b = new Button("Start"); - b.setEnabled(checkOS()); - - b.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - - ParentFrame p = new ParentFrame(); - new ChildDialog(p); - } - }); - - add(b, BorderLayout.CENTER); - - validate(); - setVisible(true); - } - - private static BufferedImage generateImage(int scale, Color c) { - BufferedImage image = new BufferedImage( scale * W, scale * H, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); @@ -87,19 +123,13 @@ public class MultiDisplayTest extends Applet { g.setColor(Color.WHITE); Font f = g.getFont(); g.setFont(new Font(f.getName(), Font.BOLD, scale * 48)); - g.drawChars((scale + "X").toCharArray(), 0, 2, scale * W / 2, scale * H / 2); - + g.drawChars((scale + "X").toCharArray(), 0, 2, + scale * W / 2, scale * H / 2); return image; } private static class ParentFrame extends Frame { - public ParentFrame() { - EventQueue.invokeLater(this::CreateUI); - } - - private void CreateUI() { - addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { dispose(); } @@ -118,14 +148,8 @@ public class MultiDisplayTest extends Applet { } private static class ChildDialog extends Dialog { - public ChildDialog(Frame f) { super(f); - EventQueue.invokeLater(this::CreateUI); - } - - private void CreateUI() { - addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { dispose(); } diff --git a/test/jdk/java/awt/image/multiresolution/MultiDisplayTest/MultiDisplayTest.html b/test/jdk/java/awt/image/multiresolution/MultiDisplayTest/MultiDisplayTest.html deleted file mode 100644 index 49989cd9ceb..00000000000 --- a/test/jdk/java/awt/image/multiresolution/MultiDisplayTest/MultiDisplayTest.html +++ /dev/null @@ -1,62 +0,0 @@ - - - -
-