This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-collections.git

commit a685fae36f64ed9701f1a478bd1fa1822ddcdf2d
Author: Gary Gregory <[email protected]>
AuthorDate: Thu Oct 3 09:34:52 2024 -0400

    Complete AbstractMapTest.testMapComputeIfPresent() implementation
---
 .../commons/collections4/map/AbstractMapTest.java  | 67 ++++++++++++----------
 1 file changed, 37 insertions(+), 30 deletions(-)

diff --git 
a/src/test/java/org/apache/commons/collections4/map/AbstractMapTest.java 
b/src/test/java/org/apache/commons/collections4/map/AbstractMapTest.java
index d3398ecba..f8aac17c8 100644
--- a/src/test/java/org/apache/commons/collections4/map/AbstractMapTest.java
+++ b/src/test/java/org/apache/commons/collections4/map/AbstractMapTest.java
@@ -53,7 +53,7 @@ import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
 
 /**
- * Abstract test class for {@link java.util.Map} methods and contracts.
+ * Tests {@link java.util.Map}.
  * <p>
  * The forces at work here are similar to those in {@link 
AbstractCollectionTest}. If your class implements the full Map interface, 
including optional
  * operations, simply extend this class, and implement the {@link 
#makeObject()} method.
@@ -1625,38 +1625,45 @@ public abstract class AbstractMapTest<M extends Map<K, 
V>, K, V> extends Abstrac
             // compute if present is a put.
             resetEmpty();
             getMap().computeIfPresent(keys[0], (k, v) -> values[0]);
-            resetFull();
-            int i = 0;
-            for (final Iterator<K> it = getMap().keySet().iterator(); 
it.hasNext() && i < newValues.length; i++) {
-                final K key = it.next();
-                final V newValue = newValues[i];
-                final boolean newValueAlready = 
getMap().containsValue(newValue);
-                final V prevValue = getMap().get(key);
-                final V oldValue = getMap().putIfAbsent(key, newValue);
-                final V value = getConfirmed().putIfAbsent(key, newValue);
-                verify();
-                assertEquals(value, oldValue, "Map.putIfAbsent should return 
previous value when changed");
-                assertEquals(prevValue, oldValue, "Map.putIfAbsent should 
return previous value when changed");
-                if (prevValue == null) {
-                    assertEquals(newValue, getMap().get(key), 
String.format("[%,d] key '%s', prevValue '%s', newValue '%s'", i, key, 
prevValue, newValue));
-                } else {
-                    assertEquals(oldValue, getMap().get(key), 
String.format("[%,d] key '%s', prevValue '%s', newValue '%s'", i, key, 
prevValue, newValue));
-                }
-                assertTrue(getMap().containsKey(key), "Map should still 
contain key after putIfAbsent when changed");
-                if (newValueAlready && newValue != null) {
-                    // TODO The test fixture already contain a null value, so 
we condition this assertion
-                    assertFalse(getMap().containsValue(newValue),
-                            String.format("[%,d] Map at '%s' shouldn't contain 
new value '%s' after putIfAbsent when changed", i, key, newValue));
-                }
-                // if duplicates are allowed, we're not guaranteed that the 
value
-                // no longer exists, so don't try checking that.
-                if (!isAllowDuplicateValues()) {
-                    assertFalse(getMap().containsValue(values[i]), "Map should 
not contain old value after putIfAbsent when changed");
+            if (isPutAddSupported()) {
+                resetFull();
+                int i = 0;
+                for (final Iterator<K> it = getMap().keySet().iterator(); 
it.hasNext() && i < newValues.length; i++) {
+                    final K key = it.next();
+                    final V newValue = newValues[i];
+                    final boolean newValueAlready = 
getMap().containsValue(newValue);
+                    final V prevValue = getMap().get(key);
+                    final V oldValue = getMap().computeIfPresent(key, (k, v) 
-> newValue);
+                    final V value = getConfirmed().computeIfPresent(key, (k, 
v) -> newValue);
+                    verify();
+                    assertEquals(value, oldValue, "Map.putIfAbsent should 
return previous value when changed");
+                    assertEquals(prevValue, oldValue, "Map.putIfAbsent should 
return previous value when changed");
+                    if (prevValue == null) {
+                        assertEquals(newValue, getMap().get(key), 
String.format("[%,d] key '%s', prevValue '%s', newValue '%s'", i, key, 
prevValue, newValue));
+                    } else {
+                        assertEquals(oldValue, getMap().get(key), 
String.format("[%,d] key '%s', prevValue '%s', newValue '%s'", i, key, 
prevValue, newValue));
+                    }
+                    assertTrue(getMap().containsKey(key), "Map should still 
contain key after putIfAbsent when changed");
+                    if (newValueAlready && newValue != null) {
+                        // TODO The test fixture already contain a null value, 
so we condition this assertion
+                        assertFalse(getMap().containsValue(newValue),
+                                String.format("[%,d] Map at '%s' shouldn't 
contain new value '%s' after putIfAbsent when changed", i, key, newValue));
+                    }
+                    // if duplicates are allowed, we're not guaranteed that 
the value
+                    // no longer exists, so don't try checking that.
+                    if (!isAllowDuplicateValues()) {
+                        assertFalse(getMap().containsValue(values[i]), "Map 
should not contain old value after putIfAbsent when changed");
+                    }
                 }
             }
         } else {
-            assertThrows(UnsupportedOperationException.class, () -> 
getMap().putIfAbsent(keys[0], values[0]),
-                    "Expected UnsupportedOperationException on put (add)");
+            if (getMap().containsKey(keys[0])) {
+                assertThrows(UnsupportedOperationException.class, () -> 
getMap().computeIfPresent(keys[0], (k, v) -> values[0]),
+                        "Expected UnsupportedOperationException on put (add)");
+            } else {
+                // doesn't throw
+                getMap().computeIfPresent(keys[0], (k, v) -> values[0]);
+            }
         }
     }
 

Reply via email to