package org.infinispan.query.impl; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; import java.util.Arrays; import java.util.NoSuchElementException; import org.testng.annotations.Test; /** * @author Marko Luksa */ @Test(groups = "unit", testName = "query.impl.NullFilteringIteratorTest") public class NullFilteringIteratorTest { @Test public void testEmptyIteratorReturnsFalseOnHasNext() { NullFilteringIterator<String> iterator = getIterator(); // empty iterator assertFalse(iterator.hasNext()); } @Test public void testEmptyIteratorThrowsExceptionOnNext() { NullFilteringIterator<String> iterator = getIterator(); // empty iterator try { iterator.next(); fail("Expected NoSuchElementException"); } catch (NoSuchElementException e) { } } @Test public void testNonNullValue() { NullFilteringIterator<String> iterator = getIterator("foo"); assertTrue(iterator.hasNext()); assertEquals(iterator.next(), "foo"); assertFalse(iterator.hasNext()); } @Test public void testNullValue() { NullFilteringIterator<String> iterator = getIterator((String) null); assertFalse(iterator.hasNext()); try { iterator.next(); fail("Expected NoSuchElementException"); } catch (NoSuchElementException e) { } } @Test public void testSingleNullValue() { NullFilteringIterator<String> iterator = getIterator(null, "foo"); assertTrue(iterator.hasNext()); assertEquals(iterator.next(), "foo"); assertFalse(iterator.hasNext()); } @Test public void testMultipleConsecutiveNullValues() { NullFilteringIterator<String> iterator = getIterator(null, null, null, "foo"); assertTrue(iterator.hasNext()); assertEquals(iterator.next(), "foo"); assertFalse(iterator.hasNext()); } @Test public void testNullValueAtTheEnd() { NullFilteringIterator<String> iterator = getIterator("foo", null); assertTrue(iterator.hasNext()); assertEquals(iterator.next(), "foo"); assertFalse(iterator.hasNext()); } @Test public void testMultipleNullValuesAtTheEnd() { NullFilteringIterator<String> iterator = getIterator("foo", null, null, null); assertTrue(iterator.hasNext()); assertEquals(iterator.next(), "foo"); assertFalse(iterator.hasNext()); } @Test public void testNextOnly() { NullFilteringIterator<String> iterator = getIterator(null, "foo", null, "bar", null); assertEquals(iterator.next(), "foo"); assertEquals(iterator.next(), "bar"); try { iterator.next(); fail("Expected NoSuchElementException"); } catch (NoSuchElementException e) { } } @Test public void testHasNextDoesNotAdvanceIterator() { NullFilteringIterator<String> iterator = getIterator("foo"); assertTrue(iterator.hasNext()); assertTrue(iterator.hasNext()); assertEquals(iterator.next(), "foo"); assertFalse(iterator.hasNext()); } private <E> NullFilteringIterator<E> getIterator(E... elements) { return new NullFilteringIterator<E>(Arrays.asList(elements).iterator()); } }