### Question:
MultiValuePropertyList extends MultiValuePropertyCollection<E> implements List<E> { @Override public E remove(int index) { Value oldValue = getValuesList().remove(index); synchProperty(); return asElement(oldValue); } 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 testRemove() { metadata.commit(() -> { List<String> list = getList("prop1"); boolean result = list.remove("x"); assertThat(result).isFalse(); result |= list.remove("a"); result |= list.remove("c"); assertThat(result).isTrue(); }, MetadataAccess.SERVICE); metadata.read(() -> { List<String> list = getList("prop1"); assertThat(list).contains("b"); }, MetadataAccess.SERVICE); }
@Test public void testRemoveIdx() { metadata.commit(() -> { List<String> list = getList("prop1"); String oldElem = list.remove(1); assertThat(oldElem).isEqualTo("b"); }, MetadataAccess.SERVICE); metadata.read(() -> { List<String> list = getList("prop1"); assertThat(list).contains("a", "c"); }, MetadataAccess.SERVICE); }