diff --git a/gson/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java b/gson/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java index 2da7aae8c..4b29b9bd1 100644 --- a/gson/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java +++ b/gson/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java @@ -26,6 +26,7 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.Collections; +import java.util.ConcurrentModificationException; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; @@ -219,4 +220,34 @@ public final class LinkedTreeMapTest { Map deserialized = (Map) objIn.readObject(); assertThat(deserialized).isEqualTo(Collections.singletonMap("a", 1)); } + + @Test + public void testClearInvalidatesExistingIterator() { + LinkedTreeMap map = new LinkedTreeMap<>(); + map.put("key1", "value1"); + map.put("key2", "value2"); + map.put("key3", "value3"); + + Iterator> iterator = map.entrySet().iterator(); + assertThat(iterator.hasNext()).isTrue(); + + map.clear(); + + assertThrows(ConcurrentModificationException.class, iterator::next); + } + + @Test + public void testClearInvalidatesExistingKeySetIterator() { + LinkedTreeMap map = new LinkedTreeMap<>(); + map.put("key1", "value1"); + map.put("key2", "value2"); + map.put("key3", "value3"); + + Iterator iterator = map.keySet().iterator(); + assertThat(iterator.hasNext()).isTrue(); + + map.clear(); + + assertThrows(ConcurrentModificationException.class, iterator::next); + } }