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 2008/11/24 17:58:34 UTC
svn commit: r720228 - in /velocity/engine/trunk: src/changes/
src/java/org/apache/velocity/runtime/log/
src/java/org/apache/velocity/runtime/parser/
src/java/org/apache/velocity/runtime/parser/node/ src/parser/
src/test/org/apache/velocity/test/ src/te...
Author: nbubna
Date: Mon Nov 24 08:58:33 2008
New Revision: 720228
URL: http://svn.apache.org/viewvc?rev=720228&view=rev
Log:
VELOCITY-644 keep template name in Node for when a ref causes an exception in a macro from a different template, also have strict ref mode throw VelocityException instead of MIE (thanks to Byron Foster)
Added:
velocity/engine/trunk/src/test/org/apache/velocity/test/issues/Velocity644TestCase.java
velocity/engine/trunk/test/templates/testCase644.vm
Modified:
velocity/engine/trunk/src/changes/changes.xml
velocity/engine/trunk/src/java/org/apache/velocity/runtime/log/Log.java
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/Parser.java
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTDirective.java
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/ASTIdentifier.java
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTIntegerRange.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
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTMethod.java
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTReference.java
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTSetDirective.java
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/Node.java
velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/SimpleNode.java
velocity/engine/trunk/src/parser/Parser.jjt
velocity/engine/trunk/src/test/org/apache/velocity/test/BaseEvalTestCase.java
velocity/engine/trunk/src/test/org/apache/velocity/test/StrictReferenceTestCase.java
Modified: velocity/engine/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/changes/changes.xml?rev=720228&r1=720227&r2=720228&view=diff
==============================================================================
--- velocity/engine/trunk/src/changes/changes.xml (original)
+++ velocity/engine/trunk/src/changes/changes.xml Mon Nov 24 08:58:33 2008
@@ -27,6 +27,11 @@
<body>
<release version="1.6" date="In Subversion">
+ <action type="fix" dev="nbubna" issue="VELOCITY-644" due-to="Byron Foster">
+ Track template name in Node, to get proper template name in the exception
+ message when a reference in a macro causes that exception.
+ </action>
+
<action type="fix" dev="nbubna" issue="VELOCITY-352" due-to="Gonzalo Diethelm, Joni Salonen">
Update Finnish and Spanish User Guide sections on division operation.
</action>
Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/log/Log.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/log/Log.java?rev=720228&r1=720227&r2=720228&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/log/Log.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/log/Log.java Mon Nov 24 08:58:33 2008
@@ -1,5 +1,6 @@
package org.apache.velocity.runtime.log;
+import org.apache.velocity.runtime.parser.node.Node;
import org.apache.velocity.util.introspection.Info;
/*
@@ -225,7 +226,17 @@
}
/**
- * Simply creates a string that formats the template filename allowing with line number
+ * Creates a string that formats the template filename with line number
+ * and column of the given Node. We use this routine to provide a cosistent format for displaying
+ * file errors.
+ */
+ public static final String formatFileString(Node node)
+ {
+ return formatFileString(node.getTemplateName(), node.getLine(), node.getColumn());
+ }
+
+ /**
+ * Simply creates a string that formats the template filename with line number
* and column. We use this routine to provide a cosistent format for displaying
* file errors.
*/
@@ -235,7 +246,7 @@
}
/**
- * Simply creates a string that formats the template filename allowing with line number
+ * Simply creates a string that formats the template filename with line number
* and column. We use this routine to provide a cosistent format for displaying
* file errors.
* @param template File name of template, can be null
Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/Parser.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/Parser.java?rev=720228&r1=720227&r2=720228&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/Parser.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/Parser.java Mon Nov 24 08:58:33 2008
@@ -34,7 +34,7 @@
/**
* Name of current template we are parsing. Passed to us in parse()
*/
- String currentTemplateName = "";
+ public String currentTemplateName = "";
VelocityCharStream velcharstream = null;
Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTDirective.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTDirective.java?rev=720228&r1=720227&r2=720228&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTDirective.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTDirective.java Mon Nov 24 08:58:33 2008
@@ -130,8 +130,7 @@
/**
* Create a new RuntimeMacro
*/
- directive = new RuntimeMacro(directiveName,
- context.getCurrentTemplateName());
+ directive = new RuntimeMacro(directiveName, getTemplateName());
directive.setLocation( getLine(), getColumn() );
/**
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=720228&r1=720227&r2=720228&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 Nov 24 08:58:33 2008
@@ -21,6 +21,7 @@
import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.exception.MethodInvocationException;
+import org.apache.velocity.runtime.log.Log;
import org.apache.velocity.runtime.parser.Parser;
import org.apache.velocity.util.TemplateNumber;
@@ -88,9 +89,7 @@
+ jjtGetChild( (left == null? 0 : 1) ).literal()
+ ") of '>=' operation has null value."
+ " Operation not possible. "
- + context.getCurrentTemplateName() + " [line "
- + getLine()
- + ", column " + getColumn() + "]");
+ + Log.formatFileString(this));
return false;
}
@@ -115,8 +114,7 @@
{
log.error((!(left instanceof Number) ? "Left" : "Right")
+ " side of '>=' operation is not a Number. "
- + context.getCurrentTemplateName() + " [line " + getLine()
- + ", column " + getColumn() + "]");
+ + Log.formatFileString(this));
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=720228&r1=720227&r2=720228&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 Nov 24 08:58:33 2008
@@ -21,6 +21,7 @@
import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.exception.MethodInvocationException;
+import org.apache.velocity.runtime.log.Log;
import org.apache.velocity.runtime.parser.Parser;
import org.apache.velocity.util.TemplateNumber;
@@ -88,9 +89,7 @@
+ jjtGetChild( (left == null? 0 : 1) ).literal()
+ ") of '>' operation has null value."
+ " Operation not possible. "
- + context.getCurrentTemplateName() + " [line "
- + getLine()
- + ", column " + getColumn() + "]");
+ + Log.formatFileString(this));
return false;
}
@@ -114,8 +113,7 @@
{
log.error((!(left instanceof Number) ? "Left" : "Right")
+ " side of '>=' operation is not a Numbere. "
- + context.getCurrentTemplateName() + " [line " + getLine()
- + ", column " + getColumn() + "]");
+ + Log.formatFileString(this));
return false;
}
Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTIdentifier.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTIdentifier.java?rev=720228&r1=720227&r2=720228&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTIdentifier.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTIdentifier.java Mon Nov 24 08:58:33 2008
@@ -103,8 +103,7 @@
identifier = getFirstToken().image;
- uberInfo = new Info(context.getCurrentTemplateName(),
- getLine(), getColumn());
+ uberInfo = new Info(getTemplateName(), getLine(), getColumn());
strictRef = rsvc.getBoolean(RuntimeConstants.RUNTIME_REFERENCES_STRICT, false);
@@ -226,7 +225,7 @@
+ " in " + o.getClass()
+ " threw exception "
+ ite.getTargetException().toString(),
- ite.getTargetException(), vg.getMethodName(), context.getCurrentTemplateName(), this.getLine(), this.getColumn());
+ ite.getTargetException(), vg.getMethodName(), getTemplateName(), this.getLine(), this.getColumn());
}
}
else
@@ -240,7 +239,7 @@
+ " in " + o.getClass()
+ " threw exception "
+ ite.getTargetException().toString(),
- ite.getTargetException(), vg.getMethodName(), context.getCurrentTemplateName(), this.getLine(), this.getColumn());
+ ite.getTargetException(), vg.getMethodName(), getTemplateName(), this.getLine(), this.getColumn());
}
Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTIntegerRange.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTIntegerRange.java?rev=720228&r1=720227&r2=720228&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTIntegerRange.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTIntegerRange.java Mon Nov 24 08:58:33 2008
@@ -24,6 +24,7 @@
import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.exception.MethodInvocationException;
+import org.apache.velocity.runtime.log.Log;
import org.apache.velocity.runtime.parser.Parser;
/**
@@ -88,8 +89,7 @@
log.error((left == null ? "Left" : "Right")
+ " side of range operator [n..m] has null value."
+ " Operation not possible. "
- + context.getCurrentTemplateName() + " [line " + getLine()
- + ", column " + getColumn() + "]");
+ + Log.formatFileString(this));
return null;
}
@@ -102,9 +102,7 @@
log.error((!(left instanceof Number) ? "Left" : "Right")
+ " side of range operator is not a valid type. "
+ "Currently only integers (1,2,3...) and the Number type are supported. "
- + context.getCurrentTemplateName() + " [line " + getLine()
- + ", column " + getColumn() + ']');
-
+ + Log.formatFileString(this));
return null;
}
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=720228&r1=720227&r2=720228&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 Nov 24 08:58:33 2008
@@ -21,6 +21,7 @@
import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.exception.MethodInvocationException;
+import org.apache.velocity.runtime.log.Log;
import org.apache.velocity.runtime.parser.Parser;
import org.apache.velocity.util.TemplateNumber;
@@ -88,9 +89,7 @@
+ jjtGetChild( (left == null? 0 : 1) ).literal()
+ ") of '<=' operation has null value."
+ " Operation not possible. "
- + context.getCurrentTemplateName() + " [line "
- + getLine()
- + ", column " + getColumn() + "]");
+ + Log.formatFileString(this));
return false;
}
@@ -113,8 +112,7 @@
{
log.error((!(left instanceof Number) ? "Left" : "Right")
+ " side of '>=' operation is not a Number. "
- + context.getCurrentTemplateName() + " [line " + getLine()
- + ", column " + getColumn() + "]");
+ + Log.formatFileString(this));
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=720228&r1=720227&r2=720228&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 Nov 24 08:58:33 2008
@@ -21,6 +21,7 @@
import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.exception.MethodInvocationException;
+import org.apache.velocity.runtime.log.Log;
import org.apache.velocity.runtime.parser.Parser;
import org.apache.velocity.util.TemplateNumber;
@@ -88,9 +89,7 @@
+ jjtGetChild( (left == null? 0 : 1) ).literal()
+ ") of '<' operation has null value."
+ " Operation not possible. "
- + context.getCurrentTemplateName() + " [line "
- + getLine()
- + ", column " + getColumn() + "]");
+ + Log.formatFileString(this));
return false;
}
@@ -114,8 +113,7 @@
{
log.error((!(left instanceof Number) ? "Left" : "Right")
+ " side of '>=' operation is not a valid Number. "
- + context.getCurrentTemplateName() + " [line " + getLine()
- + ", column " + getColumn() + "]");
+ + Log.formatFileString(this));
return false;
}
Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTMethod.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTMethod.java?rev=720228&r1=720227&r2=720228&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTMethod.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTMethod.java Mon Nov 24 08:58:33 2008
@@ -104,7 +104,7 @@
* make an uberinfo - saves new's later on
*/
- uberInfo = new Info(context.getCurrentTemplateName(),
+ uberInfo = new Info(getTemplateName(),
getLine(),getColumn());
/*
* this is about all we can do
@@ -189,7 +189,7 @@
* cache it
*/
- method = rsvc.getUberspect().getMethod(o, methodName, params, new Info(context.getCurrentTemplateName(), getLine(), getColumn()));
+ method = rsvc.getUberspect().getMethod(o, methodName, params, new Info(getTemplateName(), getLine(), getColumn()));
if ((method != null) && (o != null))
{
@@ -339,7 +339,7 @@
+ methodName + "' in " + o.getClass()
+ " threw exception "
+ e.toString(),
- e, methodName, context.getCurrentTemplateName(), this.getLine(), this.getColumn());
+ e, methodName, getTemplateName(), this.getLine(), this.getColumn());
}
}
else
@@ -353,7 +353,7 @@
+ methodName + "' in " + o.getClass()
+ " threw exception "
+ t.toString(),
- t, methodName, context.getCurrentTemplateName(), this.getLine(), this.getColumn());
+ t, methodName, getTemplateName(), this.getLine(), this.getColumn());
}
}
Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTReference.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTReference.java?rev=720228&r1=720227&r2=720228&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTReference.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTReference.java Mon Nov 24 08:58:33 2008
@@ -139,8 +139,7 @@
* make an uberinfo - saves new's later on
*/
- uberInfo = new Info(context.getCurrentTemplateName(),
- getLine(),getColumn());
+ uberInfo = new Info(getTemplateName(), getLine(),getColumn());
/*
* track whether we log invalid references
@@ -183,18 +182,6 @@
}
/**
- * Returns the template name, once init() has been called.
- */
- public String getTemplateName()
- {
- if (uberInfo == null)
- {
- return null;
- }
- return uberInfo.getTemplateName();
- }
-
- /**
* Returns the 'root string', the reference key
* @return the root string.
*/
@@ -256,10 +243,10 @@
* to call a method or property on a null value.
*/
String name = jjtGetChild(i).getFirstToken().image;
- throw new MethodInvocationException("Attempted to access '"
- + name + "' on a null value", null, name, uberInfo.getTemplateName(),
- jjtGetChild(i).getLine(), jjtGetChild(i).getColumn());
-
+ throw new VelocityException("Attempted to access '"
+ + name + "' on a null value at "
+ + Log.formatFileString(uberInfo.getTemplateName(),
+ + jjtGetChild(i).getLine(), jjtGetChild(i).getColumn()));
}
previousResult = result;
result = jjtGetChild(i).execute(result,context);
@@ -320,8 +307,7 @@
log.error("Method " + mie.getMethodName()
+ " threw exception for reference $" + rootString + " in "
- + Log.formatFileString(context.getCurrentTemplateName(),
- getLine(), getColumn()));
+ + Log.formatFileString(this));
mie.setReferenceName(rootString);
throw mie;
}
@@ -422,7 +408,7 @@
if (logOnNull && referenceType != QUIET_REFERENCE && log.isDebugEnabled())
{
- log.debug("Null reference [template '" + context.getCurrentTemplateName()
+ log.debug("Null reference [template '" + getTemplateName()
+ "', line " + this.getLine() + ", column " + this.getColumn() + "] : "
+ this.literal() + " cannot be resolved.");
}
@@ -609,7 +595,7 @@
+ identifier + "' in " + result.getClass()
+ " threw exception "
+ ite.getTargetException().toString(),
- ite.getTargetException(), identifier, context.getCurrentTemplateName(), this.getLine(), this.getColumn());
+ ite.getTargetException(), identifier, getTemplateName(), this.getLine(), this.getColumn());
}
/**
* pass through application level runtime exceptions
Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTSetDirective.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTSetDirective.java?rev=720228&r1=720227&r2=720228&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTSetDirective.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTSetDirective.java Mon Nov 24 08:58:33 2008
@@ -27,6 +27,7 @@
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.TemplateInitException;
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.introspection.Info;
@@ -101,7 +102,7 @@
super.init( context, data );
- uberInfo = new Info(context.getCurrentTemplateName(),
+ uberInfo = new Info(getTemplateName(),
getLine(), getColumn());
right = getRightHandSide();
@@ -159,8 +160,7 @@
if (doit && rsvc.getLog().isDebugEnabled())
{
rsvc.getLog().debug("RHS of #set statement is null. Context will not be modified. "
- + context.getCurrentTemplateName() + " [line " + getLine()
- + ", column " + getColumn() + "]");
+ + Log.formatFileString(this));
}
}
Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/Node.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/Node.java?rev=720228&r1=720227&r2=720228&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/Node.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/Node.java Mon Nov 24 08:58:33 2008
@@ -199,4 +199,9 @@
* @return The current column position.
*/
public int getColumn();
+
+ /**
+ * @return the file name of the template
+ */
+ public String getTemplateName();
}
Modified: velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/SimpleNode.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/SimpleNode.java?rev=720228&r1=720227&r2=720228&view=diff
==============================================================================
--- velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/SimpleNode.java (original)
+++ velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/SimpleNode.java Mon Nov 24 08:58:33 2008
@@ -55,6 +55,7 @@
protected int id;
/** */
+ // TODO - It seems that this field is only valid when parsing, and should not be kept around.
protected Parser parser;
/** */
@@ -71,6 +72,9 @@
/** */
protected Token last;
+
+
+ protected String templateName;
/**
* @param i
@@ -88,6 +92,7 @@
{
this(i);
parser = p;
+ templateName = parser.currentTemplateName;
}
/**
@@ -251,10 +256,7 @@
*/
protected String getLocation(InternalContextAdapter context)
{
- return new StrBuilder(50)
- .append(context.getCurrentTemplateName())
- .append(" [line ").append(getLine())
- .append(", column ").append(getColumn()).append("]").toString();
+ return Log.formatFileString(this);
}
// All additional methods
@@ -433,5 +435,10 @@
.append("tokens", tokens)
.toString();
}
+
+ public String getTemplateName()
+ {
+ return templateName;
+ }
}
Modified: velocity/engine/trunk/src/parser/Parser.jjt
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/parser/Parser.jjt?rev=720228&r1=720227&r2=720228&view=diff
==============================================================================
--- velocity/engine/trunk/src/parser/Parser.jjt (original)
+++ velocity/engine/trunk/src/parser/Parser.jjt Mon Nov 24 08:58:33 2008
@@ -111,7 +111,7 @@
/**
* Name of current template we are parsing. Passed to us in parse()
*/
- String currentTemplateName = "";
+ public String currentTemplateName = "";
VelocityCharStream velcharstream = null;
Modified: velocity/engine/trunk/src/test/org/apache/velocity/test/BaseEvalTestCase.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/test/org/apache/velocity/test/BaseEvalTestCase.java?rev=720228&r1=720227&r2=720228&view=diff
==============================================================================
--- velocity/engine/trunk/src/test/org/apache/velocity/test/BaseEvalTestCase.java (original)
+++ velocity/engine/trunk/src/test/org/apache/velocity/test/BaseEvalTestCase.java Mon Nov 24 08:58:33 2008
@@ -138,9 +138,10 @@
return null;
}
- protected Exception assertEvalExceptionAt(String evil, int line, int col)
+ protected Exception assertEvalExceptionAt(String evil, String template,
+ int line, int col)
{
- String loc = "[line "+line+", column "+col+"]";
+ String loc = template+"[line "+line+", column "+col+"]";
if (DEBUG)
{
engine.getLog().info("Expectation: Exception at "+loc);
@@ -157,6 +158,11 @@
return e;
}
+ protected Exception assertEvalExceptionAt(String evil, int line, int col)
+ {
+ return assertEvalExceptionAt(evil, "", line, col);
+ }
+
protected String evaluate(String template)
{
StringWriter writer = new StringWriter();
Modified: velocity/engine/trunk/src/test/org/apache/velocity/test/StrictReferenceTestCase.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/test/org/apache/velocity/test/StrictReferenceTestCase.java?rev=720228&r1=720227&r2=720228&view=diff
==============================================================================
--- velocity/engine/trunk/src/test/org/apache/velocity/test/StrictReferenceTestCase.java (original)
+++ velocity/engine/trunk/src/test/org/apache/velocity/test/StrictReferenceTestCase.java Mon Nov 24 08:58:33 2008
@@ -1,6 +1,7 @@
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;
@@ -121,17 +122,17 @@
fargo.next = new Fargo();
context.put("fargo", fargo);
- assertMethodEx("$NULL.bogus");
- assertMethodEx("$fargo.nullVal.bogus");
- assertMethodEx("$fargo.next.nullVal.bogus");
- assertMethodEx("#if (\"junk\" == $fargo.nullVal.bogus)#end");
- assertMethodEx("#if ($fargo.nullVal.bogus > 2)#end");
- assertMethodEx("#set($fargo.next.nullVal.bogus = \"junk\")");
- assertMethodEx("#set($foo = $NULL.bogus)");
- assertMethodEx("#foreach($item in $fargo.next.nullVal.bogus)#end");
+ assertVelocityEx("$NULL.bogus");
+ assertVelocityEx("$fargo.nullVal.bogus");
+ assertVelocityEx("$fargo.next.nullVal.bogus");
+ assertVelocityEx("#if (\"junk\" == $fargo.nullVal.bogus)#end");
+ assertVelocityEx("#if ($fargo.nullVal.bogus > 2)#end");
+ assertVelocityEx("#set($fargo.next.nullVal.bogus = \"junk\")");
+ assertVelocityEx("#set($foo = $NULL.bogus)");
+ assertVelocityEx("#foreach($item in $fargo.next.nullVal.bogus)#end");
evaluate("$fargo.prop.toString()");
- assertMethodEx("#set($fargo.prop = $NULL)$fargo.prop.next");
+ assertVelocityEx("#set($fargo.prop = $NULL)$fargo.prop.next");
// make sure no exceptions are thrown here
evaluate("$fargo.next.next");
@@ -166,6 +167,14 @@
}
/**
+ * Assert that we get a VelocityException when calling evaluate
+ */
+ public void assertVelocityEx(String template)
+ {
+ assertEvalException(template, VelocityException.class);
+ }
+
+ /**
* Assert that we get a MethodInvocationException when calling evaluate
*/
public void assertParseEx(String template)
Added: velocity/engine/trunk/src/test/org/apache/velocity/test/issues/Velocity644TestCase.java
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/src/test/org/apache/velocity/test/issues/Velocity644TestCase.java?rev=720228&view=auto
==============================================================================
--- velocity/engine/trunk/src/test/org/apache/velocity/test/issues/Velocity644TestCase.java (added)
+++ velocity/engine/trunk/src/test/org/apache/velocity/test/issues/Velocity644TestCase.java Mon Nov 24 08:58:33 2008
@@ -0,0 +1,57 @@
+package org.apache.velocity.test.issues;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.velocity.test.BaseEvalTestCase;
+import org.apache.velocity.runtime.RuntimeConstants;
+
+/**
+ * This class tests VELOCITY-644. Make sure the reported filename
+ * is correct in exceptions when an error occurs in another template file.
+ */
+public class Velocity644TestCase extends BaseEvalTestCase
+{
+ public Velocity644TestCase(String name)
+ {
+ super(name);
+ }
+
+ public void setUp() throws Exception
+ {
+ super.setUp();
+ engine.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, "test/templates/");
+ engine.setProperty(RuntimeConstants.VM_LIBRARY, "testCase644.vm");
+ engine.setProperty(RuntimeConstants.RUNTIME_REFERENCES_STRICT, Boolean.TRUE);
+ engine.setProperty(RuntimeConstants.SKIP_INVALID_ITERATOR, Boolean.FALSE);
+ context.put("NULL", null);
+ }
+
+ public void test629()
+ {
+ // Calling a null method
+ assertEvalExceptionAt("#nullMethod()", "testCase644.vm", 9, 8);
+ // An invalid array
+ assertEvalExceptionAt("#arrayError()", "testCase644.vm", 4, 8);
+ // An invalid reference
+ assertEvalExceptionAt("#badRef()", "testCase644.vm", 13, 3);
+ // Non iterable object
+ assertEvalExceptionAt("#forloop()", "testCase644.vm", 18, 18);
+ }
+}
Added: velocity/engine/trunk/test/templates/testCase644.vm
URL: http://svn.apache.org/viewvc/velocity/engine/trunk/test/templates/testCase644.vm?rev=720228&view=auto
==============================================================================
--- velocity/engine/trunk/test/templates/testCase644.vm (added)
+++ velocity/engine/trunk/test/templates/testCase644.vm Mon Nov 24 08:58:33 2008
@@ -0,0 +1,20 @@
+
+#macro(arrayError)
+ #set($foo = [])
+ $foo.get(2)
+#end
+
+#macro(nullMethod)
+ #set($foo = $NULL)
+ $foo.bar
+#end
+
+#macro(badRef)
+ $bar
+#end
+
+#macro(forloop)
+ #set($val = 1)
+ #foreach($i in $val)
+ #end
+#end