RFR: JDK-8282046: Create a regression test for CCC8000326

Alexey Ivanov aivanov at openjdk.java.net
Mon Feb 21 21:05:53 UTC 2022


On Thu, 17 Feb 2022 09:56:45 GMT, Srinivas Mandalika <smandalika at openjdk.org> wrote:

> Create a regression test for CCC8000326
> 
> Issue is identified by [JDK-8000326](https://bugs.openjdk.java.net/browse/JDK-8000326), which identifies that after focus moves into JMenuBar, whose focus traversal key is disabled by default, it never moves to other focusable component.
>  
> By default, pressing the Tab key does not transfer focus from a JMenuBar which is added to a container together with other Swing components, because the focusTraversalKeysEnabled property of JMenuBar is set to false. To resolve this, you should call the JMenuBar.setFocusTraversalKeysEnabled(true) method.
>  
> The test verifies focus traversal for the above described scenario.

Changes requested by aivanov (Reviewer).

test/jdk/java/awt/Focus/CCC8000326/CCC8000326.java line 46:

> 44: import javax.swing.SwingUtilities;
> 45: 
> 46: public class CCC8000326 {

I suggest giving a descriptive class name. Please omit `CCC` from the path: `…/Focus/8000326/TestName.java`.

test/jdk/java/awt/Focus/CCC8000326/CCC8000326.java line 49:

> 47: 
> 48:     private static JFrame jFrame;
> 49:     private static Component currentFocusOwner;

Both `jFrame` and `currentFocusOwner` should be declared `volatile`, both accessed from different threads.

test/jdk/java/awt/Focus/CCC8000326/CCC8000326.java line 61:

> 59:             Component lastFocusOwner = null;
> 60:             do {
> 61:                 SwingUtilities.invokeAndWait(() -> {

You should call `robot.waitForIdle();` as the first statement inside the loop: it'll handle both the initial iteration and the following ones to allow the EDT to process `Tab` key.

The call to `waitForIdle` at line 64 after getting the focus owner seems redundant because you don't modify the state of the UI on line 62 but only read its current state.

test/jdk/java/awt/Focus/CCC8000326/CCC8000326.java line 75:

> 73:             } while (currentFocusOwner != jFrame);
> 74:         } finally {
> 75:             jFrame.dispose();

Must be called on EDT.

test/jdk/java/awt/Focus/CCC8000326/CCC8000326.java line 105:

> 103: 
> 104:         CCC8000326.doTest();
> 105: 

Suggestion:

        doTest();

-------------

PR: https://git.openjdk.java.net/jdk/pull/7512



More information about the client-libs-dev mailing list