Author: wglass
Date: Sun Sep 25 00:03:09 2005
New Revision: 291378
URL: http://svn.apache.org/viewcvs?rev=291378&view=rev
Log:
pass template info to uberspector for methods and properties
Added:
jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/InfoTestCase.java
jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/misc/UberspectTestException.java
jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/misc/UberspectTestImpl.java
jakarta/velocity/core/trunk/test/info/
jakarta/velocity/core/trunk/test/info/info1.vm
jakarta/velocity/core/trunk/test/info/info2.vm
Modified:
jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTMethod.java
jakarta/velocity/core/trunk/src/java/org/apache/velocity/util/introspection/UberspectImpl.java
Modified:
jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTMethod.java
URL:
http://svn.apache.org/viewcvs/jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTMethod.java?rev=291378&r1=291377&r2=291378&view=diff
==============================================================================
---
jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTMethod.java
(original)
+++
jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTMethod.java
Sun Sep 25 00:03:09 2005
@@ -126,15 +126,14 @@
MethodCacheKey mck = new MethodCacheKey(paramClasses);
IntrospectionCacheData icd = context.icacheGet( mck );
- Class c = o.getClass();
-
+
/*
* like ASTIdentifier, if we have cache information, and the
* Class of Object o is the same as that in the cache, we are
* safe.
*/
- if ( icd != null && icd.contextData == c )
+ if ( icd != null && (o != null && icd.contextData == o.getClass())
)
{
/*
@@ -153,12 +152,12 @@
for (int j = 0; j < paramCount; j++)
params[j] = jjtGetChild(j + 1).value(context);
- method = rsvc.getUberspect().getMethod(o, methodName, params,
new Info("",1,1));
+ method = rsvc.getUberspect().getMethod(o, methodName, params,
new Info(context.getCurrentTemplateName(), getLine(), getColumn()));
if (method != null)
{
icd = new IntrospectionCacheData();
- icd.contextData = c;
+ icd.contextData = o.getClass();
icd.thingy = method;
context.icachePut( mck, icd );
Modified:
jakarta/velocity/core/trunk/src/java/org/apache/velocity/util/introspection/UberspectImpl.java
URL:
http://svn.apache.org/viewcvs/jakarta/velocity/core/trunk/src/java/org/apache/velocity/util/introspection/UberspectImpl.java?rev=291378&r1=291377&r2=291378&view=diff
==============================================================================
---
jakarta/velocity/core/trunk/src/java/org/apache/velocity/util/introspection/UberspectImpl.java
(original)
+++
jakarta/velocity/core/trunk/src/java/org/apache/velocity/util/introspection/UberspectImpl.java
Sun Sep 25 00:03:09 2005
@@ -49,7 +49,7 @@
/**
* the default Velocity introspector
*/
- private static Introspector introspector;
+ protected static Introspector introspector;
/**
* init - does nothing - we need to have setRuntimeLogger
@@ -170,7 +170,7 @@
identifier);
}
- return (executor != null) ? new VelGetterImpl(executor) : null;
+ return (executor.isAlive()) ? new VelGetterImpl(executor) : null;
}
/**
Added:
jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/InfoTestCase.java
URL:
http://svn.apache.org/viewcvs/jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/InfoTestCase.java?rev=291378&view=auto
==============================================================================
---
jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/InfoTestCase.java
(added)
+++
jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/InfoTestCase.java
Sun Sep 25 00:03:09 2005
@@ -0,0 +1,127 @@
+package org.apache.velocity.test;
+
+import java.io.IOException;
+import java.io.StringWriter;
+
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.Velocity;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.context.Context;
+import org.apache.velocity.test.misc.UberspectTestException;
+import org.apache.velocity.test.misc.UberspectTestImpl;
+import org.apache.velocity.util.introspection.Info;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+
+/*
+ * Copyright 2001-2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+
+/**
+ * Test that the Info class in the Introspector holds the correct information.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Will Glass-Husain</a>
+ * @author <a href="mailto:[EMAIL PROTECTED]">Llewellyn Falco</a>
+ * @version $Id: IntrospectorTestCase.java 290983 2005-09-22 17:05:48Z henning
$
+ */
+public class InfoTestCase extends BaseTestCase implements TemplateTestBase
+{
+ VelocityEngine ve;
+
+ /**
+ * Default constructor.
+ */
+ public InfoTestCase(String name)
+ {
+ super(name);
+ }
+
+ public static Test suite ()
+ {
+ return new TestSuite(InfoTestCase.class);
+ }
+
+ public void setUp() throws Exception
+ {
+ ve = new VelocityEngine();
+ ve.setProperty(
+ "runtime.introspector.uberspect",
"org.apache.velocity.test.misc.UberspectTestImpl");
+
+ ve.setProperty(
+ Velocity.FILE_RESOURCE_LOADER_PATH, "test/info");
+
+ ve.init();
+ }
+
+
+
+ public void testInfoProperty() throws Exception
+ {
+ // check property
+ checkInfo("info1.vm", 1, 7);
+ }
+
+ public void testInfoMethod() throws Exception
+ {
+ // check method
+ checkInfo("info2.vm", 1, 7);
+ }
+
+ public void checkInfo(String templateName,
+ int expectedLine, int expectedCol) throws Exception
+ {
+ Context context = new VelocityContext();
+ StringWriter writer = new StringWriter();
+ Template template = ve.getTemplate(templateName, "UTF-8");
+ Info info = null;
+
+ context.put("main", this);
+
+ try
+ {
+ template.merge(context, writer);
+ writer.flush();
+ fail("Uberspect should have thrown an exception");
+ }
+ catch (UberspectTestException E)
+ {
+ info = E.getInfo();
+ }
+ finally
+ {
+ try
+ {
+ writer.close();
+ }
+ catch (IOException E)
+ {
+ }
+ }
+ assertInfoEqual(info, templateName, expectedLine, expectedCol);
+
+ }
+
+ private void assertInfoEqual(Info i, String name, int line, int column)
+ {
+ assertEquals("Template Name", name, i.getTemplateName());
+ assertEquals("Template Line", line, i.getLine());
+ assertEquals("Template Column", column, i.getColumn());
+ }
+
+}
Added:
jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/misc/UberspectTestException.java
URL:
http://svn.apache.org/viewcvs/jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/misc/UberspectTestException.java?rev=291378&view=auto
==============================================================================
---
jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/misc/UberspectTestException.java
(added)
+++
jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/misc/UberspectTestException.java
Sun Sep 25 00:03:09 2005
@@ -0,0 +1,48 @@
+package org.apache.velocity.test.misc;
+
+import org.apache.velocity.util.introspection.Info;
+
+/*
+ * Copyright 2001-2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+
+/**
+ * Exception that returns an Info object for testing after a introspection
problem.
+ * This extends Error so that it will stop parsing and allow
+ * internal info to be examined.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Will Glass-Husain</a>
+ * @author <a href="mailto:[EMAIL PROTECTED]">Llewellyn Falco</a>
+ * @version $Id: IntrospectorTestCase.java 290983 2005-09-22 17:05:48Z henning
$
+ */
+public class UberspectTestException extends Error
+{
+
+ Info info;
+
+ public UberspectTestException(String string, Info i)
+ {
+ super(string);
+ info = i;
+ }
+
+ public Info getInfo()
+ {
+ return info;
+ }
+
+
+}
Added:
jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/misc/UberspectTestImpl.java
URL:
http://svn.apache.org/viewcvs/jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/misc/UberspectTestImpl.java?rev=291378&view=auto
==============================================================================
---
jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/misc/UberspectTestImpl.java
(added)
+++
jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/misc/UberspectTestImpl.java
Sun Sep 25 00:03:09 2005
@@ -0,0 +1,57 @@
+package org.apache.velocity.test.misc;
+
+import org.apache.velocity.util.introspection.Info;
+import org.apache.velocity.util.introspection.UberspectImpl;
+import org.apache.velocity.util.introspection.VelMethod;
+import org.apache.velocity.util.introspection.VelPropertyGet;
+
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+/**
+ * A introspector that allows testing when methods are not found.
+ */
+public class UberspectTestImpl extends UberspectImpl
+{
+
+ public VelMethod getMethod(Object obj, String methodName, Object[] args,
Info i) throws Exception
+ {
+ VelMethod method = super.getMethod(obj, methodName, args, i);
+
+ if (method == null)
+ {
+ throw new UberspectTestException("Method " +
+ obj.getClass().getName() + "." + methodName +
+ " does not exist.", i);
+ }
+
+ return method;
+ }
+
+ public VelPropertyGet getPropertyGet(Object obj, String identifier, Info
i) throws Exception
+ {
+ VelPropertyGet propertyGet = super.getPropertyGet(obj, identifier, i);
+
+ if (propertyGet == null)
+ {
+ throw new UberspectTestException("Did not find "+
+ obj.getClass().getName()+"."+identifier, i);
+ }
+
+ return propertyGet;
+ }
+
+}
\ No newline at end of file
Added: jakarta/velocity/core/trunk/test/info/info1.vm
URL:
http://svn.apache.org/viewcvs/jakarta/velocity/core/trunk/test/info/info1.vm?rev=291378&view=auto
==============================================================================
--- jakarta/velocity/core/trunk/test/info/info1.vm (added)
+++ jakarta/velocity/core/trunk/test/info/info1.vm Sun Sep 25 00:03:09 2005
@@ -0,0 +1 @@
+$main.unknownField
\ No newline at end of file
Added: jakarta/velocity/core/trunk/test/info/info2.vm
URL:
http://svn.apache.org/viewcvs/jakarta/velocity/core/trunk/test/info/info2.vm?rev=291378&view=auto
==============================================================================
--- jakarta/velocity/core/trunk/test/info/info2.vm (added)
+++ jakarta/velocity/core/trunk/test/info/info2.vm Sun Sep 25 00:03:09 2005
@@ -0,0 +1 @@
+$main.unknownMethod()
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]