Hello All,

I need one more review for this webrev.
http://cr.openjdk.java.net/~rchamyal/4769772/webrev.03/


Regards,
Rajeev Chamyal

-----Original Message-----
From: Alexey Ivanov 
Sent: 28 December 2015 19:15
To: Rajeev Chamyal; swing-dev@openjdk.java.net
Subject: Re: <Swing Dev> Review request for JDK-4769772 
JInternalFrame.setIcon(true) before JDesktopPane.add(JIF) causes wrong state

Hi Rajeev,

The updated version looks good to me.

Regards,
Alexey

On 28.12.2015 16:25, Rajeev Chamyal wrote:
> Hello Alexey,
>
> Thanks for the review. I have updated the code.
> http://cr.openjdk.java.net/~rchamyal/4769772/webrev.03/
>
> 1) I suggest moving these lines:
>
>               if (c == null || d == null) {
>                    return;
>                }
>
> above calculations of desktopIcon position. Why shall we waste time 
> calculating the position if we ignore the operation eventually?
> [Rajeev Chamyal] Updated the code as suggested.
>
> 2) Yet your new errorMessage filed has the same issue. It should be marked 
> volatile since it's accessed from different threads without synchronization. 
> Actually I suggest storing the exception itself rather than the error message 
> only. If exception is null, the test passed, if it's not, the test failed and 
> you just print the exception and re-throw it to the test framework. What do 
> you think?
> [Rajeev Chamyal] Test updated to make errorMessage volatile. errorMessage 
> stores all exception messages which may occur in different LAFs and on test 
> completion message is thrown with RunTimeException to mark test failure.

I got your idea: you iterate over all LaFs accumulating failed LaFs rather than 
fail the test at the first failure.

>
> 3) robot.delay(1000) in executeTest() is unnecessary, isn't it?
> [Rajeev Chamyal] Removed the robot.delay and added robot.waitForIdle() call.
>
>
> 4) You change the code for Synth and Aqua LaF but your test does not cover 
> them. I suggest iterating over all installed LaFs and run the test case in 
> all the LaFs.
> Does it make it sense to print the current LaF at least for the failed test?
>   [Rajeev Chamyal]  Test prints all exception messages along with  failed LaF 
> names on test completion.
>
> 5) Shouldn't test fail if PropertyVetoException is thrown for 
> f.setIcon(true)? I believe it's not expected in this case.
>   [Rajeev Chamyal]  PropertyVetoException exception is considered test 
> failure.
>
> Regards,
> Rajeev Chamyal
>
> -----Original Message-----
> From: Alexey Ivanov
> Sent: 28 December 2015 16:53
> To: Rajeev Chamyal; swing-dev@openjdk.java.net
> Subject: Re: <Swing Dev> Review request for JDK-4769772 
> JInternalFrame.setIcon(true) before JDesktopPane.add(JIF) causes wrong 
> state
>
> Hi Rajeev,
>
> Thank you for updating the code and the test.
>
> Please see my comments inline.
>
> On 28.12.2015 10:37, Rajeev Chamyal wrote:
>> Hello Alexey,
>>
>> Thanks for the review. I have updated the code as suggested.
>> http://cr.openjdk.java.net/~rchamyal/4769772/webrev.02/
>> Please see response to questions inline.
>>
>> Regards,
>> Rajeev Chamyal
>>
>> -----Original Message-----
>> From: Alexey Ivanov
>> Sent: 25 December 2015 18:14
>> To: Rajeev Chamyal; swing-dev@openjdk.java.net
>> Subject: Re: <Swing Dev> Review request for JDK-4769772
>> JInternalFrame.setIcon(true) before JDesktopPane.add(JIF) causes 
>> wrong state
>>
>> Hi Rajeev,
>>
>> Thank you for updating the code.
>>
>> I have a couple more questions though.
>>
>> 1. SynthDesktopPaneUI
>> What is the purpose of this line?
>>        d.setBounds(r.x, r.y, r.width, r.height);
>>
>> Since d is a JDesktopPane which contains the frame, you change the location 
>> and size of the desktop pane to those of the iconified frame.
>> It doesn't seem right to me. Could you please clarify your intention?
>> [Rajeev Chamyal] It's a typo updated the code. We need to set bounds for 
>> desktopIcon instead of desktop pane.
> I suggest moving these lines:
>
>               if (c == null || d == null) {
>                    return;
>                }
>
> above calculations of desktopIcon position. Why shall we waste time 
> calculating the position if we ignore the operation eventually?
>> 2. dispose() method is never used in the test, so it could be removed.
>> [Rajeev Chamyal] Removed from test code.
>>
>> 3. Since testFailed field is accessed from different threads, it should be 
>> marked volatile.
>> [Rajeev Chamyal] Test updated to check all LAF. testFailed variable is not 
>> used now.
> Yet your new errorMessage filed has the same issue. It should be marked 
> volatile since it's accessed from different threads without synchronization. 
> Actually I suggest storing the exception itself rather than the error message 
> only. If exception is null, the test passed, if it's not, the test failed and 
> you just print the exception and re-throw it to the test framework. What do 
> you think?
>> 4. robot.delay(1000) in executeTest() is unnecessary, isn't it?
>> [Rajeev Chamyal]  As its UI test so added delay for user to check visually 
>> as well.
> Think about it this way: you have, let's say, 20 automated UI tests which are 
> similar to this one. There are five LaFs available on Windows, so the test 
> takes at least 12 seconds. Thus you need at least 4 minutes to execute all 20 
> tests which is spent in delays. I don't think it's good.
>
> So I propose to remove all delays. If the test fails, the user could add a 
> delay to visually inspect the result of the test.
>
> At the same time, to make test more stable, you should keep
>
> robot.waitForIdle();
>
> after createUI() which was in the test code in the previous webrevs.
>> 5. You change the code for Synth and Aqua LaF but your test does not cover 
>> them. I suggest iterating over all installed LaFs and run the test case in 
>> all the LaFs.
>> [Rajeev Chamyal]  Updated the test for all LAF's
> Does it make it sense to print the current LaF at least for the failed test?
>> 6. Shouldn't test fail if PropertyVetoException is thrown for 
>> f.setIcon(true)? I believe it's not expected in this case.
>> [Rajeev Chamyal]  Updated code. But this exception is not expected.
> Since this exception is not expected, it could be considered a test failure.
>
> Regards,
> Alexey
>> 7. Probably any exception thrown during test execution should also be 
>> considered as failure, otherwise catch in executeTest().Runnable{}.run() is 
>> redundant.
>> [Rajeev Chamyal] Test code is updated to handle all exceptions as failures.
>>
>> Regards,
>> Alexey
>>
>> On 24.12.2015 10:19, Rajeev Chamyal wrote:
>>> Hello Alexey,
>>>
>>> Thanks for the review.
>>> I have updated webrev as per review comments.
>>>
>>> http://cr.openjdk.java.net/~rchamyal/4769772/webrev.01/
>>>
>>> Regards,
>>> Rajeev Chamyal
>>>
>>> -----Original Message-----
>>> From: Alexey Ivanov
>>> Sent: 23 December 2015 19:27
>>> To: swing-dev@openjdk.java.net
>>> Subject: Re: <Swing Dev> Review request for JDK-4769772
>>> JInternalFrame.setIcon(true) before JDesktopPane.add(JIF) causes 
>>> wrong state
>>>
>>> Hi Rajeev,
>>>
>>> One more comment:
>>> You should call dispose() in finally block in main so that the frame is 
>>> closed automatically if the test fails.
>>>
>>> Regards,
>>> Alexey
>>>
>>> On 23.12.2015 16:46, Alexey Ivanov wrote:
>>>> Hi Rajeev,
>>>>
>>>> There's a potential NullPointerException in this line of
>>>> BasicInternalFrameUI.java:
>>>>        if(value.equals(Boolean.FALSE))
>>>>
>>>> I suggest eliminating it using this construct:
>>>>        if (Boolean.FALSE.equals(value))
>>>>
>>>> This way the code is safer.
>>>>
>>>>
>>>> Can the test be simplified? Is it really required to create menu 
>>>> and use robot to invoke commands?
>>>> Wouldn't it be enough to programmatically add minimized internal 
>>>> frame and then check its properties?
>>>>
>>>> JFrame in test should also be instantiated on EDT, in createUI() method.
>>>>
>>>>
>>>> And a general recommendation to follow Java Coding Style [1] and in 
>>>> particular to add a space [2] after 'if',  after comma in argument 
>>>> lists, and after cast operator.
>>>>
>>>> Regards,
>>>> Alexey
>>>>
>>>> [1] http://www.oracle.com/technetwork/java/codeconvtoc-136057.html
>>>> [2]
>>>> http://www.oracle.com/technetwork/java/javase/documentation/codecon
>>>> v
>>>> e
>>>> n
>>>> tions-141388.html#682
>>>>
>>>> On 18.12.2015 11:44, Rajeev Chamyal wrote:
>>>>> Hello All,
>>>>>
>>>>> Please review the following fix for Jdk9:
>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-4769772
>>>>>
>>>>> Webrev:http://cr.openjdk.java.net/~rchamyal/4769772/webrev.00/
>>>>> <http://cr.openjdk.java.net/%7Erchamyal/4769772/webrev.00/>
>>>>>
>>>>> Issue: Iconifying a frame before adding it to desktop pane is not 
>>>>> working.
>>>>>
>>>>> Cause: Setting setIcon property of a JInternalFrame before 
>>>>> addition to desktop pane fails to find the desktop as a result its 
>>>>> always in maximized state.
>>>>> Fix: Added method to check if frame is already iconified before 
>>>>> addition.
>>>>> Verified the fix on windows,Ubuntu and Mac with all layouts.
>>>>> Also, removed unused imports from JDesktopPane.java as part of fix.
>>>>> Regards,
>>>>> Rajeev Chamyal
>>>>>

Reply via email to