You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@groovy.apache.org by Marcin Zajączkowski <ms...@wp.pl> on 2020/01/08 11:16:40 UTC
+= and -= no longer rejected in assertion statement in Groovy 3
Hi,
Playing with the failures which Groovy 3 brought to Spock tests itself,
I noticed that Groovy 3 no longer rejects += and -= if used in an
assertion statement:
> def a = 1
> assert a += 1 //passes
> assert a == 2 //passes
While it behaves consistently, I wonder if that change it was purposely
(it was failing in Groovy 2) or the check should be enhanced:
https://github.com/apache/groovy/commit/a17b9eb85835a5eaa306a893a0a8bcd51a49e299#diff-05fe8708ce3207739a2cb39a97426e8dR345
?
Marcin
--
https://blog.solidsoft.info/ - Working code is not enough
Re: += and -= no longer rejected in assertion statement in Groovy 3
Posted by Jochen Theodorou <bl...@gmx.org>.
Am 12.01.20 um 09:09 schrieb Daniel.Sun:
> In Java, `int a = 0; assert a+=1` will fail to compile because expecting
> boolean value, but `int a = 0; assert 0 == (a+=1)` is OK, so I think we
> forbidden assignments seems not correct...
a long time ago we decided to no allow assignments in certain places
where a boolean is to be expected. That is the after the assert and in
the boolean part of the if. As soon as it gets down to a nested
expression we stop, but top-level we want to forbid it. Meaning
"if (a+=1)" and "assert a=1" should fail
bye Jochen
Re: += and -= no longer rejected in assertion statement in Groovy 3
Posted by "Daniel.Sun" <su...@apache.org>.
In Java, `int a = 0; assert a+=1` will fail to compile because expecting
boolean value, but `int a = 0; assert 0 == (a+=1)` is OK, so I think we
forbidden assignments seems not correct...
Cheers,
Daniel.Sun
-----
Apache Groovy committer & PMC member
Blog: http://blog.sunlan.me
Twitter: @daniel_sun
--
Sent from: http://groovy.329449.n5.nabble.com/Groovy-Dev-f372993.html
Re: += and -= no longer rejected in assertion statement in Groovy 3
Posted by MG <mg...@arscreat.com>.
Hmmm - to me an assertion should not have a side effect, so Groovy 2.x
rejecting code like that, where the side effect is easily detected,
seems proper to me...
(The fact that Groovy has a way of interpreting the non-Boolean result
as Boolean through the Groovy-truth rules you mention is of course
necessary to allow this statement to compile; that does however not
necessarily make it sufficient)
Cheers,
mg
On 08/01/2020 22:06, Søren Berg Glasius wrote:
> Hi Marcin,
>
> I think it makes sense, that it does not fail, as a +=1 returns 2
> which by Groovys asBoolean is true. I am more inclined to say that
> Groovy 2.x had a bug, that was accepted as a compile error.
>
> Just my two cents worth.
>
> Best regards / Med venlig hilsen,
> Søren Berg Glasius
>
> Hedevej 1, Gl. Rye, 8680 Ry, Denmark
> Mobile: +45 40 44 91 88, Skype: sbglasius
> --- Press ESC once to quit - twice to save the changes.
>
>
> Den ons. 8. jan. 2020 kl. 12.16 skrev Marcin Zajączkowski
> <mszpak@wp.pl <ma...@wp.pl>>:
>
> Hi,
>
> Playing with the failures which Groovy 3 brought to Spock tests
> itself,
> I noticed that Groovy 3 no longer rejects += and -= if used in an
> assertion statement:
>
> > def a = 1
> > assert a += 1 //passes
> > assert a == 2 //passes
>
> While it behaves consistently, I wonder if that change it was
> purposely
> (it was failing in Groovy 2) or the check should be enhanced:
> https://github.com/apache/groovy/commit/a17b9eb85835a5eaa306a893a0a8bcd51a49e299#diff-05fe8708ce3207739a2cb39a97426e8dR345
> ?
>
> Marcin
>
> --
> https://blog.solidsoft.info/ - Working code is not enough
>
Re: += and -= no longer rejected in assertion statement in Groovy 3
Posted by Søren Berg Glasius <so...@glasius.dk>.
Hi Marcin,
I think it makes sense, that it does not fail, as a +=1 returns 2 which by
Groovys asBoolean is true. I am more inclined to say that Groovy 2.x had a
bug, that was accepted as a compile error.
Just my two cents worth.
Best regards / Med venlig hilsen,
Søren Berg Glasius
Hedevej 1, Gl. Rye, 8680 Ry, Denmark
Mobile: +45 40 44 91 88, Skype: sbglasius
--- Press ESC once to quit - twice to save the changes.
Den ons. 8. jan. 2020 kl. 12.16 skrev Marcin Zajączkowski <ms...@wp.pl>:
> Hi,
>
> Playing with the failures which Groovy 3 brought to Spock tests itself,
> I noticed that Groovy 3 no longer rejects += and -= if used in an
> assertion statement:
>
> > def a = 1
> > assert a += 1 //passes
> > assert a == 2 //passes
>
> While it behaves consistently, I wonder if that change it was purposely
> (it was failing in Groovy 2) or the check should be enhanced:
>
> https://github.com/apache/groovy/commit/a17b9eb85835a5eaa306a893a0a8bcd51a49e299#diff-05fe8708ce3207739a2cb39a97426e8dR345
> ?
>
> Marcin
>
> --
> https://blog.solidsoft.info/ - Working code is not enough
>
Re: += and -= no longer rejected in assertion statement in Groovy 3
Posted by Marcin Zajączkowski <ms...@wp.pl>.
On 2020-01-08 14:41, Daniel.Sun wrote:
> Hi Marcin,
>
> Thanks for your reporting the issue. Would you mind to submit a JIRA
> ticket to track it?
Done: https://issues.apache.org/jira/browse/GROOVY-9360
Marcin
--
https://blog.solidsoft.info/ - Working code is not enough
Re: += and -= no longer rejected in assertion statement in Groovy 3
Posted by "Daniel.Sun" <su...@apache.org>.
Hi Marcin,
Thanks for your reporting the issue. Would you mind to submit a JIRA
ticket to track it?
Cheers,
Daniel.Sun
-----
Apache Groovy committer & PMC member
Blog: http://blog.sunlan.me
Twitter: @daniel_sun
--
Sent from: http://groovy.329449.n5.nabble.com/Groovy-Dev-f372993.html