Loading core/java/android/util/MapCollections.java +35 −2 Original line number Diff line number Diff line Loading @@ -355,7 +355,12 @@ abstract class MapCollections<K, V> { } return result; } }; @Override public String toString() { return toStringHelper(0, this, "KeySet"); } } final class ValuesCollection implements Collection<V> { Loading Loading @@ -456,7 +461,12 @@ abstract class MapCollections<K, V> { public <T> T[] toArray(T[] array) { return toArrayHelper(array, 1); } }; @Override public String toString() { return toStringHelper(1, this, "ValuesCollection"); } } public static <K, V> boolean containsAllHelper(Map<K, V> map, Collection<?> collection) { Iterator<?> it = collection.iterator(); Loading Loading @@ -513,6 +523,29 @@ abstract class MapCollections<K, V> { return array; } private String toStringHelper(int offset, Object thing, String thingName) { int size = colGetSize(); if (size == 0) { return "[]"; } StringBuilder buffer = new StringBuilder(size * 14); buffer.append('['); for (int i = 0; i < size; i++) { if (i > 0) { buffer.append(", "); } Object entry = colGetEntry(i, offset); if (entry != thing) { buffer.append(entry); } else { buffer.append("(this ").append(thingName).append(")"); } } buffer.append(']'); return buffer.toString(); } public static <T> boolean equalsSetHelper(Set<T> set, Object object) { if (set == object) { return true; Loading core/tests/coretests/src/android/util/ArrayMapTest.java +51 −0 Original line number Diff line number Diff line Loading @@ -14,14 +14,18 @@ package android.util; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.fail; import android.platform.test.annotations.IgnoreUnderRavenwood; import android.platform.test.annotations.Presubmit; import android.platform.test.ravenwood.RavenwoodRule; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.LargeTest; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; Loading @@ -32,6 +36,7 @@ import java.util.ConcurrentModificationException; * Unit tests for ArrayMap that don't belong in CTS. */ @LargeTest @Presubmit @RunWith(AndroidJUnit4.class) public class ArrayMapTest { private static final String TAG = "ArrayMapTest"; Loading @@ -51,6 +56,7 @@ public class ArrayMapTest { * @throws Exception */ @Test @Ignore("Failing; b/399137661") @IgnoreUnderRavenwood(reason = "Long test runtime") public void testConcurrentModificationException() throws Exception { final int TEST_LEN_MS = 5000; Loading Loading @@ -118,4 +124,49 @@ public class ArrayMapTest { } } } @Test public void testToString() { map.put("1", "One"); map.put("2", "Two"); map.put("3", "Five"); map.put("3", "Three"); assertThat(map.toString()).isEqualTo("{1=One, 2=Two, 3=Three}"); assertThat(map.keySet().toString()).isEqualTo("[1, 2, 3]"); assertThat(map.values().toString()).isEqualTo("[One, Two, Three]"); } @Test public void testToStringRecursive() { ArrayMap<Object, Object> weird = new ArrayMap<>(); weird.put("1", weird); assertThat(weird.toString()).isEqualTo("{1=(this Map)}"); assertThat(weird.keySet().toString()).isEqualTo("[1]"); assertThat(weird.values().toString()).isEqualTo("[{1=(this Map)}]"); } @Test public void testToStringRecursiveKeySet() { ArrayMap<Object, Object> weird = new ArrayMap<>(); weird.put("1", weird.keySet()); weird.put(weird.keySet(), "2"); assertThat(weird.toString()).isEqualTo("{1=[1, (this KeySet)], [1, (this KeySet)]=2}"); assertThat(weird.keySet().toString()).isEqualTo("[1, (this KeySet)]"); assertThat(weird.values().toString()).isEqualTo("[[1, (this KeySet)], 2]"); } @Test public void testToStringRecursiveValues() { ArrayMap<Object, Object> weird = new ArrayMap<>(); weird.put("1", weird.values()); weird.put(weird.values(), "2"); assertThat(weird.toString()).isEqualTo( "{1=[(this ValuesCollection), 2], [(this ValuesCollection), 2]=2}"); assertThat(weird.keySet().toString()).isEqualTo("[1, [(this ValuesCollection), 2]]"); assertThat(weird.values().toString()).isEqualTo("[(this ValuesCollection), 2]"); } } Loading
core/java/android/util/MapCollections.java +35 −2 Original line number Diff line number Diff line Loading @@ -355,7 +355,12 @@ abstract class MapCollections<K, V> { } return result; } }; @Override public String toString() { return toStringHelper(0, this, "KeySet"); } } final class ValuesCollection implements Collection<V> { Loading Loading @@ -456,7 +461,12 @@ abstract class MapCollections<K, V> { public <T> T[] toArray(T[] array) { return toArrayHelper(array, 1); } }; @Override public String toString() { return toStringHelper(1, this, "ValuesCollection"); } } public static <K, V> boolean containsAllHelper(Map<K, V> map, Collection<?> collection) { Iterator<?> it = collection.iterator(); Loading Loading @@ -513,6 +523,29 @@ abstract class MapCollections<K, V> { return array; } private String toStringHelper(int offset, Object thing, String thingName) { int size = colGetSize(); if (size == 0) { return "[]"; } StringBuilder buffer = new StringBuilder(size * 14); buffer.append('['); for (int i = 0; i < size; i++) { if (i > 0) { buffer.append(", "); } Object entry = colGetEntry(i, offset); if (entry != thing) { buffer.append(entry); } else { buffer.append("(this ").append(thingName).append(")"); } } buffer.append(']'); return buffer.toString(); } public static <T> boolean equalsSetHelper(Set<T> set, Object object) { if (set == object) { return true; Loading
core/tests/coretests/src/android/util/ArrayMapTest.java +51 −0 Original line number Diff line number Diff line Loading @@ -14,14 +14,18 @@ package android.util; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.fail; import android.platform.test.annotations.IgnoreUnderRavenwood; import android.platform.test.annotations.Presubmit; import android.platform.test.ravenwood.RavenwoodRule; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.LargeTest; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; Loading @@ -32,6 +36,7 @@ import java.util.ConcurrentModificationException; * Unit tests for ArrayMap that don't belong in CTS. */ @LargeTest @Presubmit @RunWith(AndroidJUnit4.class) public class ArrayMapTest { private static final String TAG = "ArrayMapTest"; Loading @@ -51,6 +56,7 @@ public class ArrayMapTest { * @throws Exception */ @Test @Ignore("Failing; b/399137661") @IgnoreUnderRavenwood(reason = "Long test runtime") public void testConcurrentModificationException() throws Exception { final int TEST_LEN_MS = 5000; Loading Loading @@ -118,4 +124,49 @@ public class ArrayMapTest { } } } @Test public void testToString() { map.put("1", "One"); map.put("2", "Two"); map.put("3", "Five"); map.put("3", "Three"); assertThat(map.toString()).isEqualTo("{1=One, 2=Two, 3=Three}"); assertThat(map.keySet().toString()).isEqualTo("[1, 2, 3]"); assertThat(map.values().toString()).isEqualTo("[One, Two, Three]"); } @Test public void testToStringRecursive() { ArrayMap<Object, Object> weird = new ArrayMap<>(); weird.put("1", weird); assertThat(weird.toString()).isEqualTo("{1=(this Map)}"); assertThat(weird.keySet().toString()).isEqualTo("[1]"); assertThat(weird.values().toString()).isEqualTo("[{1=(this Map)}]"); } @Test public void testToStringRecursiveKeySet() { ArrayMap<Object, Object> weird = new ArrayMap<>(); weird.put("1", weird.keySet()); weird.put(weird.keySet(), "2"); assertThat(weird.toString()).isEqualTo("{1=[1, (this KeySet)], [1, (this KeySet)]=2}"); assertThat(weird.keySet().toString()).isEqualTo("[1, (this KeySet)]"); assertThat(weird.values().toString()).isEqualTo("[[1, (this KeySet)], 2]"); } @Test public void testToStringRecursiveValues() { ArrayMap<Object, Object> weird = new ArrayMap<>(); weird.put("1", weird.values()); weird.put(weird.values(), "2"); assertThat(weird.toString()).isEqualTo( "{1=[(this ValuesCollection), 2], [(this ValuesCollection), 2]=2}"); assertThat(weird.keySet().toString()).isEqualTo("[1, [(this ValuesCollection), 2]]"); assertThat(weird.values().toString()).isEqualTo("[(this ValuesCollection), 2]"); } }