You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by dm...@apache.org on 2003/05/06 04:13:27 UTC

cvs commit: jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/dynamic DynamicPropertiesModelTest.java

dmitri      2003/05/05 19:13:27

  Modified:    jxpath/src/java/org/apache/commons/jxpath/ri/axes
                        PredicateContext.java
               jxpath/src/test/org/apache/commons/jxpath/ri/model/dynamic
                        DynamicPropertiesModelTest.java
  Log:
  Fixed problem with collection of maps
  
  Revision  Changes    Path
  1.20      +26 -11    jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/axes/PredicateContext.java
  
  Index: PredicateContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/axes/PredicateContext.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- PredicateContext.java	25 Mar 2003 02:41:34 -0000	1.19
  +++ PredicateContext.java	6 May 2003 02:13:26 -0000	1.20
  @@ -99,14 +99,29 @@
           while (parentContext.nextNode()) {
               if (setupDynamicPropertyPointer()) {
                   Object pred = nameTestExpression.computeValue(parentContext);
  -                if (pred instanceof NodePointer) {
  -                    pred = ((NodePointer) pred).getValue();
  +                String propertyName = InfoSetUtil.stringValue(pred);
  +
  +                // At this point it would be nice to say: 
  +                // dynamicPropertyPointer.setPropertyName(propertyName)
  +                // and then: dynamicPropertyPointer.isActual().
  +                // However some PropertyPointers, e.g. DynamicPropertyPointer
  +                // will declare that any property you ask for is actual.
  +                // That's not acceptable for us: we really need to know
  +                // if the property is currently declared. Thus,
  +                // we'll need to perform a search.
  +                boolean ok = false;
  +                String names[] = dynamicPropertyPointer.getPropertyNames();
  +                for (int i = 0; i < names.length; i++) {
  +                    if (names[i].equals(propertyName)) {
  +                        ok = true;
  +                        break;
  +                    }
  +                }
  +                if (ok) {
  +                    dynamicPropertyPointer.setPropertyName(propertyName);
  +                    position++;
  +                    return true;
                   }
  -                dynamicPropertyPointer.setPropertyName(
  -                    InfoSetUtil.stringValue(pred));
  -                position = 1;
  -                done = true;
  -                return true;
               }
               else {
                   Object pred = expression.computeValue(parentContext);
  
  
  
  1.4       +38 -4     jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/dynamic/DynamicPropertiesModelTest.java
  
  Index: DynamicPropertiesModelTest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/dynamic/DynamicPropertiesModelTest.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- DynamicPropertiesModelTest.java	11 Mar 2003 00:59:39 -0000	1.3
  +++ DynamicPropertiesModelTest.java	6 May 2003 02:13:27 -0000	1.4
  @@ -62,6 +62,11 @@
   
   package org.apache.commons.jxpath.ri.model.dynamic;
   
  +import java.util.ArrayList;
  +import java.util.HashMap;
  +import java.util.List;
  +import java.util.Map;
  +
   import org.apache.commons.jxpath.JXPathContext;
   import org.apache.commons.jxpath.JXPathTestCase;
   import org.apache.commons.jxpath.TestBean;
  @@ -322,5 +327,34 @@
               "Remove dynamic property collection element",
               "temp2",
               context.getValue("map[@name = 'TestKey2'][1]"));
  +    }
  +    
  +    public void testCollectionOfMaps() {
  +        TestBean bean = (TestBean) context.getContextBean();
  +        List list = new ArrayList();
  +
  +        bean.getMap().put("stuff", list);        
  +
  +        Map m = new HashMap();
  +        m.put("fruit", "apple");
  +        list.add(m);
  +
  +        m = new HashMap();
  +        m.put("berry", "watermelon");
  +        list.add(m);
  +
  +        m = new HashMap();
  +        m.put("fruit", "banana");
  +        list.add(m);
  +
  +        assertXPathValueIterator(
  +            context,
  +            "/map/stuff/fruit",
  +            list("apple", "banana"));
  +
  +        assertXPathValueIterator(
  +            context,
  +            "/map/stuff[@name='fruit']",
  +            list("apple", "banana"));
       }
   }
  
  
  

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