You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (Jira)" <ji...@apache.org> on 2020/07/24 12:07:00 UTC
[jira] [Commented] (GROOVY-9655) Groovy 3.0.5 regression with the
"with" keyword
[ https://issues.apache.org/jira/browse/GROOVY-9655?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17164401#comment-17164401 ]
Eric Milles commented on GROOVY-9655:
-------------------------------------
You can add "owner." or "this." to the variable for expected resolution.
The variable expression "BOOKING" is written as a getProperty against the closure. In this case, you have a map as the closure's delegate, which answers for all property names, so the owner is never checked.
This may seem like a regression, but "with" implements a resolve strategy of delegate first, so this new behavior is more correct. If the map delegate was altered (maybe inside with) to throw MissingPropertyException when a key is not present, the resolve strategy would continue onwards to the enclosing type.
> Groovy 3.0.5 regression with the "with" keyword
> -----------------------------------------------
>
> Key: GROOVY-9655
> URL: https://issues.apache.org/jira/browse/GROOVY-9655
> Project: Groovy
> Issue Type: Bug
> Affects Versions: 3.0.5, 2.5.13
> Reporter: Henrik
> Assignee: Eric Milles
> Priority: Critical
> Labels: regression
>
> Since GROOVY-7701 was the only issue relating to {{with}} in Groovy 3.0.5, I think that fix might have broken behaviour in Spock (using 2.0-M3):
> This works in 3.0.4:
> {code:java}
> static BOOKING = 123
> def 'get stuff'() {
> given:
> def stuff = [ booking: 123 ]
> expect:
> with(stuff) {
> booking == BOOKING
> }
> }
> {code}
> But fails in 3.0.5 with:
> {code:java}
> Condition not satisfied:
> booking == BOOKING
> | | |
> 123 | null
> false
> {code}
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)