blob: 5e50ddeeffb569d8a5f06d56b62df232a8a5e299 [file] [log] [blame]
/*
* Copyright 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.collection;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.junit.Test;
import java.util.AbstractMap;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
public class ArrayMapCompatTest {
@Test
public void testCanNotIteratePastEnd_entrySetIterator() {
Map<String, String> map = new ArrayMap<>();
map.put("key 1", "value 1");
map.put("key 2", "value 2");
Set<Map.Entry<String, String>> expectedEntriesToIterate = new HashSet<>(Arrays.asList(
entryOf("key 1", "value 1"),
entryOf("key 2", "value 2")
));
Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
// Assert iteration over the expected two entries in any order
assertTrue(iterator.hasNext());
Map.Entry<String, String> firstEntry = copyOf(iterator.next());
assertTrue(expectedEntriesToIterate.remove(firstEntry));
assertTrue(iterator.hasNext());
Map.Entry<String, String> secondEntry = copyOf(iterator.next());
assertTrue(expectedEntriesToIterate.remove(secondEntry));
assertFalse(iterator.hasNext());
try {
iterator.next();
fail();
} catch (NoSuchElementException expected) {
}
}
private static <K, V> Map.Entry<K, V> entryOf(K key, V value) {
return new AbstractMap.SimpleEntry<>(key, value);
}
private static <K, V> Map.Entry<K, V> copyOf(Map.Entry<K, V> entry) {
return entryOf(entry.getKey(), entry.getValue());
}
@Test
public void testCanNotIteratePastEnd_keySetIterator() {
Map<String, String> map = new ArrayMap<>();
map.put("key 1", "value 1");
map.put("key 2", "value 2");
Set<String> expectedKeysToIterate = new HashSet<>(Arrays.asList("key 1", "key 2"));
Iterator<String> iterator = map.keySet().iterator();
// Assert iteration over the expected two keys in any order
assertTrue(iterator.hasNext());
String firstKey = iterator.next();
assertTrue(expectedKeysToIterate.remove(firstKey));
assertTrue(iterator.hasNext());
String secondKey = iterator.next();
assertTrue(expectedKeysToIterate.remove(secondKey));
assertFalse(iterator.hasNext());
try {
iterator.next();
fail();
} catch (NoSuchElementException expected) {
}
}
@Test
public void testCanNotIteratePastEnd_valuesIterator() {
Map<String, String> map = new ArrayMap<>();
map.put("key 1", "value 1");
map.put("key 2", "value 2");
Set<String> expectedValuesToIterate = new HashSet<>(Arrays.asList("value 1", "value 2"));
Iterator<String> iterator = map.values().iterator();
// Assert iteration over the expected two values in any order
assertTrue(iterator.hasNext());
String firstValue = iterator.next();
assertTrue(expectedValuesToIterate.remove(firstValue));
assertTrue(iterator.hasNext());
String secondValue = iterator.next();
assertTrue(expectedValuesToIterate.remove(secondValue));
assertFalse(iterator.hasNext());
try {
iterator.next();
fail();
} catch (NoSuchElementException expected) {
}
}
}