From f8030256aa735c1864fa6f09ffdfa78bee9de690 Mon Sep 17 00:00:00 2001 From: Harshitha Onkar Date: Wed, 22 Oct 2025 14:47:47 -0700 Subject: [PATCH 1/9] refactoring changes --- .../swing/JFileChooser/FileSizeCheck.java | 25 ++++--------------- .../javax/swing/JFileChooser/bug4759934.java | 18 ++++++++++--- test/jdk/javax/swing/regtesthelpers/Util.java | 23 ++++++++++++++++- 3 files changed, 42 insertions(+), 24 deletions(-) diff --git a/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java b/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java index 056ce38a09892..175d5d1f351a3 100644 --- a/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java +++ b/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2025, 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 @@ -34,7 +34,6 @@ import java.util.Arrays; import java.util.Locale; import java.util.concurrent.atomic.AtomicReference; -import java.util.function.Predicate; import javax.swing.AbstractButton; import javax.swing.JFileChooser; @@ -52,6 +51,8 @@ * @requires (os.family == "linux") * @summary Verifies if the size of an empty file is shown as 0.0 KB * as well as checks the displayed file sizes are rounded up + * @library /javax/swing/regtesthelpers + * @build Util * @run main FileSizeCheck */ public class FileSizeCheck { @@ -228,31 +229,15 @@ private static void clickDetails() { } private static AbstractButton findDetailsButton(final Container container) { - Component result = findComponent(container, + Component result = Util.findComponent(container, c -> c instanceof JToggleButton button && "Details".equals(button.getToolTipText())); return (AbstractButton) result; } private static JTable findTable(final Container container) { - Component result = findComponent(container, + Component result = Util.findComponent(container, c -> c instanceof JTable); return (JTable) result; } - - private static Component findComponent(final Container container, - final Predicate predicate) { - for (Component child : container.getComponents()) { - if (predicate.test(child)) { - return child; - } - if (child instanceof Container cont && cont.getComponentCount() > 0) { - Component result = findComponent(cont, predicate); - if (result != null) { - return result; - } - } - } - return null; - } } diff --git a/test/jdk/javax/swing/JFileChooser/bug4759934.java b/test/jdk/javax/swing/JFileChooser/bug4759934.java index 08ccdebfb2be0..1ef72b084d842 100644 --- a/test/jdk/javax/swing/JFileChooser/bug4759934.java +++ b/test/jdk/javax/swing/JFileChooser/bug4759934.java @@ -31,10 +31,11 @@ * @run main bug4759934 */ +import java.awt.Component; +import java.awt.Container; import java.awt.Dialog; import java.awt.Point; import java.awt.Robot; -import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JDialog; @@ -72,8 +73,12 @@ public static void main(String[] args) throws Exception { robot.mouseRelease(MouseEvent.BUTTON1_DOWN_MASK); robot.delay(500); - robot.keyPress(KeyEvent.VK_ESCAPE); - robot.keyRelease(KeyEvent.VK_ESCAPE); + JButton cancel = Util.invokeOnEDT(() -> findCancelButton(jfc)); + if (cancel == null) { + throw new RuntimeException("Test failed! Cancel button not found"); + } + Point cancelLoc = Util.getCenterPoint(cancel); + robot.mouseMove(cancelLoc.x, cancelLoc.y); robot.delay(500); SwingUtilities.invokeAndWait(() -> { @@ -121,4 +126,11 @@ private static void createDialog() { dlg.setLocation(fr.getX() + fr.getWidth() + 10, fr.getY()); dlg.setVisible(true); } + + private static JButton findCancelButton(final Container container) { + Component result = Util.findComponent(container, + c -> c instanceof JButton button + && "Cancel".equals(button.getText())); + return (JButton) result; + } } diff --git a/test/jdk/javax/swing/regtesthelpers/Util.java b/test/jdk/javax/swing/regtesthelpers/Util.java index 5f81384028e8d..406cc8fc93be9 100644 --- a/test/jdk/javax/swing/regtesthelpers/Util.java +++ b/test/jdk/javax/swing/regtesthelpers/Util.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2025, 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 @@ -29,6 +29,7 @@ import java.util.LinkedList; import java.util.List; import java.util.concurrent.Callable; +import java.util.function.Predicate; /** *

This class contains utilities useful for regression testing. @@ -146,6 +147,26 @@ public static Component findSubComponent(Component parent, String className) { return null; } + /** + * Find a component based on predicate. + * Always run this method on the EDT thread + */ + public static Component findComponent(final Container container, + final Predicate predicate) { + for (Component child : container.getComponents()) { + if (predicate.test(child)) { + return child; + } + if (child instanceof Container cont && cont.getComponentCount() > 0) { + Component result = findComponent(cont, predicate); + if (result != null) { + return result; + } + } + } + return null; + } + /** * Hits mnemonics by robot. */ From 6bc90058c5a5f75c300da8d17961e1205e3151d2 Mon Sep 17 00:00:00 2001 From: Harshitha Onkar Date: Thu, 23 Oct 2025 13:45:10 -0700 Subject: [PATCH 2/9] review update --- test/jdk/javax/swing/JFileChooser/FileSizeCheck.java | 6 +++--- test/jdk/javax/swing/JFileChooser/bug4759934.java | 10 +++------- test/jdk/javax/swing/regtesthelpers/Util.java | 2 +- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java b/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java index 175d5d1f351a3..b4f32264e96f3 100644 --- a/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java +++ b/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java @@ -230,14 +230,14 @@ private static void clickDetails() { private static AbstractButton findDetailsButton(final Container container) { Component result = Util.findComponent(container, - c -> c instanceof JToggleButton button - && "Details".equals(button.getToolTipText())); + c -> c instanceof JToggleButton button + && "Details".equals(button.getToolTipText())); return (AbstractButton) result; } private static JTable findTable(final Container container) { Component result = Util.findComponent(container, - c -> c instanceof JTable); + c -> c instanceof JTable); return (JTable) result; } } diff --git a/test/jdk/javax/swing/JFileChooser/bug4759934.java b/test/jdk/javax/swing/JFileChooser/bug4759934.java index 1ef72b084d842..41a594a0f8d92 100644 --- a/test/jdk/javax/swing/JFileChooser/bug4759934.java +++ b/test/jdk/javax/swing/JFileChooser/bug4759934.java @@ -74,11 +74,7 @@ public static void main(String[] args) throws Exception { robot.delay(500); JButton cancel = Util.invokeOnEDT(() -> findCancelButton(jfc)); - if (cancel == null) { - throw new RuntimeException("Test failed! Cancel button not found"); - } - Point cancelLoc = Util.getCenterPoint(cancel); - robot.mouseMove(cancelLoc.x, cancelLoc.y); + cancel.doClick(); robot.delay(500); SwingUtilities.invokeAndWait(() -> { @@ -129,8 +125,8 @@ private static void createDialog() { private static JButton findCancelButton(final Container container) { Component result = Util.findComponent(container, - c -> c instanceof JButton button - && "Cancel".equals(button.getText())); + c -> c instanceof JButton button + && "Cancel".equals(button.getText())); return (JButton) result; } } diff --git a/test/jdk/javax/swing/regtesthelpers/Util.java b/test/jdk/javax/swing/regtesthelpers/Util.java index 406cc8fc93be9..16a1458806125 100644 --- a/test/jdk/javax/swing/regtesthelpers/Util.java +++ b/test/jdk/javax/swing/regtesthelpers/Util.java @@ -152,7 +152,7 @@ public static Component findSubComponent(Component parent, String className) { * Always run this method on the EDT thread */ public static Component findComponent(final Container container, - final Predicate predicate) { + final Predicate predicate) { for (Component child : container.getComponents()) { if (predicate.test(child)) { return child; From cec6a0cac34f9b88ee69421ecc6c2666eeeb258f Mon Sep 17 00:00:00 2001 From: Harshitha Onkar Date: Mon, 3 Nov 2025 13:52:09 -0800 Subject: [PATCH 3/9] Review changes: EDT check --- .../swing/JFileChooser/FileSizeCheck.java | 4 ++-- .../javax/swing/JFileChooser/bug4759934.java | 6 ++++-- test/jdk/javax/swing/regtesthelpers/Util.java | 19 +++++++++++++++++-- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java b/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java index b4f32264e96f3..e7ac138a8cb18 100644 --- a/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java +++ b/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java @@ -230,8 +230,8 @@ private static void clickDetails() { private static AbstractButton findDetailsButton(final Container container) { Component result = Util.findComponent(container, - c -> c instanceof JToggleButton button - && "Details".equals(button.getToolTipText())); + c -> c instanceof JToggleButton button + && "Details".equals(button.getToolTipText())); return (AbstractButton) result; } diff --git a/test/jdk/javax/swing/JFileChooser/bug4759934.java b/test/jdk/javax/swing/JFileChooser/bug4759934.java index 41a594a0f8d92..2a48a28888c97 100644 --- a/test/jdk/javax/swing/JFileChooser/bug4759934.java +++ b/test/jdk/javax/swing/JFileChooser/bug4759934.java @@ -73,8 +73,10 @@ public static void main(String[] args) throws Exception { robot.mouseRelease(MouseEvent.BUTTON1_DOWN_MASK); robot.delay(500); - JButton cancel = Util.invokeOnEDT(() -> findCancelButton(jfc)); - cancel.doClick(); + SwingUtilities.invokeAndWait(() -> { + JButton cancel = findCancelButton(jfc); + cancel.doClick(); + }); robot.delay(500); SwingUtilities.invokeAndWait(() -> { diff --git a/test/jdk/javax/swing/regtesthelpers/Util.java b/test/jdk/javax/swing/regtesthelpers/Util.java index 16a1458806125..f0392238a79cb 100644 --- a/test/jdk/javax/swing/regtesthelpers/Util.java +++ b/test/jdk/javax/swing/regtesthelpers/Util.java @@ -31,6 +31,8 @@ import java.util.concurrent.Callable; import java.util.function.Predicate; +import static javax.swing.SwingUtilities.isEventDispatchThread; + /** *

This class contains utilities useful for regression testing. *

When using jtreg you would include this class via something like: @@ -149,16 +151,28 @@ public static Component findSubComponent(Component parent, String className) { /** * Find a component based on predicate. - * Always run this method on the EDT thread */ public static Component findComponent(final Container container, final Predicate predicate) { + try { + if (isEventDispatchThread()) { + return findComponentImpl(container, predicate); + } else { + return Util.invokeOnEDT(() -> findComponentImpl(container, predicate)); + } + } catch (Exception e) { + throw new RuntimeException("Error occurred while finding component", e); + } + } + + private static Component findComponentImpl(final Container container, + final Predicate predicate) { for (Component child : container.getComponents()) { if (predicate.test(child)) { return child; } if (child instanceof Container cont && cont.getComponentCount() > 0) { - Component result = findComponent(cont, predicate); + Component result = findComponentImpl(cont, predicate); if (result != null) { return result; } @@ -167,6 +181,7 @@ public static Component findComponent(final Container container, return null; } + /** * Hits mnemonics by robot. */ From 2d577e8c91a5565bacde762090dc295344c6c441 Mon Sep 17 00:00:00 2001 From: Harshitha Onkar Date: Wed, 5 Nov 2025 09:48:43 -0800 Subject: [PATCH 4/9] Util changes and revert test changes --- .../swing/JFileChooser/FileSizeCheck.java | 31 +++++++++--- .../javax/swing/JFileChooser/bug4759934.java | 16 ++---- test/jdk/javax/swing/regtesthelpers/Util.java | 49 ++++++++++--------- 3 files changed, 51 insertions(+), 45 deletions(-) diff --git a/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java b/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java index e7ac138a8cb18..056ce38a09892 100644 --- a/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java +++ b/test/jdk/javax/swing/JFileChooser/FileSizeCheck.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2025, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 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 @@ -34,6 +34,7 @@ import java.util.Arrays; import java.util.Locale; import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Predicate; import javax.swing.AbstractButton; import javax.swing.JFileChooser; @@ -51,8 +52,6 @@ * @requires (os.family == "linux") * @summary Verifies if the size of an empty file is shown as 0.0 KB * as well as checks the displayed file sizes are rounded up - * @library /javax/swing/regtesthelpers - * @build Util * @run main FileSizeCheck */ public class FileSizeCheck { @@ -229,15 +228,31 @@ private static void clickDetails() { } private static AbstractButton findDetailsButton(final Container container) { - Component result = Util.findComponent(container, - c -> c instanceof JToggleButton button - && "Details".equals(button.getToolTipText())); + Component result = findComponent(container, + c -> c instanceof JToggleButton button + && "Details".equals(button.getToolTipText())); return (AbstractButton) result; } private static JTable findTable(final Container container) { - Component result = Util.findComponent(container, - c -> c instanceof JTable); + Component result = findComponent(container, + c -> c instanceof JTable); return (JTable) result; } + + private static Component findComponent(final Container container, + final Predicate predicate) { + for (Component child : container.getComponents()) { + if (predicate.test(child)) { + return child; + } + if (child instanceof Container cont && cont.getComponentCount() > 0) { + Component result = findComponent(cont, predicate); + if (result != null) { + return result; + } + } + } + return null; + } } diff --git a/test/jdk/javax/swing/JFileChooser/bug4759934.java b/test/jdk/javax/swing/JFileChooser/bug4759934.java index 2a48a28888c97..08ccdebfb2be0 100644 --- a/test/jdk/javax/swing/JFileChooser/bug4759934.java +++ b/test/jdk/javax/swing/JFileChooser/bug4759934.java @@ -31,11 +31,10 @@ * @run main bug4759934 */ -import java.awt.Component; -import java.awt.Container; import java.awt.Dialog; import java.awt.Point; import java.awt.Robot; +import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JDialog; @@ -73,10 +72,8 @@ public static void main(String[] args) throws Exception { robot.mouseRelease(MouseEvent.BUTTON1_DOWN_MASK); robot.delay(500); - SwingUtilities.invokeAndWait(() -> { - JButton cancel = findCancelButton(jfc); - cancel.doClick(); - }); + robot.keyPress(KeyEvent.VK_ESCAPE); + robot.keyRelease(KeyEvent.VK_ESCAPE); robot.delay(500); SwingUtilities.invokeAndWait(() -> { @@ -124,11 +121,4 @@ private static void createDialog() { dlg.setLocation(fr.getX() + fr.getWidth() + 10, fr.getY()); dlg.setVisible(true); } - - private static JButton findCancelButton(final Container container) { - Component result = Util.findComponent(container, - c -> c instanceof JButton button - && "Cancel".equals(button.getText())); - return (JButton) result; - } } diff --git a/test/jdk/javax/swing/regtesthelpers/Util.java b/test/jdk/javax/swing/regtesthelpers/Util.java index f0392238a79cb..c3765b33f4b43 100644 --- a/test/jdk/javax/swing/regtesthelpers/Util.java +++ b/test/jdk/javax/swing/regtesthelpers/Util.java @@ -21,9 +21,19 @@ * questions. */ -import javax.swing.*; -import java.awt.*; -import java.awt.event.*; +import java.awt.AWTException; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.LinkedList; @@ -31,6 +41,11 @@ import java.util.concurrent.Callable; import java.util.function.Predicate; +import javax.swing.Box; +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.SwingUtilities; + import static javax.swing.SwingUtilities.isEventDispatchThread; /** @@ -126,27 +141,13 @@ public static void generateOOME() { } /** - * Find a sub component by class name. - * Always run this method on the EDT thread + * Find a subcomponent by class name. */ public static Component findSubComponent(Component parent, String className) { - String parentClassName = parent.getClass().getName(); - - if (parentClassName.contains(className)) { - return parent; - } - - if (parent instanceof Container) { - for (Component child : ((Container) parent).getComponents()) { - Component subComponent = findSubComponent(child, className); - - if (subComponent != null) { - return subComponent; - } - } - } - - return null; + return findComponentImpl((Container) parent, + c -> c.getClass() + .getName() + .contains(className)); } /** @@ -318,8 +319,8 @@ public static ArrayList getSystemMnemonicKeyCodes() { */ public static JDialog createModalDialogWithPassFailButtons(final String failString) { JDialog retDialog = new JDialog(); - Box buttonBox = Box.createHorizontalBox(); - JButton passButton = new JButton("Pass"); + Box buttonBox = Box.createHorizontalBox(); + JButton passButton = new JButton("Pass"); JButton failButton = new JButton("Fail"); passButton.addActionListener(new ActionListener() { From 0eef08defd2b84a8ddd148d43d15120dd997a096 Mon Sep 17 00:00:00 2001 From: Harshitha Onkar Date: Wed, 5 Nov 2025 09:50:53 -0800 Subject: [PATCH 5/9] indentation --- test/jdk/javax/swing/regtesthelpers/Util.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/jdk/javax/swing/regtesthelpers/Util.java b/test/jdk/javax/swing/regtesthelpers/Util.java index c3765b33f4b43..b07b725597a38 100644 --- a/test/jdk/javax/swing/regtesthelpers/Util.java +++ b/test/jdk/javax/swing/regtesthelpers/Util.java @@ -146,8 +146,8 @@ public static void generateOOME() { public static Component findSubComponent(Component parent, String className) { return findComponentImpl((Container) parent, c -> c.getClass() - .getName() - .contains(className)); + .getName() + .contains(className)); } /** From 16a3770c4bfe3aeea260ebdc719b7cafbd95aaad Mon Sep 17 00:00:00 2001 From: Harshitha Onkar Date: Wed, 5 Nov 2025 09:55:24 -0800 Subject: [PATCH 6/9] indentation --- test/jdk/javax/swing/regtesthelpers/Util.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/jdk/javax/swing/regtesthelpers/Util.java b/test/jdk/javax/swing/regtesthelpers/Util.java index b07b725597a38..dbf35aa2019b5 100644 --- a/test/jdk/javax/swing/regtesthelpers/Util.java +++ b/test/jdk/javax/swing/regtesthelpers/Util.java @@ -146,8 +146,8 @@ public static void generateOOME() { public static Component findSubComponent(Component parent, String className) { return findComponentImpl((Container) parent, c -> c.getClass() - .getName() - .contains(className)); + .getName() + .contains(className)); } /** @@ -167,7 +167,7 @@ public static Component findComponent(final Container container, } private static Component findComponentImpl(final Container container, - final Predicate predicate) { + final Predicate predicate) { for (Component child : container.getComponents()) { if (predicate.test(child)) { return child; From c36c7dba32a68327faf8b938e282f82079d3ebc5 Mon Sep 17 00:00:00 2001 From: Harshitha Onkar Date: Wed, 5 Nov 2025 10:55:33 -0800 Subject: [PATCH 7/9] review update --- test/jdk/javax/swing/regtesthelpers/Util.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/jdk/javax/swing/regtesthelpers/Util.java b/test/jdk/javax/swing/regtesthelpers/Util.java index dbf35aa2019b5..1267c7d6420cd 100644 --- a/test/jdk/javax/swing/regtesthelpers/Util.java +++ b/test/jdk/javax/swing/regtesthelpers/Util.java @@ -144,7 +144,7 @@ public static void generateOOME() { * Find a subcomponent by class name. */ public static Component findSubComponent(Component parent, String className) { - return findComponentImpl((Container) parent, + return findComponent((Container) parent, c -> c.getClass() .getName() .contains(className)); @@ -319,8 +319,8 @@ public static ArrayList getSystemMnemonicKeyCodes() { */ public static JDialog createModalDialogWithPassFailButtons(final String failString) { JDialog retDialog = new JDialog(); - Box buttonBox = Box.createHorizontalBox(); - JButton passButton = new JButton("Pass"); + Box buttonBox = Box.createHorizontalBox(); + JButton passButton = new JButton("Pass"); JButton failButton = new JButton("Fail"); passButton.addActionListener(new ActionListener() { From 1373644697961ceee21b5e5f283c920d5752e48d Mon Sep 17 00:00:00 2001 From: Harshitha Onkar Date: Wed, 5 Nov 2025 10:57:47 -0800 Subject: [PATCH 8/9] revert unchanged lines --- test/jdk/javax/swing/regtesthelpers/Util.java | 1 - 1 file changed, 1 deletion(-) diff --git a/test/jdk/javax/swing/regtesthelpers/Util.java b/test/jdk/javax/swing/regtesthelpers/Util.java index 1267c7d6420cd..7d47ecebab656 100644 --- a/test/jdk/javax/swing/regtesthelpers/Util.java +++ b/test/jdk/javax/swing/regtesthelpers/Util.java @@ -182,7 +182,6 @@ private static Component findComponentImpl(final Container container, return null; } - /** * Hits mnemonics by robot. */ From 9bf1926181ebd7ab7de67abe2c1ed0ce54e41a33 Mon Sep 17 00:00:00 2001 From: Harshitha Onkar Date: Wed, 5 Nov 2025 17:06:16 -0800 Subject: [PATCH 9/9] spacing --- test/jdk/javax/swing/regtesthelpers/Util.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/jdk/javax/swing/regtesthelpers/Util.java b/test/jdk/javax/swing/regtesthelpers/Util.java index 7d47ecebab656..ddbf32f938d05 100644 --- a/test/jdk/javax/swing/regtesthelpers/Util.java +++ b/test/jdk/javax/swing/regtesthelpers/Util.java @@ -145,9 +145,9 @@ public static void generateOOME() { */ public static Component findSubComponent(Component parent, String className) { return findComponent((Container) parent, - c -> c.getClass() - .getName() - .contains(className)); + c -> c.getClass() + .getName() + .contains(className)); } /**