RFR: 8339561: The test/jdk/java/awt/Paint/ListRepaint.java may fail after JDK-8327401
Alexey Ivanov
aivanov at openjdk.org
Mon Sep 9 20:25:12 UTC 2024
On Wed, 4 Sep 2024 20:50:38 GMT, Sergey Bylokhov <serb at openjdk.org> wrote:
> Several tests modified by https://github.com/openjdk/jdk/pull/19339 have been tweaked, see inline comments.
>
> Notes:
> * We have a few XXXRepaint.java tests and in this patch, I updated all of them to follow the change added to the ListRepaint.java
>
> @azvegint @aivanov-jdk please take a look.
Changes requested by aivanov (Reviewer).
test/jdk/java/awt/List/KeyEventsTest/KeyEventsTest.java line 53:
> 51:
> 52: public class KeyEventsTest {
> 53: private volatile TestState currentState;
I'd rather not declare it a `volatile`. It could give a false impression of being thread-safe but it is not. The `volatile` modifier has a meaning only when it's written and read subsequently. If the reference doesn't change, it has no effect on the visibility of the internal object state.
The value is assigned to `currentState` while holding a lock `LOCK`.
At the same time, `currentState.setAction(true)` is called without any synchronisation and adding `volatile` won't make the change of the state thread-safe.
test/jdk/java/awt/Paint/ButtonRepaint.java line 35:
> 33: public final class ButtonRepaint extends Button {
> 34:
> 35: public static void main(final String[] args) {
Could expand imports, remove `@author` tag and the second `*` from `/**`?
test/jdk/java/awt/Paint/CheckboxRepaint.java line 34:
> 32: public final class CheckboxRepaint extends Checkbox {
> 33:
> 34: public static void main(final String[] args) {
Could expand imports, remove `@author` tag and the second `*` from `/**`?
test/jdk/java/awt/Paint/LabelRepaint.java line 37:
> 35: public final class LabelRepaint extends Label {
> 36:
> 37: public static void main(final String[] args) {
Could you remove `@author` tag, update copyright year?
test/jdk/java/awt/Paint/ListRepaint.java line 35:
> 33: * @author Sergey Bylokhov
> 34: */
> 35: public final class ListRepaint extends List {
Could you remove `@author` tag and the second `*` from `/**`?
test/jdk/javax/swing/JButton/bug4490179.java line 56:
> 54: try {
> 55: SwingUtilities.invokeAndWait(() -> {
> 56: frame = new JFrame("bug4490179");
Instead of three volatile fields — `pt`, `buttonW`, `buttonH` — there could be only one:
SwingUtilities.invokeAndWait(() -> {
Point loc = button.getLocationOnScreen();
Dimension size = button.getSize();
pt = new Point(loc.x + size.width / 2,
loc.y + size.height / 2);
});
I think this better conveys the idea, less variables / fields to track in your mind.
test/jdk/javax/swing/JButton/bug4490179.java line 61:
> 59: button.addActionListener(new ActionListener() {
> 60: public void actionPerformed(ActionEvent e) {
> 61: passed = false;
Maybe use two `CountDownLatch`es:
if ((e.getModifiers() & InputEvent.BUTTON1_MASK)
!= InputEvent.BUTTON1_MASK) {
wrongMouseButton.countDown();
} else {
mouseButton1.countDown();
}
Then in main:
robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK);
// robot.delay(3000);
if (wrongMouseButton.await(2, TimeUnit.SECONDS)) {
// Restore robot state
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
throw new RuntimeException("ActionEvent delivered from mouse button 3");
}
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
if (mouseButton1.await(2, TimeUnit.SECONDS)) {
throw new RuntimeException("ActionEvent not delivered from mouse button 1");
}
test/jdk/javax/swing/JButton/bug4490179.java line 62:
> 60: public void actionPerformed(ActionEvent e) {
> 61: passed = false;
> 62: }
The updated code here is correct; Alexander has restored the condition that was present in the original test which was closed-source and manual.
However, it may be not necessary. Instead, the test should fail immediately if `ActionEvent` contains anything but `BUTTON1_DOWN_MASK`. (Well, cleaning up robot state to release mouse buttons is a good thing to do.)
test/jdk/javax/swing/JButton/bug4490179.java line 89:
> 87: robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
> 88:
> 89: if (!result) {
Perhaps, we should ensure that an `ActionEvent` gets delivered at this point. Is it expected or not?
test/jdk/javax/swing/plaf/basic/BasicMenuUI/4983388/bug4983388.java line 97:
> 95: });
> 96:
> 97: if (!bMenuSelected) {
Could you also expand imports and remove `@author` tag?
-------------
PR Review: https://git.openjdk.org/jdk/pull/20861#pullrequestreview-2290709302
PR Review Comment: https://git.openjdk.org/jdk/pull/20861#discussion_r1750819337
PR Review Comment: https://git.openjdk.org/jdk/pull/20861#discussion_r1750830425
PR Review Comment: https://git.openjdk.org/jdk/pull/20861#discussion_r1750831557
PR Review Comment: https://git.openjdk.org/jdk/pull/20861#discussion_r1750833000
PR Review Comment: https://git.openjdk.org/jdk/pull/20861#discussion_r1750842554
PR Review Comment: https://git.openjdk.org/jdk/pull/20861#discussion_r1750877763
PR Review Comment: https://git.openjdk.org/jdk/pull/20861#discussion_r1750872680
PR Review Comment: https://git.openjdk.org/jdk/pull/20861#discussion_r1750863160
PR Review Comment: https://git.openjdk.org/jdk/pull/20861#discussion_r1750857895
PR Review Comment: https://git.openjdk.org/jdk/pull/20861#discussion_r1750879942
More information about the client-libs-dev
mailing list