### Question:
AbstractNotifyOnUpdateList implements List<E> { @Override public ListIterator<E> listIterator() { return new ListItr(this.list.listIterator()); } protected  AbstractNotifyOnUpdateList(List<E> list); @Override boolean add(E e); @Override void add(int index, E element); @Override boolean addAll(Collection<? extends E> c); @Override boolean addAll(int index, Collection<? extends E> c); @Override void clear(); @Override boolean contains(Object o); @Override boolean containsAll(Collection<?> c); @Override boolean equals(Object o); @Override E get(int index); @Override int hashCode(); @Override int indexOf(Object o); @Override boolean isEmpty(); @Override Iterator<E> iterator(); @Override int lastIndexOf(Object o); @Override ListIterator<E> listIterator(); @Override ListIterator<E> listIterator(int index); @Override E remove(int index); @Override boolean remove(Object o); @Override boolean removeAll(Collection<?> c); @Override boolean retainAll(Collection<?> c); @Override E set(int index, E element); @Override int size(); @Override List<E> subList(int fromIndex, int toIndex); @Override Object[] toArray(); @Override T[] toArray(T[] a); @Override String toString();  }### Answer:
@Test public void testListIterator() { int expectedCounter = 0; NotifyOnUpdateList list = new NotifyOnUpdateList(new LinkedList<Integer>(Arrays.asList(8, 7))); assertEquals(expectedCounter, list.getCounter()); ListIterator<Integer> listIterator = list.listIterator(); listIterator.next(); listIterator.set(9); assertEquals(++expectedCounter, list.getCounter()); listIterator.next(); listIterator.add(10); assertEquals(++expectedCounter, list.getCounter()); assertEquals(Arrays.asList(9, 7, 10), list); }