From 8deb44e8579c0e5994291cb5b0e544d18e185dcb Mon Sep 17 00:00:00 2001 From: "Jeffrey(Xilang) Yan" Date: Mon, 25 Sep 2017 09:57:39 +0800 Subject: [PATCH 1/2] fix arraymap iterator remove issue --- .../com/google/api/client/util/ArrayMap.java | 2 + .../google/api/client/util/ArrayMapTest.java | 51 +++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/google-http-client/src/main/java/com/google/api/client/util/ArrayMap.java b/google-http-client/src/main/java/com/google/api/client/util/ArrayMap.java index 614c8aceb..d8f40e4f6 100644 --- a/google-http-client/src/main/java/com/google/api/client/util/ArrayMap.java +++ b/google-http-client/src/main/java/com/google/api/client/util/ArrayMap.java @@ -381,6 +381,7 @@ public Map.Entry next() { throw new NoSuchElementException(); } this.nextIndex++; + this.removed = false; return new Entry(index); } @@ -390,6 +391,7 @@ public void remove() { throw new IllegalArgumentException(); } ArrayMap.this.remove(index); + this.nextIndex--; this.removed = true; } } diff --git a/google-http-client/src/test/java/com/google/api/client/util/ArrayMapTest.java b/google-http-client/src/test/java/com/google/api/client/util/ArrayMapTest.java index fab7619e3..044559c39 100644 --- a/google-http-client/src/test/java/com/google/api/client/util/ArrayMapTest.java +++ b/google-http-client/src/test/java/com/google/api/client/util/ArrayMapTest.java @@ -16,6 +16,9 @@ import junit.framework.TestCase; +import java.util.Iterator; +import java.util.Map; + /** * Tests {@link ArrayMap}. * @@ -100,4 +103,52 @@ public void testSet() { } catch (IndexOutOfBoundsException e) { } } + + public void testIteratorRemove1() { + ArrayMap map = new ArrayMap(); + map.put("a", "a"); + map.put("b", "b"); + map.put("c", "c"); + Iterator> iter = map.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + if(!"all".equalsIgnoreCase(entry.getKey())){ + iter.remove(); + } + } + assertEquals(0, map.size()); + } + + public void testIteratorRemove2() { + ArrayMap map = new ArrayMap(); + map.put("a", "a"); + map.put("b", "b"); + map.put("c", "c"); + Iterator> iter = map.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + if("b".equalsIgnoreCase(entry.getKey())){ + iter.remove(); + } + } + assertEquals(2, map.size()); + assertEquals("a", map.get("a")); + assertEquals("c", map.get("c")); + } + + public void testIteratorRemove3() { + ArrayMap map = new ArrayMap(); + map.put("a", "a"); + map.put("b", "b"); + map.put("c", "c"); + Iterator> iter = map.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + if(!"b".equalsIgnoreCase(entry.getKey())){ + iter.remove(); + } + } + assertEquals(1, map.size()); + assertEquals("b", map.get("b")); + } } From 63e089713f755fec51bf6de317eb9ada1d87e525 Mon Sep 17 00:00:00 2001 From: "Jeffrey(Xilang) Yan" Date: Mon, 20 Nov 2017 09:42:50 +0800 Subject: [PATCH 2/2] fix code style --- .../google/api/client/util/ArrayMapTest.java | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/google-http-client/src/test/java/com/google/api/client/util/ArrayMapTest.java b/google-http-client/src/test/java/com/google/api/client/util/ArrayMapTest.java index 044559c39..12a345683 100644 --- a/google-http-client/src/test/java/com/google/api/client/util/ArrayMapTest.java +++ b/google-http-client/src/test/java/com/google/api/client/util/ArrayMapTest.java @@ -109,12 +109,12 @@ public void testIteratorRemove1() { map.put("a", "a"); map.put("b", "b"); map.put("c", "c"); - Iterator> iter = map.entrySet().iterator(); + Iterator> iter = map.entrySet().iterator(); while (iter.hasNext()) { - Map.Entry entry = iter.next(); - if(!"all".equalsIgnoreCase(entry.getKey())){ - iter.remove(); - } + Map.Entry entry = iter.next(); + if (!"all".equalsIgnoreCase(entry.getKey())) { + iter.remove(); + } } assertEquals(0, map.size()); } @@ -124,12 +124,12 @@ public void testIteratorRemove2() { map.put("a", "a"); map.put("b", "b"); map.put("c", "c"); - Iterator> iter = map.entrySet().iterator(); + Iterator> iter = map.entrySet().iterator(); while (iter.hasNext()) { - Map.Entry entry = iter.next(); - if("b".equalsIgnoreCase(entry.getKey())){ - iter.remove(); - } + Map.Entry entry = iter.next(); + if ("b".equalsIgnoreCase(entry.getKey())) { + iter.remove(); + } } assertEquals(2, map.size()); assertEquals("a", map.get("a")); @@ -141,12 +141,12 @@ public void testIteratorRemove3() { map.put("a", "a"); map.put("b", "b"); map.put("c", "c"); - Iterator> iter = map.entrySet().iterator(); + Iterator> iter = map.entrySet().iterator(); while (iter.hasNext()) { - Map.Entry entry = iter.next(); - if(!"b".equalsIgnoreCase(entry.getKey())){ - iter.remove(); - } + Map.Entry entry = iter.next(); + if (!"b".equalsIgnoreCase(entry.getKey())) { + iter.remove(); + } } assertEquals(1, map.size()); assertEquals("b", map.get("b"));