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 cbc5db55408dae5d8744307a5eb379df36d55427
Author: Stefano Cordio <stefano.cor...@gmail.com>
AuthorDate: Tue Sep 7 23:21:41 2021 +0200

    [COLLECTIONS-799]: Prevent modifications by pollFirst and pollLast
---
 pom.xml                                            |  3 ++
 .../collections4/set/UnmodifiableNavigableSet.java | 16 ++++++
 .../set/UnmodifiableNavigableSetTest.java          | 60 +++++++---------------
 3 files changed, 37 insertions(+), 42 deletions(-)

diff --git a/pom.xml b/pom.xml
index 02272cd..ad4348e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -455,6 +455,9 @@
     <contributor>
       <name>Chen Guoping</name>
     </contributor>
+    <contributor>
+      <name>Stefano Cordio</name>
+    </contributor>
   </contributors>
 
   <dependencies>
diff --git 
a/src/main/java/org/apache/commons/collections4/set/UnmodifiableNavigableSet.java
 
b/src/main/java/org/apache/commons/collections4/set/UnmodifiableNavigableSet.java
index 48bfe39..fcdc5b6 100644
--- 
a/src/main/java/org/apache/commons/collections4/set/UnmodifiableNavigableSet.java
+++ 
b/src/main/java/org/apache/commons/collections4/set/UnmodifiableNavigableSet.java
@@ -107,6 +107,22 @@ public final class UnmodifiableNavigableSet<E>
         throw new UnsupportedOperationException();
     }
 
+    /**
+     * @since 4.5
+     */
+    @Override
+    public E pollFirst() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * @since 4.5
+     */
+    @Override
+    public E pollLast() {
+        throw new UnsupportedOperationException();
+    }
+
     @Override
     public boolean retainAll(final Collection<?> coll) {
         throw new UnsupportedOperationException();
diff --git 
a/src/test/java/org/apache/commons/collections4/set/UnmodifiableNavigableSetTest.java
 
b/src/test/java/org/apache/commons/collections4/set/UnmodifiableNavigableSetTest.java
index d335994..51e3792 100644
--- 
a/src/test/java/org/apache/commons/collections4/set/UnmodifiableNavigableSetTest.java
+++ 
b/src/test/java/org/apache/commons/collections4/set/UnmodifiableNavigableSetTest.java
@@ -27,6 +27,8 @@ import junit.framework.Test;
 
 import org.apache.commons.collections4.BulkTest;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 /**
  * Extension of {@link AbstractNavigableSetTest} for exercising the
  * {@link UnmodifiableNavigableSet} implementation.
@@ -48,7 +50,7 @@ public class UnmodifiableNavigableSetTest<E> extends 
AbstractNavigableSetTest<E>
     //-------------------------------------------------------------------
     @Override
     public NavigableSet<E> makeObject() {
-        return UnmodifiableNavigableSet.unmodifiableNavigableSet(new 
TreeSet<E>());
+        return UnmodifiableNavigableSet.unmodifiableNavigableSet(new 
TreeSet<>());
     }
 
     @Override
@@ -95,11 +97,7 @@ public class UnmodifiableNavigableSetTest<E> extends 
AbstractNavigableSetTest<E>
     public void testDecorateFactory() {
         final NavigableSet<E> set = makeFullCollection();
         assertSame(set, 
UnmodifiableNavigableSet.unmodifiableNavigableSet(set));
-
-        try {
-            UnmodifiableNavigableSet.unmodifiableNavigableSet(null);
-            fail();
-        } catch (final NullPointerException ex) {}
+        assertThrows(NullPointerException.class, () -> 
UnmodifiableNavigableSet.unmodifiableNavigableSet(null));
     }
 
     /**
@@ -107,48 +105,26 @@ public class UnmodifiableNavigableSetTest<E> extends 
AbstractNavigableSetTest<E>
      */
     @SuppressWarnings("unchecked")
     public void verifyUnmodifiable(final Set<E> set) {
-        try {
-            set.add((E) "value");
-            fail("Expecting UnsupportedOperationException.");
-        } catch (final UnsupportedOperationException e) {
-            // expected
-        }
-        try {
-            set.addAll(new TreeSet<E>());
-            fail("Expecting UnsupportedOperationException.");
-        } catch (final UnsupportedOperationException e) {
-            // expected
-        }
-        try {
-            set.clear();
-            fail("Expecting UnsupportedOperationException.");
-        } catch (final UnsupportedOperationException e) {
-            // expected
-        }
-        try {
-            set.remove("x");
-            fail("Expecting UnsupportedOperationException.");
-        } catch (final UnsupportedOperationException e) {
-            // expected
-        }
-        try {
-            set.removeAll(array);
-            fail("Expecting UnsupportedOperationException.");
-        } catch (final UnsupportedOperationException e) {
-            // expected
-        }
-        try {
-            set.retainAll(array);
-            fail("Expecting UnsupportedOperationException.");
-        } catch (final UnsupportedOperationException e) {
-            // expected
+        assertThrows(UnsupportedOperationException.class, () -> set.add((E) 
"value"));
+        assertThrows(UnsupportedOperationException.class, () -> set.addAll(new 
TreeSet<>()));
+        assertThrows(UnsupportedOperationException.class, () -> set.clear());
+        assertThrows(UnsupportedOperationException.class, () -> 
set.iterator().remove());
+        assertThrows(UnsupportedOperationException.class, () -> 
set.remove("x"));
+        assertThrows(UnsupportedOperationException.class, () -> 
set.removeAll(array));
+        assertThrows(UnsupportedOperationException.class, () -> 
set.removeIf(element -> true));
+        assertThrows(UnsupportedOperationException.class, () -> 
set.retainAll(array));
+
+        if (set instanceof NavigableSet) {
+            final NavigableSet<E> navigableSet = (NavigableSet<E>) set;
+            assertThrows(UnsupportedOperationException.class, () -> 
navigableSet.pollFirst());
+            assertThrows(UnsupportedOperationException.class, () -> 
navigableSet.pollLast());
         }
     }
 
     public void testComparator() {
         setupSet();
         final Comparator<? super E> c = set.comparator();
-        assertTrue("natural order, so comparator should be null", c == null);
+        assertNull("natural order, so comparator should be null", c);
     }
 
 

Reply via email to