You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2013/09/30 15:08:58 UTC
svn commit: r1527542 - in /jena/trunk/jena-arq/src:
main/java/org/apache/jena/atlas/iterator/IteratorSlotted.java
test/java/org/apache/jena/atlas/iterator/TestIteratorSlotted.java
Author: andy
Date: Mon Sep 30 13:08:57 2013
New Revision: 1527542
URL: http://svn.apache.org/r1527542
Log:
IteratorSlotted did not respect null moveToNext.
Modified:
jena/trunk/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorSlotted.java
jena/trunk/jena-arq/src/test/java/org/apache/jena/atlas/iterator/TestIteratorSlotted.java
Modified: jena/trunk/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorSlotted.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorSlotted.java?rev=1527542&r1=1527541&r2=1527542&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorSlotted.java (original)
+++ jena/trunk/jena-arq/src/main/java/org/apache/jena/atlas/iterator/IteratorSlotted.java Mon Sep 30 13:08:57 2013
@@ -26,7 +26,6 @@ import com.hp.hpl.jena.sparql.util.Utils
/** An Iterator with a one slot lookahead. */
public abstract class IteratorSlotted<T> implements Iterator<T>
{
- // Could move in the async abort.
private boolean finished = false ;
private boolean slotIsSet = false ;
private T slot = null ;
@@ -65,6 +64,11 @@ public abstract class IteratorSlotted<T>
}
slot = moveToNext() ;
+ if ( slot == null ) {
+ close() ;
+ return false ;
+ }
+
slotIsSet = true ;
return true ;
}
Modified: jena/trunk/jena-arq/src/test/java/org/apache/jena/atlas/iterator/TestIteratorSlotted.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/org/apache/jena/atlas/iterator/TestIteratorSlotted.java?rev=1527542&r1=1527541&r2=1527542&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/test/java/org/apache/jena/atlas/iterator/TestIteratorSlotted.java (original)
+++ jena/trunk/jena-arq/src/test/java/org/apache/jena/atlas/iterator/TestIteratorSlotted.java Mon Sep 30 13:08:57 2013
@@ -19,49 +19,100 @@
package org.apache.jena.atlas.iterator;
import java.util.Arrays ;
+import java.util.Collection ;
import java.util.Iterator ;
import java.util.List ;
-import org.apache.jena.atlas.iterator.IteratorSlotted ;
import org.apache.jena.atlas.junit.BaseTest ;
import org.junit.Test ;
+import org.junit.runner.RunWith ;
+import org.junit.runners.Parameterized ;
+import org.junit.runners.Parameterized.Parameters ;
+
+@RunWith(Parameterized.class)
public class TestIteratorSlotted extends BaseTest
{
- static class IterStr extends IteratorSlotted<String>
+ @Parameters(name = "{index}: {0}")
+ public static Collection<Object[]> implementations() {
+ IterFactory factory1 = new IterFactory() {
+ @Override
+ public IteratorSlotted<String> create(String... array) {
+ return new IterStr1(array) ;
+ }} ;
+ IterFactory factory2 = new IterFactory() {
+ @Override
+ public IteratorSlotted<String> create(String... array) {
+ return new IterStr2(array) ;
+ }} ;
+ return Arrays.asList(new Object[][] { {"hasMore accurate", factory1}, {"hasMore always true", factory2} }) ;
+ }
+
+ /** Accurate hasMore */
+ static class IterStr1 extends IteratorSlotted<String>
{
- private List<String> array ;
+ private List<String> array ;
private Iterator<String> iter ;
- IterStr(String...array)
- {
+ IterStr1(String... array) {
this.array = Arrays.asList(array) ;
iter = this.array.iterator() ;
}
-
+
@Override
- protected String moveToNext()
- {
+ protected String moveToNext() {
return iter.next() ;
}
@Override
- protected boolean hasMore()
- {
+ protected boolean hasMore() {
return iter.hasNext() ;
}
-
+ }
+
+ /** hasMore ios always true, returns null in moveToNext */
+ static class IterStr2 extends IteratorSlotted<String>
+ {
+ private List<String> array ;
+ private Iterator<String> iter ;
+
+ IterStr2(String... array) {
+ this.array = Arrays.asList(array) ;
+ iter = this.array.iterator() ;
+ }
+
+ @Override
+ protected String moveToNext() {
+ if ( !iter.hasNext() )
+ return null ;
+ return iter.next() ;
+ }
+
+ @Override
+ protected boolean hasMore() {
+ return true ;
+ }
+ }
+
+
+ interface IterFactory { IteratorSlotted<String> create(String...array) ; }
+
+
+ private IterFactory factory ;
+
+ public TestIteratorSlotted(String name, IterFactory factory) {
+ this.factory = factory ;
}
@Test public void iter_01()
{
- IterStr iter = new IterStr() ;
+ IteratorSlotted<String> iter = factory.create() ;
assertFalse(iter.hasNext()) ;
}
@Test public void iter_02()
{
- IterStr iter = new IterStr("A") ;
+ IteratorSlotted<String> iter = factory.create("A") ;
assertTrue(iter.hasNext()) ;
assertEquals("A", iter.peek()) ;
assertEquals("A", iter.peek()) ;
@@ -72,7 +123,7 @@ public class TestIteratorSlotted extends
@Test public void iter_03()
{
- IterStr iter = new IterStr("A", "B") ;
+ IteratorSlotted<String> iter = factory.create("A", "B") ;
assertTrue(iter.hasNext()) ;
assertEquals("A", iter.peek()) ;
assertEquals("A", iter.next()) ;