### Question:
MultiValuePropertyList extends MultiValuePropertyCollection<E> implements List<E> { @Override public void add(int index, E element) { getValuesList().add(index, JcrPropertyUtil.asValue(getValueFactory(), element)); synchProperty(); } MultiValuePropertyList(Node parent, String propertyName);  MultiValuePropertyList(Node parent, String propertyName, boolean weakRefs);  MultiValuePropertyList(Node parent, String propertyName, List<Value> list);  MultiValuePropertyList(Node parent, String propertyName, boolean weakRefs, List<Value> list);  MultiValuePropertyList(Node parent, String propertyName, List<Value> list, MultiValuePropertyList<E> parentList);  MultiValuePropertyList(Property prop); protected  MultiValuePropertyList(Property prop, List<Value> list); protected  MultiValuePropertyList(Property prop, List<Value> list, MultiValuePropertyList<E> parentList); @Override boolean addAll(int index, Collection<? extends E> c); @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);  }### Answer:
@Test public void testAdd() { metadata.commit(() -> { List<String> list = getList("prop1"); boolean result = list.add("x"); result |= list.add("y"); assertThat(result).isTrue(); }, MetadataAccess.SERVICE); metadata.read(() -> { List<String> list = getList("prop1"); assertThat(list).contains("a", "b", "c", "x", "y"); }, MetadataAccess.SERVICE); }
@Test public void testAddIdx() { metadata.commit(() -> { List<String> list = getList("prop1"); list.add(1, "x"); list.add(1, "y"); }, MetadataAccess.SERVICE); metadata.read(() -> { List<String> list = getList("prop1"); assertThat(list).contains("a", "y", "x", "b", "c"); }, MetadataAccess.SERVICE); }