Fabio Nascimento Brandão created VELOCITY-947:
-------------------------------------------------

             Summary: Input macro variable not changed outside scope
                 Key: VELOCITY-947
                 URL: https://issues.apache.org/jira/browse/VELOCITY-947
             Project: Velocity
          Issue Type: Bug
          Components: Engine
    Affects Versions: 1.7.x
            Reporter: Fabio Nascimento Brandão
         Attachments: variable_velocity.tar.gz

I am migrating an application from Velocity Engine 1.5 to 1.7 (I am planning to 
migrate to 2.x later) and I found a different behavior between 1.5, 1.6.x and 
1.7 versions.

If you have this template:
{code:java}
#macro(testMacro $variable $newValue)
        #set($variable = $newValue)
#end

#set($testevar = 'INCORRECT')
Var before: $testevar
#testMacro($testevar 'TEST OK')
Var after: $testevar
{code}
The output for the versions 1.5, 1.6, 1.6.2, 1.6.3 and 1.6.4 are:
{code:java}
Var before: INCORRECT
Var after: TEST OK
{code}
And for versions 1.6.1 and 1.7 are:
{code:java}
Var before: INCORRECT
Var after: INCORRECT
{code}
In 1.5, the set inside macro was changing the referenced variable outside 
macro's scope. In 1.6.1 and 1.7 the variable is not changed.

I think this change was introduced by this issue:
 https://issues.apache.org/jira/browse/VELOCITY-615

In this method:
 
[https://github.com/apache/velocity-engine/commit/e0dec30ef0107ba0066fa18facdc1f7f2677087c#diff-79959d90eea878dd1d2550fa30aff8653a583339fe8125133b6a23573f2a0848L169-R173]

Before the change, the context was updated with the key from getRootString() 
method.

I am attaching a project with the tests. You can change the velocity version in 
_build.gradle_ and run with _./gradlew run_



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

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@velocity.apache.org
For additional commands, e-mail: dev-h...@velocity.apache.org

Reply via email to