RFR: 8244993: Revert changes to OutputAnalyzer stderrShouldBeEmptyIgnoreVMWarnings() that allow version strings
David Holmes
david.holmes at oracle.com
Sun May 24 23:43:45 UTC 2020
On 24/05/2020 3:06 am, Chris Plummer wrote:
> On 5/23/20 6:03 AM, David Holmes wrote:
>> Hi Chris,
>>
>> On 23/05/2020 4:50 am, Chris Plummer wrote:
>>> Hi Daniil,
>>>
>>> There is one reference to "jvmwarningmsg" that occurs before it is
>>> declared while all the rest all come after. It probably would make
>>> sense to move its declaration up near the top of the file.
>>>
>>> 92 private static void matchListedProcesses(OutputAnalyzer
>>> output) {
>>> 93 output.stdoutShouldMatchByLine(JCMD_LIST_REGEX)
>>> 94 .stderrShouldBeEmptyIgnoreVMWarnings();
>>> 95 }
>>>
>>> We probably use this coding pattern all over the place, but I think
>>> it just leads to less readable code. Any reason not to use:
>>>
>>> 92 private static void matchListedProcesses(OutputAnalyzer
>>> output) {
>>> 93 output.stdoutShouldMatchByLine(JCMD_LIST_REGEX);
>>> 94 output.stderrShouldBeEmptyIgnoreVMWarnings();
>>> 95 }
>>>
>>> I just don't see the point of the chaining, and don't understand why
>>> all these OutputAnalyzer methods return the "this" object in the
>>> first place. Maybe I'm missing something.
>>
>> They return "this" precisely so that you can chain. The API was
>> designed for a style that allows:
>>
>> output.shouldContain(x).shouldNotContain(y).shouldContain(z) ...
>>
>> to avoid the repetition of "output".
> Yeah, I get that, but I never did like this pattern. I just don't find
> it as readable. For one, there's no conveyance of the method return
> type, not just because of the chaining, but also because the method name
> does not imply a return type. Chaining like
> getMethod().getClass().getName() is fine, because there are implied
> return types in the method names, and they clearly are being called for
> the purpose of returning a type. But when the return type is there
> solely for the purpose of chaining, it's not as obvious what is going on.
>
> Your example is easier to read because the method names are short,
> readily identified as related, and you made them all fit on one line
> with shortened arguments.
Which is really an anti-pattern for this style of API :)
> That's not the case with Daniil's code. I just
> don't see the argument for saying that:
>
> 93 output.stdoutShouldMatchByLine(JCMD_LIST_REGEX)
> 94 .stderrShouldBeEmptyIgnoreVMWarnings();
Note the '.' should line up
> Is somehow better than:
>
> 93 output.stdoutShouldMatchByLine(JCMD_LIST_REGEX);
> 94 output.stderrShouldBeEmptyIgnoreVMWarnings();
>
> I don't have to look twice at the second version (or be familiar with
> the APIs being used) to know what's going on.
All a matter of personal preference. :)
Cheers,
David
> Chris
>>
>> David
>> -----
>>
>> I guess maybe there are cases where
>>> the OutputAnalyzer object is not already in a local variable, adding
>>> some value to the chaining, but that's not the case here, and I think
>>> if it were the case it would be more readable just to stick the
>>> OutputAnalyzer object in a local. There one other case of this:
>>>
>>> 154 private static void matchPerfCounters(OutputAnalyzer output) {
>>> 155 output.stdoutShouldMatchByLine(PERF_COUNTER_REGEX,null,
>>> 156 PERF_COUNTER_REGEX)
>>> 157 .stderrShouldBeEmptyIgnoreVMWarnings();
>>> 158 }
>>>
>>> I think you can also add spaces after the commas, and probably make
>>> the first stdoutShouldMatchByLine() one line.
>>>
>>> thanks,
>>>
>>> Chris
>>>
>>> On 5/21/20 10:06 PM, Daniil Titov wrote:
>>>> Please review a webrev [1] that reverts the changes done in
>>>> jdk.test.lib.process.OutputAnalyzer in [3].
>>>>
>>>> Change [3] modified OutputAnalyzer
>>>> stderrShouldBeEmptyIgnoreVMWarnings() methods to ignore also VM
>>>> version strings . The current webrev [1] reverts this change and
>>>> instead makes the tests that expects an empty stderr from launched
>>>> j-* tools to filter out '-showversion' from test options when
>>>> forwarding test VM option to j*-tools.
>>>>
>>>> Testing: Mach5 tier1-tier5 tests passed successfully. Tier6-tier7
>>>> tests are in progress.
>>>>
>>>> [1] Webrev: http://cr.openjdk.java.net/~dtitov/8244993/webrev.01
>>>> [2] Jira issue: https://bugs.openjdk.java.net/browse/JDK-8244993
>>>> [3] https://bugs.openjdk.java.net/browse/JDK-8242009
>>>>
>>>> Thank you,
>>>> Daniil
>>>>
>>>>
>>>
>>>
>
>
More information about the serviceability-dev
mailing list