From bfdeb33e6f1d4f9f0cc65925ea792be98b1f4d61 Mon Sep 17 00:00:00 2001 From: Harshitha Onkar Date: Mon, 30 Sep 2024 18:45:40 +0000 Subject: [PATCH] 8340332: Open source mixed AWT tests - Set3 Reviewed-by: aivanov --- .../ContainerResizeMousePositionTest.java | 141 +++++++++++ .../awt/color/XAWTDifference/XAWTColors.jpg | Bin 0 -> 10774 bytes .../color/XAWTDifference/XAWTDifference.java | 223 ++++++++++++++++++ 3 files changed, 364 insertions(+) create mode 100644 test/jdk/java/awt/MouseInfo/ContainerResizeMousePositionTest.java create mode 100644 test/jdk/java/awt/color/XAWTDifference/XAWTColors.jpg create mode 100644 test/jdk/java/awt/color/XAWTDifference/XAWTDifference.java diff --git a/test/jdk/java/awt/MouseInfo/ContainerResizeMousePositionTest.java b/test/jdk/java/awt/MouseInfo/ContainerResizeMousePositionTest.java new file mode 100644 index 00000000000..72aa4d93a5c --- /dev/null +++ b/test/jdk/java/awt/MouseInfo/ContainerResizeMousePositionTest.java @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2003, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.BorderLayout; +import java.awt.Button; +import java.awt.EventQueue; +import java.awt.Frame; +import java.awt.Point; +import java.awt.Robot; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +/* + * @test + * @key headful + * @bug 4009555 + * @summary Unit test for a new method in Container class: getMousePosition(boolean) + * while Container resized. + */ + +public class ContainerResizeMousePositionTest { + private static Frame frame; + private static Button button; + private static Robot robot; + private static volatile Point frameLocation; + private static volatile Point newLoc; + private static boolean testSucceeded = false; + + private static final CountDownLatch eventCaught = new CountDownLatch(1); + + public static void main(String[] args) throws Exception { + try { + robot = new Robot(); + EventQueue.invokeAndWait(() -> createAndShowUI()); + robot.waitForIdle(); + robot.delay(1000); + testUI(); + } finally { + EventQueue.invokeAndWait(() -> { + if (frame != null) { + frame.dispose(); + } + }); + } + } + + private static void createAndShowUI() { + frame = new Frame("Testing getMousePosition() after resize"); + button = new Button("Button"); + frame.setLayout(new BorderLayout()); + frame.add(button); + frame.setSize(200, 200); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + } + + private static void testUI() throws Exception { + EventQueue.invokeAndWait(() -> { + frameLocation = frame.getLocationOnScreen(); + newLoc = new Point(frame.getWidth() + 10, frame.getHeight() + 10); + }); + + robot.mouseMove(frameLocation.x + newLoc.x, frameLocation.y + newLoc.y); + EventQueue.invokeAndWait(() -> { + button.addComponentListener(new ResizeAdapter()); + frame.setSize(frame.getWidth() * 2, frame.getHeight() * 2); + frame.validate(); + }); + robot.waitForIdle(); + robot.delay(500); + + if (!eventCaught.await(2, TimeUnit.SECONDS)) { + throw new RuntimeException("componentResized Event isn't" + + " received within a timeout"); + } + + if (!testSucceeded) { + throw new RuntimeException("Container.getMousePosition(boolean)" + + " returned incorrect result while Container resized"); + } + } + + static class ResizeAdapter extends ComponentAdapter { + int testStageCounter = 0; + @Override + public void componentResized(ComponentEvent e) { + Point pTrue = frame.getMousePosition(true); + if (frame.getMousePosition(false) == null) { + testStageCounter++; + System.out.println(""" + TEST STAGE 1 PASSED: + Container.getMousePosition(false) + returned NULL over Child Component + during resize. + """); + } + if (pTrue != null) { + testStageCounter++; + System.out.println(""" + TEST STAGE 2 PASSED: + Container.getMousePosition(true) + returned NON-NULL over Child Component + during resize. + """); + } + if (pTrue != null && pTrue.x == newLoc.x && pTrue.y == newLoc.y) { + testStageCounter++; + System.out.println(""" + TEST STAGE 3 PASSED: + Container.getMousePosition(true) + returned correct result over Child Component + during resize. + """); + } + testSucceeded = testStageCounter == 3; + eventCaught.countDown(); + } + } +} diff --git a/test/jdk/java/awt/color/XAWTDifference/XAWTColors.jpg b/test/jdk/java/awt/color/XAWTDifference/XAWTColors.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f53b30407cc28676f9a91a9690c20b499f9ffbca GIT binary patch literal 10774 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 literal 0 HcmV?d00001 diff --git a/test/jdk/java/awt/color/XAWTDifference/XAWTDifference.java b/test/jdk/java/awt/color/XAWTDifference/XAWTDifference.java new file mode 100644 index 00000000000..ef0f5aacf44 --- /dev/null +++ b/test/jdk/java/awt/color/XAWTDifference/XAWTDifference.java @@ -0,0 +1,223 @@ +/* + * Copyright (c) 2005, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.Button; +import java.awt.Canvas; +import java.awt.Checkbox; +import java.awt.Choice; +import java.awt.Component; +import java.awt.Frame; +import java.awt.GridLayout; +import java.awt.Image; +import java.awt.Label; +import java.awt.Menu; +import java.awt.MenuBar; +import java.awt.MenuItem; +import java.awt.Panel; +import java.awt.PopupMenu; +import java.awt.ScrollPane; +import java.awt.Scrollbar; +import java.awt.TextArea; +import java.awt.TextField; +import java.awt.Window; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.ImageIcon; +import javax.swing.JLabel; + +/* + * @test + * @bug 5092883 6513478 7154025 + * @requires (os.family == "linux") + * @summary REGRESSION: SystemColor class gives back wrong values under Linux + * @library /java/awt/regtesthelpers + * @build PassFailJFrame + * @run main/manual XAWTDifference + */ + +public class XAWTDifference { + + private static final String INSTRUCTIONS = """ + You would see a frame with title "XAWTDifference Test Frame". + + Test Frame (1) + + a) It has three columns in it. The 1st one with ordinary components. + The 2nd one with disabled components. + The 3rd one with uneditable components (only text components + are there). Verify that the difference between different states + is visible. + + Standard Frame (2) + + b) You would also see a frame named StandardFrame (2) + with a lot of components in it. Actually this is just a jpg-image + in a frame. Verify that every component in the frame (1) looks + similar to the same component in (2). + + They might differ in colors and be darker or brighter but + the whole picture should be the same. + + c) Also check the color of the MenuBar Items in the MenuBar and + the PopupMenu assigned to TextArea. + As you can't compare the colors of menu items with the picture + so just look if the are adequate enough. + """; + private static final int HGAP = 20; + + public static void main(String[] args) throws Exception { + PassFailJFrame.builder() + .title("Test Instructions") + .instructions(INSTRUCTIONS) + .columns(40) + .testUI(XAWTDifference::createAndShowUI) + .positionTestUI(XAWTDifference::positionMultiTestUI) + .build() + .awaitAndCheck(); + } + + private static Panel addComponentsIntoPanel(boolean enabled, boolean editable) { + TextField tf = new TextField("TextField"); + TextArea ta = new TextArea("TextArea", 10, 10); + + Choice levelChooser = new Choice(); + levelChooser.add("Item #1"); + levelChooser.add("Item #2"); + + Button b = new Button("BUTTON"); + Label label = new Label("LABEL"); + java.awt.List list = new java.awt.List(4, false); + list.add("one"); + list.add("two"); + list.add("three"); + + Checkbox chb = new Checkbox(); + Scrollbar sb = new Scrollbar(Scrollbar.HORIZONTAL); + ScrollPane sp = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS); + sp.add(new TextArea("this is a textarea in scrollpane")); + sp.setSize(200, 200); + Canvas canvas = new Canvas(); + canvas.setSize(100, 100); + + //add popup menu to Button + final PopupMenu pm = new PopupMenu(); + MenuItem i1 = new MenuItem("Item1"); + MenuItem i2 = new MenuItem("Item2"); + MenuItem i3 = new MenuItem("Item3"); + i3.setEnabled(false); + pm.add(i1); + pm.add(i2); + pm.add(i3); + canvas.add(pm); + + ta.add(pm); + ta.addMouseListener(new MouseAdapter() { + public void mousePressed(MouseEvent me) { + if (me.isPopupTrigger()) { + pm.show(me.getComponent(), me.getX(), me.getY()); + } + } + }); + + ArrayList componentList = new ArrayList<>(); + + componentList.add(tf); + componentList.add(ta); + if (editable){ + componentList.add(levelChooser); + componentList.add(b); + componentList.add(label); + componentList.add(list); + componentList.add(chb); + componentList.add(sb); + componentList.add(sp); + componentList.add(canvas); + } else { + tf.setEditable(false); + ta.setEditable(false); + } + + Panel panel = new Panel(); + panel.setLayout(new GridLayout(0, 1)); + for (Component c : componentList) { + if (!enabled) { + c.setEnabled(false); + } + panel.add(c); + } + return panel; + } + + private static List createAndShowUI() { + Frame testFrame = new Frame("XAWTDifference Test Frame"); + StandardFrame standardFrame = new StandardFrame("StandardFrame"); + standardFrame.pack(); + + testFrame.setLayout(new GridLayout(1, 3)); + testFrame.add(addComponentsIntoPanel(true, true)); + testFrame.add(addComponentsIntoPanel(false, true)); + testFrame.add(addComponentsIntoPanel(true, false)); + + MenuItem mi1 = new MenuItem("Item1"); + MenuItem mi2 = new MenuItem("Item2"); + MenuItem mi3 = new MenuItem("Disabled Item3"); + mi3.setEnabled(false); + + MenuBar mb = new MenuBar(); + Menu enabledMenu = new Menu("Enabled Menu"); + Menu disabledMenu = new Menu("Disabled Menu"); + disabledMenu.setEnabled(false); + mb.add(enabledMenu); + mb.add(disabledMenu); + enabledMenu.add(mi1); + enabledMenu.add(mi2); + enabledMenu.add(mi3); + + testFrame.setMenuBar(mb); + testFrame.setSize(standardFrame.getWidth(), standardFrame.getHeight()); + return List.of(testFrame, standardFrame); + } + + private static void positionMultiTestUI(List windows, + PassFailJFrame.InstructionUI instructionUI) { + int x = instructionUI.getLocation().x + instructionUI.getSize().width + HGAP; + for (Window w : windows) { + w.setLocation(x, instructionUI.getLocation().y); + x += w.getWidth() + HGAP; + } + } + + private static class StandardFrame extends Frame { + public StandardFrame(String name) { + super(name); + String testPath = System.getProperty("test.src", "."); + Panel panel = new Panel(); + panel.add(new JLabel(new ImageIcon(testPath + File.separator + "XAWTColors.jpg"))); + add(panel); + } + } +}