You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by mb...@apache.org on 2007/01/10 23:37:25 UTC

svn commit: r495015 - in /jakarta/commons/proper/jxpath/trunk/src: java/org/apache/commons/jxpath/ri/compiler/Expression.java test/org/apache/commons/jxpath/ri/compiler/ExtensionFunctionTest.java

Author: mbenson
Date: Wed Jan 10 14:37:24 2007
New Revision: 495015

URL: http://svn.apache.org/viewvc?view=rev&rev=495015
Log:
[JXPATH-50] properly handle NodeSet returned by extension function.
Submitted by Keith D. Gregory.

Modified:
    jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/compiler/Expression.java
    jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/ExtensionFunctionTest.java

Modified: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/compiler/Expression.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/compiler/Expression.java?view=diff&rev=495015&r1=495014&r2=495015
==============================================================================
--- jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/compiler/Expression.java (original)
+++ jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/compiler/Expression.java Wed Jan 10 14:37:24 2007
@@ -16,6 +16,7 @@
  */
 package org.apache.commons.jxpath.ri.compiler;
 
+import org.apache.commons.jxpath.NodeSet;
 import org.apache.commons.jxpath.Pointer;
 import org.apache.commons.jxpath.ri.EvalContext;
 import org.apache.commons.jxpath.ri.model.NodePointer;
@@ -74,6 +75,9 @@
         if (result instanceof EvalContext) {
             return new ValueIterator((EvalContext) result);
         }
+        if (result instanceof NodeSet) {
+            return new ValueIterator(((NodeSet) result).getPointers().iterator());
+        }
         return ValueUtils.iterate(result);
     }
 
@@ -85,6 +89,11 @@
         if (result instanceof EvalContext) {
             return (EvalContext) result;
         }
+        if (result instanceof NodeSet) {
+            return new PointerIterator(((NodeSet) result).getPointers().iterator(),
+                    new QName(null, "value"),
+                    context.getRootContext().getCurrentNodePointer().getLocale());
+        }
         return new PointerIterator(ValueUtils.iterate(result),
                 new QName(null, "value"),
                 context.getRootContext().getCurrentNodePointer().getLocale());
@@ -95,6 +104,7 @@
         private QName qname;
         private Locale locale;
 
+        //to what method does the following comment refer?
         /**
          * @deprecated Use the method that takes a NamespaceManager
          */
@@ -110,7 +120,7 @@
 
         public Object next() {
             Object o = iterator.next();
-            return NodePointer.newNodePointer(qname, o, locale);
+            return o instanceof Pointer ? o : NodePointer.newNodePointer(qname, o, locale);
         }
 
         public void remove() {

Modified: jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/ExtensionFunctionTest.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/ExtensionFunctionTest.java?view=diff&rev=495015&r1=495014&r2=495015
==============================================================================
--- jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/ExtensionFunctionTest.java (original)
+++ jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/ExtensionFunctionTest.java Wed Jan 10 14:37:24 2007
@@ -46,6 +46,7 @@
 public class ExtensionFunctionTest extends JXPathTestCase {
     private Functions functions;
     private JXPathContext context;
+    private TestBean testBean;
 
     public static void main(String[] args) {
         TestRunner.run(ExtensionFunctionTest.class);
@@ -62,7 +63,8 @@
 
     public void setUp() {
         if (context == null) {
-            context = JXPathContext.newContext(new TestBean());
+            testBean = new TestBean();
+            context = JXPathContext.newContext(testBean);
             Variables vars = context.getVariables();
             vars.declareVariable("test", new TestFunctions(4, "test"));
 
@@ -337,6 +339,11 @@
             "test:nodeSet()/name",
             list("Name 1", "Name 2"));
 
+        assertXPathValueIterator(
+            context,
+            "test:nodeSet()",
+            list(testBean.getBeans()[0], testBean.getBeans()[1]));
+
         assertXPathPointerIterator(
             context,
             "test:nodeSet()/name",
@@ -379,4 +386,4 @@
             return 0;
         }
     }
-}
\ No newline at end of file
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org