You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by cb...@apache.org on 2018/10/15 00:00:50 UTC
svn commit: r1843869 - in /velocity/engine/trunk/velocity-engine-core/src:
main/java/org/apache/velocity/runtime/directive/
test/java/org/apache/velocity/test/ test/resources/gobbling/
test/resources/gobbling/compare/ test/resources/templates/ test/res...
Author: cbrisson
Date: Mon Oct 15 00:00:50 2018
New Revision: 1843869
URL: http://svn.apache.org/viewvc?rev=1843869&view=rev
Log:
[VELOCITY-903] #foreach #else #end ready
Added:
velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.BC
velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.LINES
velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.NONE
velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.STRUCTURED
velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/foreach_empty.vtl
Modified:
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Foreach.java
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/TemplateTestCase.java
velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/compare/foreach-array.cmp
velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/compare/foreach-type.cmp
velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/foreach-array.vm
velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/foreach-type.vm
Modified: velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Foreach.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Foreach.java?rev=1843869&r1=1843868&r2=1843869&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Foreach.java (original)
+++ velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Foreach.java Mon Oct 15 00:00:50 2018
@@ -26,10 +26,8 @@ import org.apache.velocity.runtime.Runti
import org.apache.velocity.runtime.RuntimeServices;
import org.apache.velocity.runtime.parser.ParseException;
import org.apache.velocity.runtime.parser.Token;
-import org.apache.velocity.runtime.parser.node.ASTReference;
-import org.apache.velocity.runtime.parser.node.Node;
+import org.apache.velocity.runtime.parser.node.*;
import org.apache.velocity.runtime.parser.node.ParserTreeConstants;
-import org.apache.velocity.runtime.parser.node.SimpleNode;
import org.apache.velocity.util.StringUtils;
import org.apache.velocity.util.introspection.Info;
@@ -214,17 +212,30 @@ public class Foreach extends Directive
public boolean render(InternalContextAdapter context, Writer writer, Node node)
throws IOException
{
+ // Get the block ast tree which is always the last child ...
+ Node block = node.jjtGetChild(node.jjtGetNumChildren()-1);
+
+ // ... except if there is an #else claude
+ Node elseBlock = null;
+ Node previous = node.jjtGetChild(node.jjtGetNumChildren()-2);
+ if (previous instanceof ASTBlock)
+ {
+ elseBlock = block;
+ block = previous;
+ }
+
Node iterableNode = node.jjtGetChild(2);
Object iterable = iterableNode.value(context);
Iterator i = getIterator(iterable, iterableNode);
- if (i == null)
+ if (i == null || !i.hasNext())
{
+ if (elseBlock != null)
+ {
+ renderBlock(context, writer, elseBlock);
+ }
return false;
}
- // Get the block ast tree which is always the last child
- Node block = node.jjtGetChild(node.jjtGetNumChildren()-1);
-
/*
* save the element key if there is one
*/
Modified: velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/TemplateTestCase.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/TemplateTestCase.java?rev=1843869&r1=1843868&r2=1843869&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/TemplateTestCase.java (original)
+++ velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/TemplateTestCase.java Mon Oct 15 00:00:50 2018
@@ -167,6 +167,7 @@ public class TemplateTestCase extends Ba
Object[] oarr = { "a","b","c","d" } ;
int intarr[] = { 10, 20, 30, 40, 50 };
+ int emptyarr[] = {};
context.put( "collection", vec );
context2.put("iterator", vec.iterator());
@@ -174,6 +175,7 @@ public class TemplateTestCase extends Ba
context.put("obarr", oarr );
context.put("enumerator", vec.elements());
context.put("intarr", intarr );
+ context.put("emptyarr", emptyarr );
// Add some Numbers
context.put ("int1", 1000);
Added: velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.BC
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.BC?rev=1843869&view=auto
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.BC (added)
+++ velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.BC Mon Oct 15 00:00:50 2018
@@ -0,0 +1,14 @@
+ empty
+
+~~~~ empty ~~~~
+
+<table>
+ <tbody>
+ <tr>
+ <td>
+ nobody
+ </td>
+ </tr>
+ </tbody>
+</table>
+
Added: velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.LINES
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.LINES?rev=1843869&view=auto
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.LINES (added)
+++ velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.LINES Mon Oct 15 00:00:50 2018
@@ -0,0 +1,14 @@
+ empty
+
+~~~~ empty ~~~~
+
+<table>
+ <tbody>
+ <tr>
+ <td>
+ nobody
+ </td>
+ </tr>
+ </tbody>
+</table>
+
Added: velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.NONE
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.NONE?rev=1843869&view=auto
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.NONE (added)
+++ velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.NONE Mon Oct 15 00:00:50 2018
@@ -0,0 +1,20 @@
+
+ empty
+
+
+~~~~ empty ~~~~
+
+<table>
+ <tbody>
+
+ <tr>
+
+ <td>
+ nobody
+ </td>
+
+ </tr>
+
+ </tbody>
+</table>
+
Added: velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.STRUCTURED
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.STRUCTURED?rev=1843869&view=auto
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.STRUCTURED (added)
+++ velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/compare/foreach_empty.vtl.STRUCTURED Mon Oct 15 00:00:50 2018
@@ -0,0 +1,14 @@
+ empty
+
+~~~~ empty ~~~~
+
+<table>
+ <tbody>
+<tr>
+ <td>
+nobody
+ </td>
+</tr>
+ </tbody>
+</table>
+
Added: velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/foreach_empty.vtl
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/foreach_empty.vtl?rev=1843869&view=auto
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/foreach_empty.vtl (added)
+++ velocity/engine/trunk/velocity-engine-core/src/test/resources/gobbling/foreach_empty.vtl Mon Oct 15 00:00:50 2018
@@ -0,0 +1,26 @@
+ #foreach( $i in [])
+ $i
+ #else
+ empty
+ #end
+
+~~~~ #foreach($i in []) #else empty #end ~~~~
+
+<table>
+ <tbody>
+#foreach($row in [1..1])
+ <tr>
+ #foreach($col in [])
+ <td>
+ ghost
+ </td>
+ #else
+ <td>
+ nobody
+ </td>
+ #end
+ </tr>
+#end
+ </tbody>
+</table>
+
Modified: velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/compare/foreach-array.cmp
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/compare/foreach-array.cmp?rev=1843869&r1=1843868&r2=1843869&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/compare/foreach-array.cmp (original)
+++ velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/compare/foreach-array.cmp Mon Oct 15 00:00:50 2018
@@ -28,4 +28,6 @@ Choose among :
$foo2 : bar
+-- Empty array
+ empty
Modified: velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/compare/foreach-type.cmp
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/compare/foreach-type.cmp?rev=1843869&r1=1843868&r2=1843869&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/compare/foreach-type.cmp (original)
+++ velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/compare/foreach-type.cmp Mon Oct 15 00:00:50 2018
@@ -7,11 +7,15 @@ Using a Object []
c
d
+ empty
+
Using a Map
this is from a hashtable!
this is from a hashtable too!
+ this map was empty
+
Using a Collection
string1
@@ -22,6 +26,7 @@ Using an Iterator
string1
string2
+ empty
Using an Enumeration
@@ -36,3 +41,5 @@ Using an array of primitives
30
40
50
+
+ empty
Modified: velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/foreach-array.vm
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/foreach-array.vm?rev=1843869&r1=1843868&r2=1843869&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/foreach-array.vm (original)
+++ velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/foreach-array.vm Mon Oct 15 00:00:50 2018
@@ -53,4 +53,10 @@ Choose among :
\$foo2 : $i
#end
+-- Empty array
+#foreach( $i in [] )
+ really?!
+#else
+ empty
+#end
Modified: velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/foreach-type.vm
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/foreach-type.vm?rev=1843869&r1=1843868&r2=1843869&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/foreach-type.vm (original)
+++ velocity/engine/trunk/velocity-engine-core/src/test/resources/templates/foreach-type.vm Mon Oct 15 00:00:50 2018
@@ -15,12 +15,24 @@ Using a Object []
$i
#end
+#foreach( $i in [])
+ $i
+#else
+ empty
+#end
+
Using a Map
#foreach( $i in $map )
$i
#end
+#foreach( $i in {} )
+ $i
+#else
+ this map was empty
+#end
+
Using a Collection
#foreach($i in $collection )
@@ -33,11 +45,19 @@ Using an Iterator
$i
#end
+#set($emptyList = [])
+#foreach($i in $emptyList.iterator())
+ $i
+#else
+ empty
+#end
Using an Enumeration
#foreach($i in $enumerator)
$i
+#else
+ error
#end
@@ -45,4 +65,12 @@ Using an array of primitives
#foreach( $i in $intarr )
$i
+#else
+ error
+#end
+
+#foreach( $i in $emptyarr )
+ $i
+#else
+ empty
#end