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()); + } }