This is an automated email from the ASF dual-hosted git repository. kinow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-collections.git
commit ffd2a02d8559428e6f80a54a77b3b8d76b7762fb Author: Clemens Kurz <clemensb.k...@gmail.com> AuthorDate: Thu Sep 23 14:27:24 2021 +0200 [COLLECTIONS-796] SetUniqueList.createSetBasedOnList doesn't add list elements to return value - Request in Comment: https://issues.apache.org/jira/browse/COLLECTIONS-796?focusedCommentId=17419058&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-17419058 - Adressed typo in method name. - Method is public therefore it must be backwards compatible. - The method 'umodifiableListIterator' was not removed but annotated with @Deprecated and calls the actual method 'unmodifiableListIterator'. - Test was simplified, with appropriate assert-method-call --- .../apache/commons/collections4/IteratorUtils.java | 2 +- .../iterators/UnmodifiableListIterator.java | 10 +++- .../commons/collections4/list/SetUniqueList.java | 1 + .../collections4/list/UnmodifiableList.java | 4 +- .../apache/commons/collections4/map/LinkedMap.java | 4 +- .../iterators/UnmodifiableListIteratorTest.java | 18 +++---- .../collections4/list/SetUniqueListTest.java | 57 ++++++++++++++-------- 7 files changed, 59 insertions(+), 37 deletions(-) diff --git a/src/main/java/org/apache/commons/collections4/IteratorUtils.java b/src/main/java/org/apache/commons/collections4/IteratorUtils.java index b520572..7e30f42 100644 --- a/src/main/java/org/apache/commons/collections4/IteratorUtils.java +++ b/src/main/java/org/apache/commons/collections4/IteratorUtils.java @@ -469,7 +469,7 @@ public class IteratorUtils { * @return an immutable version of the iterator */ public static <E> ListIterator<E> unmodifiableListIterator(final ListIterator<E> listIterator) { - return UnmodifiableListIterator.umodifiableListIterator(listIterator); + return UnmodifiableListIterator.unmodifiableListIterator(listIterator); } /** diff --git a/src/main/java/org/apache/commons/collections4/iterators/UnmodifiableListIterator.java b/src/main/java/org/apache/commons/collections4/iterators/UnmodifiableListIterator.java index d626974..fede666 100644 --- a/src/main/java/org/apache/commons/collections4/iterators/UnmodifiableListIterator.java +++ b/src/main/java/org/apache/commons/collections4/iterators/UnmodifiableListIterator.java @@ -43,7 +43,7 @@ public final class UnmodifiableListIterator<E> implements ListIterator<E>, Unmod * @return a new unmodifiable list iterator * @throws NullPointerException if the iterator is null */ - public static <E> ListIterator<E> umodifiableListIterator(final ListIterator<? extends E> iterator) { + public static <E> ListIterator<E> unmodifiableListIterator(final ListIterator<? extends E> iterator) { Objects.requireNonNull(iterator, "iterator"); if (iterator instanceof Unmodifiable) { @SuppressWarnings("unchecked") // safe to upcast @@ -54,6 +54,14 @@ public final class UnmodifiableListIterator<E> implements ListIterator<E>, Unmod } /** + * @deprecated method name has typo in it. Use {@link org.apache.commons.collections4.iterators.UnmodifiableListIterator#unmodifiableListIterator(ListIterator)} instead. + */ + @Deprecated + public static <E> ListIterator<E> umodifiableListIterator(final ListIterator<? extends E> iterator) { + return unmodifiableListIterator(iterator); + } + + /** * Constructor. * * @param iterator the iterator to decorate diff --git a/src/main/java/org/apache/commons/collections4/list/SetUniqueList.java b/src/main/java/org/apache/commons/collections4/list/SetUniqueList.java index 529077e..c3ba144 100644 --- a/src/main/java/org/apache/commons/collections4/list/SetUniqueList.java +++ b/src/main/java/org/apache/commons/collections4/list/SetUniqueList.java @@ -352,6 +352,7 @@ public class SetUniqueList<E> extends AbstractSerializableListDecorator<E> { subSet = new HashSet<>(); } } + subSet.addAll(list); return subSet; } diff --git a/src/main/java/org/apache/commons/collections4/list/UnmodifiableList.java b/src/main/java/org/apache/commons/collections4/list/UnmodifiableList.java index c69089c..fc9738b 100644 --- a/src/main/java/org/apache/commons/collections4/list/UnmodifiableList.java +++ b/src/main/java/org/apache/commons/collections4/list/UnmodifiableList.java @@ -118,12 +118,12 @@ public final class UnmodifiableList<E> @Override public ListIterator<E> listIterator() { - return UnmodifiableListIterator.umodifiableListIterator(decorated().listIterator()); + return UnmodifiableListIterator.unmodifiableListIterator(decorated().listIterator()); } @Override public ListIterator<E> listIterator(final int index) { - return UnmodifiableListIterator.umodifiableListIterator(decorated().listIterator(index)); + return UnmodifiableListIterator.unmodifiableListIterator(decorated().listIterator(index)); } @Override diff --git a/src/main/java/org/apache/commons/collections4/map/LinkedMap.java b/src/main/java/org/apache/commons/collections4/map/LinkedMap.java index b4ef763..57cc382 100644 --- a/src/main/java/org/apache/commons/collections4/map/LinkedMap.java +++ b/src/main/java/org/apache/commons/collections4/map/LinkedMap.java @@ -307,12 +307,12 @@ public class LinkedMap<K, V> extends AbstractLinkedMap<K, V> implements Serializ @Override public ListIterator<K> listIterator() { - return UnmodifiableListIterator.umodifiableListIterator(super.listIterator()); + return UnmodifiableListIterator.unmodifiableListIterator(super.listIterator()); } @Override public ListIterator<K> listIterator(final int fromIndex) { - return UnmodifiableListIterator.umodifiableListIterator(super.listIterator(fromIndex)); + return UnmodifiableListIterator.unmodifiableListIterator(super.listIterator(fromIndex)); } @Override diff --git a/src/test/java/org/apache/commons/collections4/iterators/UnmodifiableListIteratorTest.java b/src/test/java/org/apache/commons/collections4/iterators/UnmodifiableListIteratorTest.java index f70e2b3..41a5797 100644 --- a/src/test/java/org/apache/commons/collections4/iterators/UnmodifiableListIteratorTest.java +++ b/src/test/java/org/apache/commons/collections4/iterators/UnmodifiableListIteratorTest.java @@ -24,13 +24,14 @@ import java.util.ListIterator; import org.apache.commons.collections4.Unmodifiable; +import static org.junit.jupiter.api.Assertions.assertThrows; + /** * Tests the UnmodifiableListIterator. - * */ public class UnmodifiableListIteratorTest<E> extends AbstractListIteratorTest<E> { - protected String[] testArray = { "One", "Two", "Three" }; + protected String[] testArray = {"One", "Two", "Three"}; protected List<E> testList; public UnmodifiableListIteratorTest(final String testName) { @@ -49,12 +50,12 @@ public class UnmodifiableListIteratorTest<E> extends AbstractListIteratorTest<E> @Override public ListIterator<E> makeEmptyIterator() { - return UnmodifiableListIterator.umodifiableListIterator(Collections.<E>emptyList().listIterator()); + return UnmodifiableListIterator.unmodifiableListIterator(Collections.<E>emptyList().listIterator()); } @Override public ListIterator<E> makeObject() { - return UnmodifiableListIterator.umodifiableListIterator(testList.listIterator()); + return UnmodifiableListIterator.unmodifiableListIterator(testList.listIterator()); } @Override @@ -78,15 +79,12 @@ public class UnmodifiableListIteratorTest<E> extends AbstractListIteratorTest<E> public void testDecorateFactory() { ListIterator<E> it = makeObject(); - assertSame(it, UnmodifiableListIterator.umodifiableListIterator(it)); + assertSame(it, UnmodifiableListIterator.unmodifiableListIterator(it)); it = testList.listIterator(); - assertTrue(it != UnmodifiableListIterator.umodifiableListIterator(it)); + assertNotSame(it, UnmodifiableListIterator.unmodifiableListIterator(it)); - try { - UnmodifiableListIterator.umodifiableListIterator(null); - fail(); - } catch (final NullPointerException ex) {} + assertThrows(NullPointerException.class, () -> UnmodifiableListIterator.unmodifiableListIterator(null)); } } diff --git a/src/test/java/org/apache/commons/collections4/list/SetUniqueListTest.java b/src/test/java/org/apache/commons/collections4/list/SetUniqueListTest.java index c0da5b4..1b792cd 100644 --- a/src/test/java/org/apache/commons/collections4/list/SetUniqueListTest.java +++ b/src/test/java/org/apache/commons/collections4/list/SetUniqueListTest.java @@ -16,14 +16,13 @@ */ package org.apache.commons.collections4.list; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.ListIterator; -import java.util.Set; +import org.apache.commons.collections4.set.UnmodifiableSet; +import org.junit.Assert; +import org.junit.jupiter.api.Assertions; + +import java.util.*; + +import static org.junit.jupiter.api.Assertions.assertThrows; /** * JUnit tests. @@ -194,7 +193,7 @@ public class SetUniqueListTest<E> extends AbstractListTest<E> { // repeat the test with a different class than HashSet; // which means subclassing SetUniqueList below list = new ArrayList<>(); - uniqueList = new SetUniqueList307(list, new java.util.TreeSet<E>()); + uniqueList = new SetUniqueList307(list, new TreeSet<E>()); uniqueList.add((E) hello); uniqueList.add((E) world); @@ -558,12 +557,8 @@ public class SetUniqueListTest<E> extends AbstractListTest<E> { public void testSubListIsUnmodifiable() { resetFull(); final List<E> subList = getCollection().subList(1, 3); - try { - subList.remove(0); - fail("subList should be unmodifiable"); - } catch (final UnsupportedOperationException e) { - // expected - } + assertEquals(2, subList.size()); + assertThrows(UnsupportedOperationException.class, () -> subList.remove(0)); } @SuppressWarnings("unchecked") @@ -616,11 +611,31 @@ public class SetUniqueListTest<E> extends AbstractListTest<E> { } } -// public void testCreate() throws Exception { -// resetEmpty(); -// writeExternalFormToDisk((java.io.Serializable) getCollection(), "src/test/resources/data/test/SetUniqueList.emptyCollection.version4.obj"); -// resetFull(); -// writeExternalFormToDisk((java.io.Serializable) getCollection(), "src/test/resources/data/test/SetUniqueList.fullCollection.version4.obj"); -// } + @SuppressWarnings("unchecked") + public void testCreateSetBasedOnList() { + final List<String> list = new ArrayList<>(); + list.add("One"); + list.add("Two"); + @SuppressWarnings("rawtypes") final SetUniqueList setUniqueList = (SetUniqueList) makeObject(); + + // Standard case with HashSet + final Set<String> setBasedOnList = setUniqueList.createSetBasedOnList(new HashSet<>(), list); + assertEquals(list.size(), setBasedOnList.size()); + list.forEach(item -> assertTrue(setBasedOnList.contains(item))); + + // Use different Set than HashSet + final Set<String> setBasedOnList1 = setUniqueList.createSetBasedOnList(new TreeSet<>(), list); + assertEquals(list.size(), setBasedOnList1.size()); + list.forEach(item -> assertTrue(setBasedOnList1.contains(item))); + + // throws internally NoSuchMethodException --> results in HashSet + final Set<String> setBasedOnList2 = setUniqueList.createSetBasedOnList(UnmodifiableSet.unmodifiableSet(new HashSet<>()), list); + assertEquals(list.size(), setBasedOnList2.size()); + list.forEach(item -> assertTrue(setBasedOnList2.contains(item))); + + // provide null values as Parameter + assertThrows(NullPointerException.class, () -> setUniqueList.createSetBasedOnList(null, list)); + assertThrows(NullPointerException.class, () -> setUniqueList.createSetBasedOnList(new HashSet<>(), null)); + } }