8353661: Open source several swing tests batch5

Reviewed-by: jdv
This commit is contained in:
Damon Nguyen 2025-04-18 17:08:46 +00:00
parent a551cc9294
commit 924638c471
4 changed files with 436 additions and 0 deletions

View File

@ -0,0 +1,99 @@
/*
* Copyright (c) 1999, 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
* 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.
*/
/*
* @test
* @bug 4382876
* @summary Tests if JSlider fires ChangeEvents when thumb is clicked and not moved
* @key headful
* @run main bug4186062
*/
import java.awt.Point;
import java.awt.Robot;
import java.awt.event.InputEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeListener;
public class bug4186062 {
private static JFrame f;
private static JSlider slider;
private static volatile Point loc;
private static volatile int labelNum;
public static void main(String[] args) throws Exception {
try {
SwingUtilities.invokeAndWait(() -> {
f = new JFrame("JSlider Click Value Test");
f.setSize(400, 200);
f.setLocationRelativeTo(null);
f.setVisible(true);
JPanel panel = new JPanel();
slider = new JSlider();
final JLabel label = new JLabel("0");
labelNum = 0;
ChangeListener listener = e -> {
labelNum++;
label.setText("" + labelNum);
};
slider.addChangeListener(listener);
panel.add(slider);
panel.add(label);
f.add(panel);
});
Robot r = new Robot();
r.setAutoDelay(100);
r.waitForIdle();
r.delay(1000);
SwingUtilities.invokeAndWait(() -> {
loc = slider.getLocationOnScreen();
loc.setLocation(loc.x + (slider.getWidth() / 2),
loc.y + (slider.getHeight() / 2));
});
r.mouseMove(loc.x, loc.y);
r.mousePress(InputEvent.BUTTON1_DOWN_MASK);
r.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
if (labelNum > 0) {
throw new RuntimeException(labelNum + " ChangeEvents fired. " +
"Test failed");
}
} finally {
SwingUtilities.invokeAndWait(() -> {
if (f != null) {
f.dispose();
}
});
}
}
}

View File

@ -0,0 +1,132 @@
/*
* Copyright (c) 2001, 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
* 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.
*/
/*
* @test
* @bug 4275631
* @summary Tests if vertical JSlider is properly aligned in large container
* @key headful
* @run main bug4275631
*/
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Point;
import java.awt.Robot;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.SwingUtilities;
public class bug4275631 {
private static final int OFFSET = 1;
private static JFrame f;
private static JSlider slider1;
private static JSlider slider2;
private static volatile Point loc1;
private static volatile Point loc2;
public static void main(String[] args) throws Exception {
try {
SwingUtilities.invokeAndWait(() -> {
f = new JFrame("JSlider Alignment Test");
f.setSize(400, 200);
f.setLocationRelativeTo(null);
// Create two sliders, verify the alignment on the slider to be
// used in the border layout
slider1 = new JSlider(JSlider.VERTICAL, 0, 99, 50);
slider1.setInverted(true);
slider1.setMajorTickSpacing(10);
slider1.setMinorTickSpacing(1);
slider1.setPaintTicks(true);
slider1.setPaintLabels(true);
slider2 = new JSlider(JSlider.VERTICAL, 0, 99, 50);
slider2.setInverted(true);
slider2.setMajorTickSpacing(10);
slider2.setMinorTickSpacing(1);
slider2.setPaintTicks(true);
slider2.setPaintLabels(true);
// Try to center the natural way, using a border layout in the "Center"
JPanel borderPanel = new JPanel();
borderPanel.setLayout(new BorderLayout());
borderPanel.setBorder(BorderFactory.createTitledBorder("BorderLayout"));
borderPanel.add(slider1, BorderLayout.CENTER);
borderPanel.setPreferredSize(new Dimension(200, 200));
// Try to center using GridBagLayout, with glue on left
// and right to squeeze slider into place
JPanel gridBagPanel = new JPanel(new GridBagLayout());
gridBagPanel.setBorder(BorderFactory.createTitledBorder("GridBagLayout"));
GridBagConstraints c = new GridBagConstraints();
c.gridx = 1;
c.fill = GridBagConstraints.VERTICAL;
c.weighty = 1.0;
gridBagPanel.add(slider2, c);
c.gridx = 0;
c.fill = GridBagConstraints.BOTH;
c.weighty = 0.0;
gridBagPanel.add(Box.createHorizontalGlue(), c);
c.gridx = 2;
c.fill = GridBagConstraints.BOTH;
gridBagPanel.add(Box.createHorizontalGlue(), c);
gridBagPanel.setPreferredSize(new Dimension(200, 200));
f.add(borderPanel, BorderLayout.WEST);
f.add(gridBagPanel, BorderLayout.EAST);
f.setVisible(true);
});
Robot r = new Robot();
r.setAutoDelay(100);
r.waitForIdle();
r.delay(1000);
SwingUtilities.invokeAndWait(() -> {
loc1 = slider1.getLocationOnScreen();
loc1.setLocation(loc1.x + (slider1.getWidth() / 2),
loc1.y + (slider1.getHeight() / 2));
loc2 = slider2.getLocationOnScreen();
loc2.setLocation(loc2.x + (slider2.getWidth() / 2),
loc2.y + (slider2.getHeight() / 2));
});
if (loc1.y > loc2.y + OFFSET || loc1.y < loc2.y - OFFSET) {
throw new RuntimeException("JSlider position is not aligned!");
}
} finally {
SwingUtilities.invokeAndWait(() -> {
if (f != null) {
f.dispose();
}
});
}
}
}

View File

@ -0,0 +1,110 @@
/*
* Copyright (c) 2001, 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
* 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.
*/
/*
* @test
* @bug 4382876
* @summary Tests how PgUp and PgDn keys work with JSlider
* @key headful
* @run main bug4382876
*/
import java.awt.BorderLayout;
import java.awt.ComponentOrientation;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsEnvironment;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.SwingUtilities;
public class bug4382876 {
private static Robot r;
private static JFrame f;
private static JSlider slider;
private static boolean upFail;
private static boolean downFail;
public static void main(String[] args) throws Exception {
try {
SwingUtilities.invokeAndWait(() -> {
f = new JFrame("JSlider PageUp/Down Test");
f.setSize(300, 200);
f.setLocationRelativeTo(null);
f.setVisible(true);
slider = new JSlider(-1000, -900, -1000);
slider.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
slider.putClientProperty("JSlider.isFilled", Boolean.TRUE);
f.add(slider, BorderLayout.CENTER);
});
r = new Robot();
r.setAutoDelay(100);
r.waitForIdle();
r.delay(1000);
r.keyPress(KeyEvent.VK_PAGE_UP);
SwingUtilities.invokeAndWait(() -> {
if (slider.getValue() < -1000) {
System.out.println("PAGE_UP VAL: " + slider.getValue());
upFail = true;
}
});
if (upFail) {
writeFailImage();
throw new RuntimeException("Slider value did NOT change with PAGE_UP");
}
r.keyPress(KeyEvent.VK_PAGE_DOWN);
SwingUtilities.invokeAndWait(() -> {
if (slider.getValue() > -1000) {
System.out.println("PAGE_DOWN VAL: " + slider.getValue());
downFail = true;
}
});
if (downFail) {
writeFailImage();
throw new RuntimeException("Slider value did NOT change with PAGE_DOWN");
}
} finally {
SwingUtilities.invokeAndWait(() -> {
if (f != null) {
f.dispose();
}
});
}
}
private static void writeFailImage() throws IOException {
GraphicsConfiguration ge = GraphicsEnvironment
.getLocalGraphicsEnvironment().getDefaultScreenDevice()
.getDefaultConfiguration();
BufferedImage failImage = r.createScreenCapture(ge.getBounds());
ImageIO.write(failImage, "png", new File("failImage.png"));
}
}

View File

@ -0,0 +1,95 @@
/*
* Copyright (c) 2004, 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
* 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.
*/
/*
* @test
* @bug 4991587
* @requires (os.family == "windows")
* @summary Tests that disabled JButton text is positioned properly in Windows L&F
* @modules java.desktop/com.sun.java.swing.plaf.windows
* @library /java/awt/regtesthelpers
* @build PassFailJFrame
* @run main/manual bug4991587
*/
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.UIManager;
import com.sun.java.swing.plaf.windows.WindowsButtonUI;
public class bug4991587 {
static final String INSTRUCTIONS = """
There are two buttons: enabled (left) and disabled (right).
Ensure that the disabled button text is painted entirely
inside the blue bounding rectangle, just like the enabled
button (use it as an example of how this should look like).
""";
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
PassFailJFrame.builder()
.title("bug4991587 Test Instructions")
.instructions(INSTRUCTIONS)
.columns(50)
.testUI(bug4991587::createUI)
.build()
.awaitAndCheck();
}
static JFrame createUI() {
JFrame f = new JFrame("Disabled JButton Text Test");
f.setLayout(new FlowLayout());
f.setSize(400, 100);
JButton button1 = new JButton("\u0114 Enabled JButton");
button1.setUI(new MyButtonUI());
f.add(button1);
JButton button2 = new JButton("\u0114 Disabled JButton");
button2.setEnabled(false);
button2.setUI(new MyButtonUI());
f.add(button2);
return f;
}
static class MyButtonUI extends WindowsButtonUI {
protected void paintText(Graphics g, AbstractButton b,
Rectangle textRect, String text) {
g.setColor(Color.blue);
g.drawRect(textRect.x,
textRect.y,
textRect.width + 1, // add 1 for the shadow, otherwise it
// will be painted over the textRect
textRect.height);
super.paintText(g, b, textRect, text);
}
}
}