[ 
https://issues.apache.org/jira/browse/GROOVY-9369?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Marcin Zajaczkowski updated GROOVY-9369:
----------------------------------------
    Description: 
TL;TR. It is problematic in Groovy 3 to distinguish go.x and 
go.getProperty("x") in a call (at the level of an interceptor for a mocking 
system)?

A ticket to track problem raised using the [mailing 
list|[https://mail-archives.apache.org/mod_mbox/groovy-dev/202001.mbox/%3c54d78589-67e2-7c92-6512-240782960...@wp.pl%3e]]
 Quoted original concerns:

 
{quote}Working on the Spock adjustment to Groovy 3 I spotted that Groovy 3
 started for a property access go.x (go - some GroovyObject instance with
 a field "x") to call go.getProperty("x") instead of go.getX() directly
 (as it took place in Groovy 2). This broke tests for mocking with a
 property call (getX() is stubbed, but go.x is called) and forced me to
 detect getProperty("x") calls in a mock interceptor - to analyze deeper
 and check which method (here getter) is being called and if has been
 stubbed.

However, in addition, it should be possible to just stub direct
 go.getProperty("x") calls [1]. To do that, currently, I have to analyze
 a stack trace to detect groovy.lang.GroovyObject$getProperty.call() at
 the position -3 [2] (for direct go.getProperty("x") calls) and deeper
 process only the other calls (go.x). It seems to work, but it's quite
 ugly and fragile. I wonder, how to reliably differentiate those two
 types of calls?
 [1] -[ 
https://github.com/spockframework/spock/blob/1dd24a2251afe3151e04b50af8afb6285b236c76/spock-specs/src/test/groovy/org/spockframework/smoke/mock/JavaMocksForGroovyClasses.groovy#L75-L81|https://github.com/spockframework/spock/blob/1dd24a2251afe3151e04b50af8afb6285b236c76/spock-specs/src/test/groovy/org/spockframework/smoke/mock/JavaMocksForGroovyClasses.groovy#L75-L81]
 [2] -[ 
https://github.com/spockframework/spock/commit/1dd24a2251afe3151e04b50af8afb6285b236c76|https://github.com/spockframework/spock/commit/1dd24a2251afe3151e04b50af8afb6285b236c76]
{quote}

  was:
TL;TR. It is problematic in Groovy 3 to distinguish go.x and 
go.getProperty("x") in a call (at the level of an interceptor for a mocking 
system)?

A ticket to track problem raised using the [mailing 
list|[https://mail-archives.apache.org/mod_mbox/groovy-dev/202001.mbox/%3c54d78589-67e2-7c92-6512-240782960...@wp.pl%3e].]
 Quoted original concerns:

 
{quote}Working on the Spock adjustment to Groovy 3 I spotted that Groovy 3
 started for a property access go.x (go - some GroovyObject instance with
 a field "x") to call go.getProperty("x") instead of go.getX() directly
 (as it took place in Groovy 2). This broke tests for mocking with a
 property call (getX() is stubbed, but go.x is called) and forced me to
 detect getProperty("x") calls in a mock interceptor - to analyze deeper
 and check which method (here getter) is being called and if has been
 stubbed.

However, in addition, it should be possible to just stub direct
 go.getProperty("x") calls [1]. To do that, currently, I have to analyze
 a stack trace to detect groovy.lang.GroovyObject$getProperty.call() at
 the position -3 [2] (for direct go.getProperty("x") calls) and deeper
 process only the other calls (go.x). It seems to work, but it's quite
 ugly and fragile. I wonder, how to reliably differentiate those two
 types of calls?
 [1] -[ 
https://github.com/spockframework/spock/blob/1dd24a2251afe3151e04b50af8afb6285b236c76/spock-specs/src/test/groovy/org/spockframework/smoke/mock/JavaMocksForGroovyClasses.groovy#L75-L81|https://github.com/spockframework/spock/blob/1dd24a2251afe3151e04b50af8afb6285b236c76/spock-specs/src/test/groovy/org/spockframework/smoke/mock/JavaMocksForGroovyClasses.groovy#L75-L81]
 [2] -[ 
https://github.com/spockframework/spock/commit/1dd24a2251afe3151e04b50af8afb6285b236c76|https://github.com/spockframework/spock/commit/1dd24a2251afe3151e04b50af8afb6285b236c76]
{quote}


> Unable to distinguish foo.x and foo.getProperty("x") in call interceptor
> ------------------------------------------------------------------------
>
>                 Key: GROOVY-9369
>                 URL: https://issues.apache.org/jira/browse/GROOVY-9369
>             Project: Groovy
>          Issue Type: Task
>          Components: groovy-runtime
>    Affects Versions: 3.0.0-rc-2, 3.0.0-rc-3
>            Reporter: Marcin Zajaczkowski
>            Priority: Major
>
> TL;TR. It is problematic in Groovy 3 to distinguish go.x and 
> go.getProperty("x") in a call (at the level of an interceptor for a mocking 
> system)?
> A ticket to track problem raised using the [mailing 
> list|[https://mail-archives.apache.org/mod_mbox/groovy-dev/202001.mbox/%3c54d78589-67e2-7c92-6512-240782960...@wp.pl%3e]]
>  Quoted original concerns:
>  
> {quote}Working on the Spock adjustment to Groovy 3 I spotted that Groovy 3
>  started for a property access go.x (go - some GroovyObject instance with
>  a field "x") to call go.getProperty("x") instead of go.getX() directly
>  (as it took place in Groovy 2). This broke tests for mocking with a
>  property call (getX() is stubbed, but go.x is called) and forced me to
>  detect getProperty("x") calls in a mock interceptor - to analyze deeper
>  and check which method (here getter) is being called and if has been
>  stubbed.
> However, in addition, it should be possible to just stub direct
>  go.getProperty("x") calls [1]. To do that, currently, I have to analyze
>  a stack trace to detect groovy.lang.GroovyObject$getProperty.call() at
>  the position -3 [2] (for direct go.getProperty("x") calls) and deeper
>  process only the other calls (go.x). It seems to work, but it's quite
>  ugly and fragile. I wonder, how to reliably differentiate those two
>  types of calls?
>  [1] -[ 
> https://github.com/spockframework/spock/blob/1dd24a2251afe3151e04b50af8afb6285b236c76/spock-specs/src/test/groovy/org/spockframework/smoke/mock/JavaMocksForGroovyClasses.groovy#L75-L81|https://github.com/spockframework/spock/blob/1dd24a2251afe3151e04b50af8afb6285b236c76/spock-specs/src/test/groovy/org/spockframework/smoke/mock/JavaMocksForGroovyClasses.groovy#L75-L81]
>  [2] -[ 
> https://github.com/spockframework/spock/commit/1dd24a2251afe3151e04b50af8afb6285b236c76|https://github.com/spockframework/spock/commit/1dd24a2251afe3151e04b50af8afb6285b236c76]
> {quote}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to