### Question:
EventObservableList extends AbstractList<E> implements ObservableList<E>,
        ListEventListener<E> { @Override public ListIterator<E> listIterator() { source.getReadWriteLock().readLock().lock(); try { return source.listIterator(); } finally { source.getReadWriteLock().readLock().unlock(); } } EventObservableList(EventList<E> source); void dispose(); @Override void addListener(ListChangeListener<? super E> listener); @Override void removeListener(ListChangeListener<? super E> listener); @Override void addListener(InvalidationListener listener); @Override void removeListener(InvalidationListener listener); @Override boolean addAll(E... es); @Override boolean setAll(E... es); @Override boolean setAll(Collection<? extends E> es); @Override boolean removeAll(E... es); @Override boolean retainAll(E... es); @Override void remove(int from, int to); @Override int size(); @Override boolean isEmpty(); @Override boolean contains(Object o); @Override Iterator<E> iterator(); @Override void forEach(Consumer<? super E> action); @Override Object[] toArray(); @Override T[] toArray(T[] a); @Override boolean add(E e); @Override boolean remove(Object o); @Override boolean containsAll(Collection<?> c); @Override boolean addAll(Collection<? extends E> c); @Override boolean addAll(int index, Collection<? extends E> c); @Override boolean removeAll(Collection<?> c); @Override boolean retainAll(Collection<?> c); @Override void clear(); @Override boolean removeIf(Predicate<? super E> filter); @Override void replaceAll(UnaryOperator<E> operator); @Override void sort(Comparator<? super E> c); @Override Stream<E> stream(); @Override Stream<E> parallelStream(); @Override Spliterator<E> spliterator(); @Override E get(int index); @Override E set(int index, E element); @Override void add(int index, E element); @Override E remove(int index); @Override int indexOf(Object o); @Override int lastIndexOf(Object o); @Override ListIterator<E> listIterator(); @Override ListIterator<E> listIterator(int index); @Override List<E> subList(int fromIndex, int toIndex); @Override void listChanged(ListEvent<E> source_changes);  }### Answer:
@Test public void testListIteratorIndex() { ListIterator<String> it = wrapper.listIterator(2); assertTrue(it.hasNext()); assertEquals("Cantaloupe", it.next()); assertTrue(it.hasNext()); assertEquals("Dragon fruit", it.next()); assertFalse(it.hasNext()); assertTrue(it.hasPrevious()); assertEquals("Dragon fruit", it.previous()); assertTrue(it.hasPrevious()); assertEquals("Cantaloupe", it.previous()); }