ResultSet.hasNext should be idempotent

Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/0fd1706e
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/0fd1706e
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/0fd1706e

Branch: refs/heads/TINKERPOP-1254
Commit: 0fd1706e95998204c61e43b78f204e118c059fc8
Parents: f9706a3
Author: Robert Dale <robert.d...@sensus.com>
Authored: Fri Jun 24 16:13:33 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 6 10:32:29 2016 -0400

----------------------------------------------------------------------
 .../tinkerpop/gremlin/driver/ResultSet.java      |  4 +++-
 .../tinkerpop/gremlin/driver/ResultSetTest.java  | 19 +++++++++++++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0fd1706e/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ResultSet.java
----------------------------------------------------------------------
diff --git 
a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ResultSet.java
 
b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ResultSet.java
index d4e233b..78a4892 100644
--- 
a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ResultSet.java
+++ 
b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ResultSet.java
@@ -127,7 +127,9 @@ public final class ResultSet implements Iterable<Result> {
 
             @Override
             public boolean hasNext() {
-                nextOne = one();
+                if (null == nextOne) {
+                    nextOne = one();
+                }
                 return nextOne != null;
             }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0fd1706e/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ResultSetTest.java
----------------------------------------------------------------------
diff --git 
a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ResultSetTest.java
 
b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ResultSetTest.java
index 392566a..ea3729f 100644
--- 
a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ResultSetTest.java
+++ 
b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ResultSetTest.java
@@ -174,4 +174,23 @@ public class ResultSetTest extends AbstractResultQueueTest 
{
 
         assertEquals(100, counter.get());
     }
+    
+    @Test
+    public void shouldCallHasNextWithoutSideEffect() throws Exception {
+        final Iterator itty = resultSet.iterator();
+        final AtomicInteger counter = new AtomicInteger(0);
+
+        addToQueue(100, 1, true, true);
+
+        for (int i = 0; i < 101; i++) {
+               assertThat(itty.hasNext(), is(true));
+        }
+        
+        while (itty.hasNext()) {
+            itty.next();
+            counter.incrementAndGet();
+        }
+
+        assertEquals(100, counter.get());
+    }
 }

Reply via email to