You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2005/07/13 15:05:03 UTC

svn commit: r216152 - in /incubator/jackrabbit/trunk/core/src: java/org/apache/jackrabbit/core/query/lucene/ test/org/apache/jackrabbit/test/api/query/

Author: mreutegg
Date: Wed Jul 13 06:05:01 2005
New Revision: 216152

URL: http://svn.apache.org/viewcvs?rev=216152&view=rev
Log:
- Fix for wrong values returned by getPosition()
- Added test case for NodeIterator returned by QueryResult

Added:
    incubator/jackrabbit/trunk/core/src/test/org/apache/jackrabbit/test/api/query/NodeIteratorTest.java   (with props)
Modified:
    incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/DocOrderNodeIteratorImpl.java
    incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/NodeIteratorImpl.java
    incubator/jackrabbit/trunk/core/src/test/org/apache/jackrabbit/test/api/query/TestAll.java

Modified: incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/DocOrderNodeIteratorImpl.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/DocOrderNodeIteratorImpl.java?rev=216152&r1=216151&r2=216152&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/DocOrderNodeIteratorImpl.java (original)
+++ incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/DocOrderNodeIteratorImpl.java Wed Jul 13 06:05:01 2005
@@ -177,7 +177,7 @@
                         ScoreNode n1 = (ScoreNode) o1;
                         ScoreNode n2 = (ScoreNode) o2;
                         try {
-                            NodeImpl node1 = null;
+                            NodeImpl node1;
                             try {
                                 node1 = (NodeImpl) itemMgr.getItem(new NodeId(n1.uuid));
                             } catch (RepositoryException e) {
@@ -186,7 +186,7 @@
                                 invalidUUIDs.add(n1.uuid);
                                 throw new SortFailedException();
                             }
-                            NodeImpl node2 = null;
+                            NodeImpl node2;
                             try {
                                 node2 = (NodeImpl) itemMgr.getItem(new NodeId(n2.uuid));
                             } catch (RepositoryException e) {

Modified: incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/NodeIteratorImpl.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/NodeIteratorImpl.java?rev=216152&r1=216151&r2=216152&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/NodeIteratorImpl.java (original)
+++ incubator/jackrabbit/trunk/core/src/java/org/apache/jackrabbit/core/query/lucene/NodeIteratorImpl.java Wed Jul 13 06:05:01 2005
@@ -44,7 +44,7 @@
     protected final ItemManager itemMgr;
 
     /** Current position in the UUID array */
-    protected int pos = 0;
+    protected int pos = -1;
 
     /** Reference to the next node instance */
     private NodeImpl next;
@@ -113,7 +113,12 @@
         if ((pos + skipNum) > uuids.length) {
             throw new NoSuchElementException();
         }
-        pos += skipNum;
+        if (skipNum == 0) {
+            // do nothing
+        } else {
+            pos += skipNum - 1;
+            fetchNext();
+        }
     }
 
     /**
@@ -166,7 +171,7 @@
         if (!hasNext()) {
             throw new NoSuchElementException();
         }
-        return scores[pos - 1].floatValue();
+        return scores[pos].floatValue();
     }
 
     /**
@@ -178,14 +183,16 @@
     protected void fetchNext() {
         // reset
         next = null;
-        while (next == null && pos < uuids.length) {
+        while (next == null && (pos + 1) < uuids.length) {
             try {
-                next = (NodeImpl) itemMgr.getItem(new NodeId(uuids[pos++]));
+                next = (NodeImpl) itemMgr.getItem(new NodeId(uuids[pos + 1]));
             } catch (RepositoryException e) {
                 log.error("Exception retrieving Node with UUID: "
-                        + uuids[pos - 1] + ": " + e.toString());
+                        + uuids[pos + 1] + ": " + e.toString());
                 // try next
+                pos++;
             }
         }
+        pos++;
     }
 }

Added: incubator/jackrabbit/trunk/core/src/test/org/apache/jackrabbit/test/api/query/NodeIteratorTest.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/core/src/test/org/apache/jackrabbit/test/api/query/NodeIteratorTest.java?rev=216152&view=auto
==============================================================================
--- incubator/jackrabbit/trunk/core/src/test/org/apache/jackrabbit/test/api/query/NodeIteratorTest.java (added)
+++ incubator/jackrabbit/trunk/core/src/test/org/apache/jackrabbit/test/api/query/NodeIteratorTest.java Wed Jul 13 06:05:01 2005
@@ -0,0 +1,157 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation or its licensors,
+ *                     as applicable.
+ *
+ * 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.
+ */
+package org.apache.jackrabbit.test.api.query;
+
+import org.apache.jackrabbit.test.NotExecutableException;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.NodeIterator;
+import javax.jcr.query.Query;
+import javax.jcr.query.QueryResult;
+import java.util.NoSuchElementException;
+
+/**
+ * Tests methods on {@link javax.jcr.NodeIterator} returned by
+ * {@link javax.jcr.query.QueryResult#getNodes()}.
+ *
+ * @test
+ * @sources NodeIteratorTest.java
+ * @executeClass org.apache.jackrabbit.test.api.query.NodeIteratorTest
+ * @keywords level2
+ */
+public class NodeIteratorTest extends AbstractQueryTest {
+
+    /**
+     * Sets up the fixture for test cases.
+     */
+    protected void setUp() throws Exception {
+        super.setUp();
+        testRootNode.addNode(nodeName1, testNodeType);
+        testRootNode.addNode(nodeName2, testNodeType);
+        testRootNode.addNode(nodeName3, testNodeType);
+        testRootNode.save();
+    }
+
+    /**
+     * Tests if {@link javax.jcr.NodeIterator#getSize()} returns the correct
+     * size.
+     *
+     * @throws org.apache.jackrabbit.test.NotExecutableException
+     *          if getSize() returns -1 (unavailable).
+     */
+    public void testGetSize() throws RepositoryException, NotExecutableException {
+        NodeIterator it = execute(testPath + "//*", Query.XPATH).getNodes();
+        long size = testRootNode.getNodes().getSize();
+        if (size != -1) {
+            long count = 0;
+            while (it.hasNext()) {
+                it.nextNode();
+                count++;
+            }
+            assertEquals("NodeIterator.getSize does not return correct number.", size, count);
+        } else {
+            throw new NotExecutableException("NodeIterator.getSize() does not return size information.");
+        }
+    }
+
+    /**
+     * Tests the method <code>NodeIterator.getPosition()</code>.
+     */
+    public void testGetPosition() throws RepositoryException {
+        QueryResult rs = execute(testPath + "//*", Query.XPATH);
+
+        // getPosition initially returns 0
+        NodeIterator it = rs.getNodes();
+        assertEquals("Initial call to getPosition() must return 0.", 0, it.getPosition());
+
+        // check getPosition while iterating
+        int index = 0;
+        while (it.hasNext()) {
+            it.nextNode();
+            assertEquals("Wrong position returned by getPosition()", ++index, it.getPosition());
+        }
+    }
+
+    /**
+     * Tests the method <code>NodeIterator.getPosition()</code> on an empty
+     * <code>NodeIterator</code>.
+     */
+    public void testGetPositionEmptyIterator() throws RepositoryException {
+        QueryResult rs = execute(testPath + "/" + nodeName4, Query.XPATH);
+
+        NodeIterator it = rs.getNodes();
+        assertFalse("NodeIterator must be empty.", it.hasNext());
+
+        assertEquals("Empty NodeIterator must return 0 on getPosition()", 0, it.getPosition());
+    }
+
+    /**
+     * Tests if a {@link java.util.NoSuchElementException} is thrown when {@link
+     * javax.jcr.NodeIterator#nextNode()} is called and there are no more nodes
+     * available.
+     */
+    public void testNoSuchElementException() throws RepositoryException {
+        NodeIterator it = execute(testPath + "//*", Query.XPATH).getNodes();
+        while (it.hasNext()) {
+            it.nextNode();
+        }
+        try {
+            it.nextNode();
+            fail("nextNode() must throw a NoSuchElementException when no nodes are available");
+        } catch (NoSuchElementException e) {
+            // success
+        }
+    }
+
+    /**
+     * Tests if {@link javax.jcr.NodeIterator#skip(long)} works correctly.
+     */
+    public void testSkip() throws RepositoryException {
+        QueryResult rs = execute(testPath + "//*", Query.XPATH);
+        NodeIterator it = rs.getNodes();
+
+        // find out if there is anything we can skip
+        int count = 0;
+        while (it.hasNext()) {
+            it.nextNode();
+            count++;
+        }
+        if (count > 1) {
+            // re-aquire iterator
+            it = rs.getNodes();
+            // skip all but one
+            it.skip(count - 1);
+            // get last one
+            it.nextNode();
+            try {
+                it.nextNode();
+                fail("nextNode() must throw a NoSuchElementException when no nodes are available");
+            } catch (NoSuchElementException e) {
+                // success
+            }
+
+            // re-aquire iterator
+            it = rs.getNodes();
+            try {
+                it.skip(count + 1);
+                fail("skip() must throw a NoSuchElementException if one tries to skip past the end of the iterator");
+            } catch (NoSuchElementException e) {
+                // success
+            }
+        }
+    }
+}

Propchange: incubator/jackrabbit/trunk/core/src/test/org/apache/jackrabbit/test/api/query/NodeIteratorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/jackrabbit/trunk/core/src/test/org/apache/jackrabbit/test/api/query/TestAll.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/core/src/test/org/apache/jackrabbit/test/api/query/TestAll.java?rev=216152&r1=216151&r2=216152&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/core/src/test/org/apache/jackrabbit/test/api/query/TestAll.java (original)
+++ incubator/jackrabbit/trunk/core/src/test/org/apache/jackrabbit/test/api/query/TestAll.java Wed Jul 13 06:05:01 2005
@@ -58,6 +58,7 @@
         suite.addTestSuite(GetStatementTest.class);
         suite.addTestSuite(GetSupportedQueryLanguagesTest.class);
 
+        suite.addTestSuite(NodeIteratorTest.class);
         suite.addTestSuite(GetPropertyNamesTest.class);
         suite.addTestSuite(PredicatesTest.class);
         suite.addTestSuite(SimpleSelectionTest.class);