Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

8341982: Simplify JButton/bug4323121.java #1336

Closed
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 45 additions & 61 deletions test/jdk/javax/swing/JButton/bug4323121.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2023, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 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
@@ -24,102 +24,86 @@
/*
* @test
* @bug 4323121
* @summary Tests whether any button that extends JButton always
returns true for isArmed()
* @summary Tests whether a button model always returns true for isArmed()
* when mouse hovers over the button
* @key headful
* @run main bug4323121
*/

import java.awt.Graphics;
import java.awt.Point;
import java.awt.Robot;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.concurrent.CountDownLatch;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class bug4323121 {
import static java.util.concurrent.TimeUnit.SECONDS;

public final class bug4323121 {

static JFrame frame;
static testButton button;
static volatile Point pt;
static volatile int buttonW;
static volatile int buttonH;
static volatile boolean failed = false;
static JButton button;

static volatile Point buttonCenter;

private static final CountDownLatch mouseEntered = new CountDownLatch(1);

// Usage of this flag is thread-safe because of using the mouseEntered latch
private static boolean modelArmed;

public static void main(String[] args) throws Exception {
Robot robot = new Robot();
robot.setAutoDelay(100);

try {
SwingUtilities.invokeAndWait(() -> {
button = new JButton("gotcha");
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
if (button.getModel().isArmed()) {
modelArmed = true;
}
mouseEntered.countDown();
}
});

frame = new JFrame("bug4323121");
button = new testButton("gotcha");
frame.getContentPane().add(button);

frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});

robot.waitForIdle();
robot.delay(1000);

SwingUtilities.invokeAndWait(() -> {
pt = button.getLocationOnScreen();
buttonW = button.getSize().width;
buttonH = button.getSize().height;
Point location = button.getLocationOnScreen();
buttonCenter = new Point(location.x + button.getWidth() / 2,
location.y + button.getHeight() / 2);
});
robot.mouseMove(pt.x + buttonW / 2, pt.y + buttonH / 2);
robot.waitForIdle();
if (failed) {
throw new RuntimeException("Any created button returns " +
"true for isArmed()");

robot.mouseMove(buttonCenter.x, buttonCenter.y);

if (!mouseEntered.await(1, SECONDS)) {
throw new RuntimeException("Mouse entered event wasn't received");
}
if (modelArmed) {
throw new RuntimeException("getModel().isArmed() returns true "
+ "when mouse hovers over the button");
}
} finally {
SwingUtilities.invokeAndWait(() -> {
SwingUtilities.invokeAndWait(() -> {
if (frame != null) {
frame.dispose();
}
});
}
}

static class testButton extends JButton implements MouseMotionListener, MouseListener {
public testButton(String label) {
super(label);
addMouseMotionListener(this);
addMouseListener(this);
}

protected void paintComponent(Graphics g) {
super.paintComponent(g);
}

protected void paintBorder(Graphics g) {
}

public void mousePressed(MouseEvent e) {
}

public void mouseDragged(MouseEvent e) {
}

public void mouseMoved(MouseEvent e) {
}

public void mouseReleased(MouseEvent e) {
}

public void mouseEntered(MouseEvent e) {
if (getModel().isArmed()) {
failed = true;
}
}

public void mouseExited(MouseEvent e) {
}

public void mouseClicked(MouseEvent e) {
}
}
}