On Thu, 25 May 2023 11:24:42 GMT, Alexey Ivanov <aiva...@openjdk.org> wrote:

>> @lawrence-andrew 
>> 
>> Here is a consolidated review and few suggestions -
>> 
>> - Firstly, the use of builder pattern for screenshot capability looks well 
>> structured and clean. It is easy for extensibility and does not break the 
>> existing functionality. That being said, the screenshot capability can 
>> additionally be helpful for automated tests too.
>> 
>> - Screenshot capability might be more helpful in case of Client CI / 
>> Automated Testing since this feature will make it easier to capture 
>> screenshots at different instances when running the test. There are few 
>> automated tests currently that capture screenshot when the test fails. The 
>> screen capture code is repetitive and redundant and can be changed to use 
>> the common functionality that you have designed. 
>> 
>> - In case it is decided to extend this functionality to automated tests then 
>> having this is `regtesthelpers/Util` instead of PassFailJFrame would be more 
>> appropriate since PassFailJFrame is more of a manual framework and moving 
>> the functionality to Util will look cleaner.
>> 
>> - Is the screenshot saved to the test source or jtreg scratch directory? 
>> Saving it to scratch would be ideal.
>> 
>> - Additionally you could add the screenshot img filename to the JOptionPane 
>> that shows up the "Screenshot successfully captured" message.
>
>> Here is a consolidated review and few suggestions -
>> 
>> Firstly, the use of builder pattern for screenshot capability looks well 
>> structured and clean. It is easy for extensibility and does not break the 
>> existing functionality.
> 
> This is the idea. New tests can use newer syntax, the old tests don't need 
> any modifications.
> 
> With a couple more updates which are planned, the usage will be even more 
> streamlined.
> 
>> That being said, the screenshot capability can additionally be helpful for 
>> automated tests too.
> 
> It's a good point. However, taking screenshots doesn't require a lot of code 
> and the screenshot could be limited to the relevant portion of the screen or 
> displayed UI.
> 
>> Screenshot capability might be more helpful in case of Client CI / Automated 
>> Testing since this feature will make it easier to capture screenshots at 
>> different instances when running the test. There are few automated tests 
>> currently that capture screenshot when the test fails. The screen capture 
>> code is repetitive and redundant and can be changed to use the common 
>> functionality that you have designed.
> 
> This is one of the problems… A really stand-alone test which has _no 
> dependencies_ is easier to run: compile and run; as of Java 17 you can even 
> skip the compile step and pass the `.java` file directly to `java` launcher 
> which compiles it for you without creating the external `.class` file(s).
> 
> If there are dependencies, you have to employ _tricks_ to run the test.
> 
> Overall, all GUI tests are somewhat repetitive, tests have duplicate code. It 
> is possible to abstract this into helper classes. In fact, we have such 
> classes: 
> [`SwingTestHelper`](https://github.com/openjdk/jdk/blob/master/test/jdk/javax/swing/regtesthelpers/SwingTestHelper.java),
>  
> [`JRobot`](https://github.com/openjdk/jdk/blob/master/test/jdk/javax/swing/regtesthelpers/JRobot.java),
>  already mentioned 
> [`Util`](https://github.com/openjdk/jdk/blob/master/test/jdk/javax/swing/regtesthelpers/Util.java)…
> 
> I don't say it's bad. I'm for avoiding code duplication. Yet I also 
> appreciate the easiest way possible to run a test. The simpler and easier, 
> the better. It's especially important during code reviews.
> 
>> In case it is decided to extend this functionality to automated tests then 
>> having this is `regtesthelpers/Util` instead of PassFailJFrame would be more 
>> appropriate since PassFailJFrame is more of a manual framework and moving 
>> the functionality to Util will look cleaner.
> 
> This can easily be done in a follow-...

@aivanov-jdk 
> This can easily be done in a follow-up PR.
> 
> The only thing that can really be abstracted is the call to 
> `Robot.createScreenCapture` or `Robot.createMultiResolutionScreenCapture` and 
> saving to a file. Well, yes, taking the screenshots of the entire screen can 
> be a utility method.

Sounds good.

> It saves the images to _the current directory_. When the test is run by 
> jtreg, the current directory is the `scratch` directory.

For me, the generated screenshot was being saved to the test folder, as I was 
running it as standalone test. I had issues running it as jtreg test, but this 
is probably due to some config issue on my end and nothing related to code 
changes.

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

PR Comment: https://git.openjdk.org/jdk/pull/14094#issuecomment-1563284316

Reply via email to