You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by nb...@apache.org on 2009/01/23 18:26:43 UTC

svn commit: r737104 - in /velocity/engine/trunk/src: changes/changes.xml java/org/apache/velocity/runtime/directive/RuntimeMacro.java java/org/apache/velocity/runtime/directive/VelocimacroProxy.java test/org/apache/velocity/test/BlockMacroTestCase.java

Author: nbubna
Date: Fri Jan 23 09:26:43 2009
New Revision: 737104

URL: http://svn.apache.org/viewvc?rev=737104&view=rev
Log:
VELOCITY-685 fix strict macro args with block macros (thx to Jarkko Viinamaki)

Modified:
    velocity/engine/trunk/src/changes/changes.xml
    velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/RuntimeMacro.java
    velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/VelocimacroProxy.java
    velocity/engine/trunk/src/test/org/apache/velocity/test/BlockMacroTestCase.java

Modified: velocity/engine/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/changes/changes.xml?rev=737104&r1=737103&r2=737104&view=diff
==============================================================================
--- velocity/engine/trunk/src/changes/changes.xml (original)
+++ velocity/engine/trunk/src/changes/changes.xml Fri Jan 23 09:26:43 2009
@@ -26,6 +26,10 @@
 
   <body>
     <release version="1.7" date="In Subversion">
+      
+      <action type="fix" dev="nbubna" issue="VELOCITY-685" due-to="Jarkko Viinamäki">
+        Make velocimacro.arguments.strict=true work with block macros.
+      </action>
 
       <action type="add" dev="byron" issue="VELOCITY-623">
 	Added a property for changing escape behavior such that putting a forward

Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/RuntimeMacro.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/RuntimeMacro.java?rev=737104&r1=737103&r2=737104&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/RuntimeMacro.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/RuntimeMacro.java Fri Jan 23 09:26:43 2009
@@ -276,7 +276,7 @@
             try
             {
             	// mainly check the number of arguments
-                vmProxy.checkArgs(context, node);
+                vmProxy.checkArgs(context, node, body != null);
             }
             catch (TemplateInitException die)
             {

Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/VelocimacroProxy.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/VelocimacroProxy.java?rev=737104&r1=737103&r2=737104&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/VelocimacroProxy.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/directive/VelocimacroProxy.java Fri Jan 23 09:26:43 2009
@@ -271,10 +271,14 @@
      * we are not, and strictArguments is active, then throw TemplateInitException.
      * This method is called during macro render, so it must be thread safe.
      */
-    public void checkArgs(InternalContextAdapter context, Node node)
+    public void checkArgs(InternalContextAdapter context, Node node, boolean hasBody)
     {
         // check how many arguments we have
         int i = node.jjtGetNumChildren();
+        
+        // if macro call has a body (BlockMacro) then don't count the body as an argument
+        if( hasBody )
+            i--;
 
         // Throw exception for invalid number of arguments?
         if (getNumArgs() != i)

Modified: velocity/engine/trunk/src/test/org/apache/velocity/test/BlockMacroTestCase.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/test/org/apache/velocity/test/BlockMacroTestCase.java?rev=737104&r1=737103&r2=737104&view=diff
==============================================================================
--- velocity/engine/trunk/src/test/org/apache/velocity/test/BlockMacroTestCase.java (original)
+++ velocity/engine/trunk/src/test/org/apache/velocity/test/BlockMacroTestCase.java Fri Jan 23 09:26:43 2009
@@ -96,5 +96,11 @@
     {
         assertEvalEquals("#@foo", "#@foo"); 
     }
-
+    
+    public void testVelocity685() throws Exception
+    {
+        engine.setProperty(RuntimeConstants.VM_ARGUMENTS_STRICT, Boolean.TRUE);
+        assertEvalEquals(" ", "#macro(foo)#end #@foo() junk #end");
+    }
 }
+