RFR: 8342098: Write a test to compare the images [v3]
Alexey Ivanov
aivanov at openjdk.org
Mon Oct 21 13:57:24 UTC 2024
On Fri, 18 Oct 2024 15:54:24 GMT, Naveen Narayanan <duke at openjdk.org> wrote:
>> This testcase checks for the following:
>>
>> 1. An image is drawn on the screen and a portion of it is captured using a Robot. It is tested by comparing whether the captured image is same as the source image.
>>
>> Testing:
>> Tested using Mach5(20 times per platform) in MacOS, Linux and Windows. Seen all tests passing.
>
> Naveen Narayanan has updated the pull request incrementally with one additional commit since the last revision:
>
> 8342098: Updated review comments
Changes requested by aivanov (Reviewer).
test/jdk/java/awt/Robot/ScreenCaptureRobotTest.java line 1:
> 1: /*
Does this test has a value at all?
Does this test verifies the functionality of the `Robot` class? Many other tests rely on `Robot.createScreenCapture` to capture part of the screen. If `Robot` captures something unexpected, all such tests should fail.
test/jdk/java/awt/Robot/ScreenCaptureRobotTest.java line 43:
> 41: * @summary Verify that the image captured from the screen using a Robot
> 42: * and the source image are same.
> 43: * @run main ScreenCaptureRobotTest
Suggestion:
* @run main/othervm -Dsun.java2d.uiScale=1 ScreenCaptureRobotTest
Otherwise the test would fail if run in a High DPI environment. [Phil mentioned it](https://github.com/openjdk/jdk/pull/21524#discussion_r1805263931).
test/jdk/java/awt/Robot/ScreenCaptureRobotTest.java line 69:
> 67:
> 68: Graphics g = realImage.createGraphics();
> 69: g.setColor(Color.yellow);
Please use upper-case color constants.
test/jdk/java/awt/Robot/ScreenCaptureRobotTest.java line 72:
> 70: g.fillRect(0, 0, 200, 100);
> 71: g.setColor(Color.red);
> 72: g.setFont(new Font("SansSerif", Font.BOLD, 20));
Suggestion:
g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 20));
Use the constant for the logical font.
test/jdk/java/awt/Robot/ScreenCaptureRobotTest.java line 82:
> 80: frame.add(canvas);
> 81: frame.setSize(300, 200);
> 82: frame.setLocation(100, 100);
Is it important?
I'd rather put the frame into the centre of the screen as most new tests do.
test/jdk/java/awt/Robot/ScreenCaptureRobotTest.java line 84:
> 82: frame.setLocation(100, 100);
> 83: frame.setVisible(true);
> 84: canvas.requestFocus();
Is `canvas` focusable? I guess it's not, then this statement doesn't make sense.
test/jdk/java/awt/Robot/ScreenCaptureRobotTest.java line 94:
> 92:
> 93: Point pnt = canvas.getLocationOnScreen();
> 94: Rectangle rect = new Rectangle(pnt.x + 10, pnt.y + 10, 200, 100);
Why are coordinates of the start of the canvas are offset by 10 pixels but the size isn't. The image is 200×100, then you capture 10 pixels on the right and bottom which belong to whatever is on the screen in this area.
test/jdk/java/awt/Robot/ScreenCaptureRobotTest.java line 137:
> 135: @Override
> 136: public void paint(Graphics g) {
> 137: g.drawImage(displayImage, 10, 10, this);
You can use `realImage` here. Both fields point to the same object anyway.
-------------
PR Review: https://git.openjdk.org/jdk/pull/21524#pullrequestreview-2382115196
PR Review Comment: https://git.openjdk.org/jdk/pull/21524#discussion_r1808870689
PR Review Comment: https://git.openjdk.org/jdk/pull/21524#discussion_r1808874757
PR Review Comment: https://git.openjdk.org/jdk/pull/21524#discussion_r1808826430
PR Review Comment: https://git.openjdk.org/jdk/pull/21524#discussion_r1808829862
PR Review Comment: https://git.openjdk.org/jdk/pull/21524#discussion_r1808832519
PR Review Comment: https://git.openjdk.org/jdk/pull/21524#discussion_r1808833268
PR Review Comment: https://git.openjdk.org/jdk/pull/21524#discussion_r1808839354
PR Review Comment: https://git.openjdk.org/jdk/pull/21524#discussion_r1808862076
More information about the client-libs-dev
mailing list