RFR: 8328242: Add a log area to the PassFailJFrame

Alexey Ivanov aivanov at openjdk.org
Fri Mar 15 13:37:39 UTC 2024


On Fri, 15 Mar 2024 04:40:14 GMT, Alexander Zvegintsev <azvegint at openjdk.org> wrote:

> Often manual tests have a text area in the instruction window to print feedback from the test to be evaluated by a tester.
> I stumbled across another test that needed this, so I decided to make these changes a standard feature.
> 
> List of changes:
> * The log text area can be added below the `Pass` and `Fail` buttons panel.
> To do this, use the builder methods `logArea()`, `logArea(int rows)`.
> * `PassFailJFrame.log(message)`, `PassFailJFrame.logClear()` and `PassFailJFrame.logSet()` are added to control this text area. (maybe I missed something?)
> * added `invokeOnEDTUncheckedException` for easier use of logging methods
> 
> So typical usage would be like:
> 
>         PassFailJFrame
>                 .builder()
>                 .title("GetBoundsResizeTest Instructions")
>                 .instructions(INSTRUCTIONS)
>                 .rows(20)
>                 .columns(70)
>                 .logArea()
>                 .build()
>                 .awaitAndCheck();
> 
> 
> ----
> 
> //somewhere in event handlers:
> PassFailJFrame.log("Very important message");

Changes requested by aivanov (Reviewer).

test/jdk/java/awt/regtesthelpers/PassFailJFrame.java line 486:

> 484:             JPanel buttonsLogPanel = new JPanel();
> 485:             BoxLayout layout = new BoxLayout(buttonsLogPanel, BoxLayout.Y_AXIS);
> 486:             buttonsLogPanel.setLayout(layout);

You can use Box:
Suggestion:

            Box buttonsLogPanel = Box.createVerticalBox();

test/jdk/java/awt/regtesthelpers/PassFailJFrame.java line 489:

> 487: 
> 488:             buttonsLogPanel.add(buttonsPanel);
> 489:             buttonsLogPanel.add(new JScrollPane(logArea));

Suggestion:

            buttonsLogPanel.add(new JLabel("Log:"));
            buttonsLogPanel.add(new JScrollPane(logArea));

Add a header to explain the purpose of the component below?

test/jdk/java/awt/regtesthelpers/PassFailJFrame.java line 1088:

> 1086:     public static void log(String message) {
> 1087:         invokeOnEDTUncheckedException(() -> {
> 1088:             if (logArea != null) {

Should it throw `NullPointerException`? It's a developer error. If logging is used, it should be enabled; therefore throwing an exception rather than hiding the problem is reasonable, isn't it? Otherwise, the problem could remain unnoticed.

test/jdk/java/awt/regtesthelpers/PassFailJFrame.java line 1090:

> 1088:             if (logArea != null) {
> 1089:                 logArea.append(message + System.lineSeparator());
> 1090:             }

Suggestion:

            if (logArea != null) {
                logArea.append(message + "\n");
            }

Text components in Swing use `\n` as line separator.

test/jdk/java/awt/regtesthelpers/PassFailJFrame.java line 1109:

> 1107:      * Replaces the log area content with provided {@code text}, if enabled by
> 1108:      * {@link Builder#logArea()} or {@link Builder#logArea(int)}.
> 1109:      * @param text replacement

Suggestion:

     * @param text new text for log area

test/jdk/java/awt/regtesthelpers/PassFailJFrame.java line 1179:

> 1177:         /**
> 1178:          * Adds a log area below the "Pass", "Fail" buttons.
> 1179:          * <p> The log area can be controlled by {@link #log(String)},

Suggestion:

         * <p>
         * The log area can be controlled by {@link #log(String)},

Starting on the next line makes it easier to parse when reading the source code.

test/jdk/java/awt/regtesthelpers/PassFailJFrame.java line 1185:

> 1183:          */
> 1184:         public Builder logArea() {
> 1185:             this.addLogArea = true;

Suggestion:

            addLogArea = true;

I think the usage of `this.` is redundant when there's no naming conflict.

test/jdk/java/awt/regtesthelpers/PassFailJFrame.java line 1195:

> 1193:          *
> 1194:          * <p> The number of columns is taken from the number of
> 1195:          * columns in the instructional JTextArea.

This may be not what we want…

I'd like to get rid of specifying rows and columns for instructions, see [JDK-8328163](https://bugs.openjdk.org/browse/JDK-8328163). I can't remember why we decided to specify those explicitly.

On the other hand, if adjustment is required, `.columns` will do the job for both cases, so adding another parameter is likely an overkill.

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

PR Review: https://git.openjdk.org/jdk/pull/18319#pullrequestreview-1938932389
PR Review Comment: https://git.openjdk.org/jdk/pull/18319#discussion_r1526274310
PR Review Comment: https://git.openjdk.org/jdk/pull/18319#discussion_r1526277177
PR Review Comment: https://git.openjdk.org/jdk/pull/18319#discussion_r1526298831
PR Review Comment: https://git.openjdk.org/jdk/pull/18319#discussion_r1526280119
PR Review Comment: https://git.openjdk.org/jdk/pull/18319#discussion_r1526281419
PR Review Comment: https://git.openjdk.org/jdk/pull/18319#discussion_r1526284864
PR Review Comment: https://git.openjdk.org/jdk/pull/18319#discussion_r1526284131
PR Review Comment: https://git.openjdk.org/jdk/pull/18319#discussion_r1526293989


More information about the client-libs-dev mailing list