RFR: 8342098: Write a test to compare the images [v3]
Alexey Ivanov
aivanov at openjdk.org
Mon Oct 21 13:57:25 UTC 2024
On Mon, 21 Oct 2024 04:16:54 GMT, Abhishek Kumar <abhiscxk at openjdk.org> wrote:
>> Naveen Narayanan has updated the pull request incrementally with one additional commit since the last revision:
>>
>> 8342098: Updated review comments
>
> test/jdk/java/awt/Robot/ScreenCaptureRobotTest.java line 70:
>
>> 68: Graphics g = realImage.createGraphics();
>> 69: g.setColor(Color.yellow);
>> 70: g.fillRect(0, 0, 200, 100);
>
> You may define `rect_width` and `rect_height` variable with 200 and 100 respectively.
> These numbers are used more than once and you are trying to avoid magic numbers for better practice.
These are `IMAGE_WIDTH` and `IMAGE_HEIGHT` correspondingly, right?
> test/jdk/java/awt/Robot/ScreenCaptureRobotTest.java line 78:
>
>> 76:
>> 77: canvas = new ImageCanvas();
>> 78: canvas.setBackground(Color.YELLOW);
>
> Use either `Color.yellow` or `Color.YELLOW` for consistency.
The latter is better.
> `robot.waitForIdle()` should be followed by `robot.delay(delay)`.
Yes.
> you can get rid of delay variable, just used once.
I don't mind a constant to control the delay.
> test/jdk/java/awt/Robot/ScreenCaptureRobotTest.java line 102:
>
>> 100: String errorMessage = "FAIL : Captured Image is different from "
>> 101: + "the actual image";
>> 102: System.err.println("Test failed");
>
> I think you should save the images if image comparison fails, they can be used for diagnostic purpose.
> No need to define a `errorMessage` variable, can throw the error message directly.
>
> `System.err.println("Test failed");` look redundant to me.
Absolutely right! Save the images — it'll make your life easier when you need to analyse the test failure.
> test/jdk/java/awt/Robot/ScreenCaptureRobotTest.java line 125:
>
>> 123: capturedPixel = capturedImg.getRGB(i, j);
>> 124: realPixel = realImg.getRGB(i, j);
>> 125: if (capturedPixel != realPixel) {
>
> To optimize further, `capturedImg.getRGB(i, j)` and `realImg.getRGB(i, j)` can be directly evaluated inside if condition.
Yet, you'll be unable to print values unless you use `getRGB` again.
> test/jdk/java/awt/Robot/ScreenCaptureRobotTest.java line 131:
>
>> 129: }
>> 130: }
>> 131: return result;
>
> Suggestion:
>
> return true;
In fact, image comparison can be borrowed from the `Util` class (in Swing part):
https://github.com/openjdk/jdk/blob/1f3574855e79221739d8800235583b7c47ebae97/test/jdk/javax/swing/regtesthelpers/Util.java#L59-L63
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/21524#discussion_r1808827599
PR Review Comment: https://git.openjdk.org/jdk/pull/21524#discussion_r1808830534
PR Review Comment: https://git.openjdk.org/jdk/pull/21524#discussion_r1808835292
PR Review Comment: https://git.openjdk.org/jdk/pull/21524#discussion_r1808841275
PR Review Comment: https://git.openjdk.org/jdk/pull/21524#discussion_r1808846337
PR Review Comment: https://git.openjdk.org/jdk/pull/21524#discussion_r1808857931
More information about the client-libs-dev
mailing list