Skip to content

Commit ad5d46a

Browse files
GH-4847 Add the missing ArrayBindingset iterator test cases.
Also fix a wrong copyright header.
1 parent 2a7bca5 commit ad5d46a

File tree

2 files changed

+96
-7
lines changed

2 files changed

+96
-7
lines changed

core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/ArrayBindingSet.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.util.ConcurrentModificationException;
1919
import java.util.Iterator;
2020
import java.util.List;
21+
import java.util.NoSuchElementException;
2122
import java.util.Set;
2223
import java.util.function.BiConsumer;
2324
import java.util.function.Function;
@@ -346,12 +347,16 @@ public Binding next() {
346347
}
347348
}
348349

349-
String name = bindingNames[index];
350-
Value value = values[index++];
351-
if (value != null) {
352-
return new SimpleBinding(name, value);
353-
} else {
354-
return null;
350+
try {
351+
String name = bindingNames[index];
352+
Value value = values[index++];
353+
if (value != null) {
354+
return new SimpleBinding(name, value);
355+
} else {
356+
return null;
357+
}
358+
} catch (ArrayIndexOutOfBoundsException e) {
359+
throw new NoSuchElementException();
355360
}
356361
}
357362

core/queryalgebra/evaluation/src/test/java/org/eclipse/rdf4j/query/algebra/evaluation/ArrayBindingSetTest.java

Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2015 Eclipse RDF4J contributors, Aduna, and others.
2+
* Copyright (c) 2021 Eclipse RDF4J contributors.
33
*
44
* All rights reserved. This program and the accompanying materials
55
* are made available under the terms of the Eclipse Distribution License v1.0
@@ -10,13 +10,19 @@
1010
*******************************************************************************/
1111
package org.eclipse.rdf4j.query.algebra.evaluation;
1212

13+
import static org.assertj.core.api.Assertions.fail;
1314
import static org.junit.jupiter.api.Assertions.assertEquals;
1415
import static org.junit.jupiter.api.Assertions.assertFalse;
16+
import static org.junit.jupiter.api.Assertions.assertNotNull;
1517
import static org.junit.jupiter.api.Assertions.assertTrue;
1618

19+
import java.util.Iterator;
20+
import java.util.NoSuchElementException;
21+
1722
import org.eclipse.rdf4j.model.ValueFactory;
1823
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
1924
import org.eclipse.rdf4j.model.vocabulary.RDF;
25+
import org.eclipse.rdf4j.query.Binding;
2026
import org.eclipse.rdf4j.query.BindingSet;
2127
import org.eclipse.rdf4j.query.impl.MapBindingSet;
2228
import org.junit.jupiter.api.BeforeEach;
@@ -77,4 +83,82 @@ public void testEqualsHashcode() {
7783
assertEquals(bs1.hashCode(), bs2.hashCode());
7884
}
7985

86+
@Test
87+
public void testEmptyIterator() {
88+
89+
ArrayBindingSet bs = new ArrayBindingSet("foo");
90+
Iterator<Binding> iterator = bs.iterator();
91+
assertNotNull(iterator);
92+
assertFalse(iterator.hasNext());
93+
}
94+
95+
@Test
96+
public void testOneElementIterator() {
97+
ArrayBindingSet bs = new ArrayBindingSet("foo");
98+
bs.setBinding("foo", RDF.FIRST);
99+
Iterator<Binding> iterator = bs.iterator();
100+
assertNotNull(iterator);
101+
assertTrue(iterator.hasNext());
102+
assertTrue(iterator.hasNext());
103+
assertTrue(iterator.hasNext());
104+
assertNotNull(iterator.next());
105+
assertFalse(iterator.hasNext());
106+
try {
107+
iterator.next();
108+
fail("There are no more elements");
109+
} catch (NoSuchElementException e) {
110+
assertNotNull(e);
111+
}
112+
}
113+
114+
@Test
115+
public void testThreeElementIterator() {
116+
ArrayBindingSet bs = new ArrayBindingSet("first", "alt", "bag");
117+
bs.setBinding("first", RDF.FIRST);
118+
bs.setBinding("alt", RDF.ALT);
119+
bs.setBinding("bag", RDF.BAG);
120+
Iterator<Binding> iterator = bs.iterator();
121+
assertNotNull(iterator);
122+
assertTrue(iterator.hasNext());
123+
Binding first = iterator.next();
124+
assertNotNull(first);
125+
assertTrue(iterator.hasNext());
126+
Binding alt = iterator.next();
127+
assertNotNull(alt);
128+
assertEquals("alt", alt.getName());
129+
assertTrue(iterator.hasNext());
130+
Binding bag = iterator.next();
131+
assertNotNull(bag);
132+
assertEquals("bag", bag.getName());
133+
assertFalse(iterator.hasNext());
134+
try {
135+
iterator.next();
136+
fail("There are no more elements");
137+
} catch (NoSuchElementException e) {
138+
assertNotNull(e);
139+
}
140+
}
141+
142+
@Test
143+
public void testThreeWithTwoElementsSetIterator() {
144+
ArrayBindingSet bs = new ArrayBindingSet("first", "alt", "bag");
145+
bs.setBinding("first", RDF.FIRST);
146+
bs.setBinding("bag", RDF.BAG);
147+
Iterator<Binding> iterator = bs.iterator();
148+
assertNotNull(iterator);
149+
assertTrue(iterator.hasNext());
150+
Binding first = iterator.next();
151+
assertNotNull(first);
152+
assertTrue(iterator.hasNext());
153+
Binding bag = iterator.next();
154+
assertNotNull(bag);
155+
assertEquals("bag", bag.getName());
156+
assertFalse(iterator.hasNext());
157+
try {
158+
iterator.next();
159+
fail("There are no more elements");
160+
} catch (NoSuchElementException e) {
161+
assertNotNull(e);
162+
}
163+
}
80164
}

0 commit comments

Comments
 (0)