You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by by...@apache.org on 2008/12/23 05:51:05 UTC

svn commit: r728869 - in /velocity/engine/trunk/src: java/org/apache/velocity/runtime/parser/node/ test/org/apache/velocity/test/

Author: byron
Date: Mon Dec 22 20:51:05 2008
New Revision: 728869

URL: http://svn.apache.org/viewvc?rev=728869&view=rev
Log:
VELOCITY-645 Objects that can't be compared throw an exception in strict mode

Added:
    velocity/engine/trunk/src/test/org/apache/velocity/test/StrictCompareTestCase.java
Modified:
    velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTGENode.java
    velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTGTNode.java
    velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTLENode.java
    velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTLTNode.java

Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTGENode.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTGENode.java?rev=728869&r1=728868&r2=728869&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTGENode.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTGENode.java Mon Dec 22 20:51:05 2008
@@ -21,6 +21,8 @@
 
 import org.apache.velocity.context.InternalContextAdapter;
 import org.apache.velocity.exception.MethodInvocationException;
+import org.apache.velocity.exception.VelocityException;
+import org.apache.velocity.runtime.RuntimeConstants;
 import org.apache.velocity.runtime.log.Log;
 import org.apache.velocity.runtime.parser.Parser;
 import org.apache.velocity.util.TemplateNumber;
@@ -84,12 +86,18 @@
 
         if (left == null || right == null)
         {
-            log.error((left == null ? "Left" : "Right")
+            String msg = (left == null ? "Left" : "Right")
                            + " side ("
                            + jjtGetChild( (left == null? 0 : 1) ).literal()
-                           + ") of '>=' operation has null value."
-                           + " Operation not possible. "
-                           + Log.formatFileString(this));
+                           + ") of '>=' operation has null value at "
+                           + Log.formatFileString(this);
+
+            if (rsvc.getBoolean(RuntimeConstants.RUNTIME_REFERENCES_STRICT, false))
+            {
+              throw new VelocityException(msg);
+            }
+            
+            log.error(msg);
             return false;
         }
 
@@ -112,10 +120,16 @@
 
         if ( !( left instanceof Number )  || !( right instanceof Number ))
         {
-            log.error((!(left instanceof Number) ? "Left" : "Right")
-                           + " side of '>=' operation is not a Number. "
-                           + Log.formatFileString(this));
+            String msg = (!(left instanceof Number) ? "Left" : "Right")
+                           + " side of '>=' operation is not a Number at "
+                           + Log.formatFileString(this);
+
+            if (rsvc.getBoolean(RuntimeConstants.RUNTIME_REFERENCES_STRICT, false))
+            {
+              throw new VelocityException(msg);
+            }
 
+            log.error(msg);
             return false;
         }
 

Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTGTNode.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTGTNode.java?rev=728869&r1=728868&r2=728869&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTGTNode.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTGTNode.java Mon Dec 22 20:51:05 2008
@@ -21,6 +21,8 @@
 
 import org.apache.velocity.context.InternalContextAdapter;
 import org.apache.velocity.exception.MethodInvocationException;
+import org.apache.velocity.exception.VelocityException;
+import org.apache.velocity.runtime.RuntimeConstants;
 import org.apache.velocity.runtime.log.Log;
 import org.apache.velocity.runtime.parser.Parser;
 import org.apache.velocity.util.TemplateNumber;
@@ -84,12 +86,18 @@
 
         if (left == null || right == null)
         {
-            log.error((left == null ? "Left" : "Right")
+            String msg = (left == null ? "Left" : "Right")
                            + " side ("
                            + jjtGetChild( (left == null? 0 : 1) ).literal()
-                           + ") of '>' operation has null value."
-                           + " Operation not possible. "
-                           + Log.formatFileString(this));
+                           + ") of '>' operation has null value at "
+                           + Log.formatFileString(this);
+
+            if (rsvc.getBoolean(RuntimeConstants.RUNTIME_REFERENCES_STRICT, false))
+            {
+              throw new VelocityException(msg);
+            }
+
+            log.error(msg);
             return false;
         }
 
@@ -111,10 +119,16 @@
 
         if ( !( left instanceof Number )  || !( right instanceof Number ))
         {
-            log.error((!(left instanceof Number) ? "Left" : "Right")
-                           + " side of '>=' operation is not a Numbere. "
-                           + Log.formatFileString(this));
-
+            String msg = (!(left instanceof Number) ? "Left" : "Right")
+                           + " side of '>=' operation is not a Number at "
+                           + Log.formatFileString(this);
+
+            if (rsvc.getBoolean(RuntimeConstants.RUNTIME_REFERENCES_STRICT, false))
+            {
+              throw new VelocityException(msg);
+            }
+            
+            log.error(msg);
             return false;
         }
 

Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTLENode.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTLENode.java?rev=728869&r1=728868&r2=728869&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTLENode.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTLENode.java Mon Dec 22 20:51:05 2008
@@ -21,6 +21,8 @@
 
 import org.apache.velocity.context.InternalContextAdapter;
 import org.apache.velocity.exception.MethodInvocationException;
+import org.apache.velocity.exception.VelocityException;
+import org.apache.velocity.runtime.RuntimeConstants;
 import org.apache.velocity.runtime.log.Log;
 import org.apache.velocity.runtime.parser.Parser;
 import org.apache.velocity.util.TemplateNumber;
@@ -84,12 +86,18 @@
 
         if (left == null || right == null)
         {
-            log.error((left == null ? "Left" : "Right")
+            String msg = (left == null ? "Left" : "Right")
                            + " side ("
                            + jjtGetChild( (left == null? 0 : 1) ).literal()
-                           + ") of '<=' operation has null value."
-                           + " Operation not possible. "
-                           + Log.formatFileString(this));
+                           + ") of '<=' operation has null value at "
+                           + Log.formatFileString(this);
+
+            if (rsvc.getBoolean(RuntimeConstants.RUNTIME_REFERENCES_STRICT, false))
+            {
+              throw new VelocityException(msg);
+            }
+            
+            log.error(msg);
             return false;
         }
 
@@ -110,10 +118,16 @@
          */
         if ( !( left instanceof Number )  || !( right instanceof Number ))
         {
-            log.error((!(left instanceof Number) ? "Left" : "Right")
-                           + " side of '>=' operation is not a Number. "
-                           + Log.formatFileString(this));
+            String msg = (!(left instanceof Number) ? "Left" : "Right")
+                           + " side of '>=' operation is not a Number at "
+                           + Log.formatFileString(this);
+            
+            if (rsvc.getBoolean(RuntimeConstants.RUNTIME_REFERENCES_STRICT, false))
+            {
+              throw new VelocityException(msg);
+            }
 
+            log.error(msg);
             return false;
         }
 

Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTLTNode.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTLTNode.java?rev=728869&r1=728868&r2=728869&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTLTNode.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTLTNode.java Mon Dec 22 20:51:05 2008
@@ -21,6 +21,8 @@
 
 import org.apache.velocity.context.InternalContextAdapter;
 import org.apache.velocity.exception.MethodInvocationException;
+import org.apache.velocity.exception.VelocityException;
+import org.apache.velocity.runtime.RuntimeConstants;
 import org.apache.velocity.runtime.log.Log;
 import org.apache.velocity.runtime.parser.Parser;
 import org.apache.velocity.util.TemplateNumber;
@@ -84,12 +86,18 @@
 
         if (left == null || right == null)
         {
-            log.error((left == null ? "Left" : "Right")
+            String msg = (left == null ? "Left" : "Right")
                            + " side ("
                            + jjtGetChild( (left == null? 0 : 1) ).literal()
-                           + ") of '<' operation has null value."
-                           + " Operation not possible. "
-                           + Log.formatFileString(this));
+                           + ") of '<' operation has null value at "
+                           + Log.formatFileString(this);
+
+            if (rsvc.getBoolean(RuntimeConstants.RUNTIME_REFERENCES_STRICT, false))
+            {
+              throw new VelocityException(msg);
+            }
+                        
+            log.error(msg);
             return false;
         }
 
@@ -111,10 +119,16 @@
 
         if ( !( left instanceof Number )  || !( right instanceof Number ))
         {
-            log.error((!(left instanceof Number) ? "Left" : "Right")
-                           + " side of '>=' operation is not a valid Number. "
-                           + Log.formatFileString(this));
-
+            String msg = (!(left instanceof Number) ? "Left" : "Right")
+                           + " side of '>=' operation is not a valid Number at "
+                           + Log.formatFileString(this);
+
+            if (rsvc.getBoolean(RuntimeConstants.RUNTIME_REFERENCES_STRICT, false))
+            {
+              throw new VelocityException(msg);
+            }
+            
+            log.error(msg);
             return false;
         }
 

Added: velocity/engine/trunk/src/test/org/apache/velocity/test/StrictCompareTestCase.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/test/org/apache/velocity/test/StrictCompareTestCase.java?rev=728869&view=auto
==============================================================================
--- velocity/engine/trunk/src/test/org/apache/velocity/test/StrictCompareTestCase.java (added)
+++ velocity/engine/trunk/src/test/org/apache/velocity/test/StrictCompareTestCase.java Mon Dec 22 20:51:05 2008
@@ -0,0 +1,59 @@
+package org.apache.velocity.test;
+
+import org.apache.velocity.exception.MethodInvocationException;
+import org.apache.velocity.exception.VelocityException;
+import org.apache.velocity.exception.ParseErrorException;
+import org.apache.velocity.runtime.RuntimeConstants;
+
+/**
+ * Make sure exceptions are thrown for strict comparisons that
+ * cannot be compared.
+ */
+public class StrictCompareTestCase extends BaseEvalTestCase
+{
+    public StrictCompareTestCase(String name)
+    {
+        super(name);
+    }
+
+    public void setUp() throws Exception
+    {
+        super.setUp();
+        engine.setProperty(RuntimeConstants.RUNTIME_REFERENCES_STRICT, Boolean.TRUE);
+        context.put("NULL", null);
+        context.put("a", "abc");
+        context.put("b", new Integer(3));
+        context.put("TRUE", Boolean.TRUE);
+    }
+
+    public void testCompare()
+    {
+        assertVelocityEx("#if($a > $NULL)#end");
+        assertVelocityEx("#if($a < $NULL)#end");
+        assertVelocityEx("#if($a >= $NULL)#end");
+        assertVelocityEx("#if($a <= $NULL)#end");
+
+        assertVelocityEx("#if($NULL > $a)#end");
+        assertVelocityEx("#if($NULL < $a)#end");
+        assertVelocityEx("#if($NULL >= $a)#end");        
+        assertVelocityEx("#if($NULL <= $a)#end");
+
+        assertVelocityEx("#if($NULL >= $NULL)#end");
+        assertVelocityEx("#if($a >= $b)#end");
+        assertVelocityEx("#if($a <= $b)#end");
+        assertVelocityEx("#if($a > $b)#end");
+        assertVelocityEx("#if($a < $b)#end");
+
+        assertVelocityEx("#if($a < 5)#end");
+        assertVelocityEx("#if($a > 5)#end");        
+    }
+    
+    /**
+     * Assert that we get a VelocityException when calling evaluate
+     */
+    public void assertVelocityEx(String template)
+    {
+      System.out.println(template);
+        assertEvalException(template, VelocityException.class);
+    }
+}