+ add missing entrySet implementation + integration tests

This commit is contained in:
Costin Leau
2010-11-30 12:42:10 +02:00
parent 6d35c3f1d9
commit 32bd95e030
2 changed files with 69 additions and 3 deletions

View File

@@ -16,6 +16,8 @@
package org.springframework.data.keyvalue.redis.util;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
@@ -31,6 +33,32 @@ public class DefaultRedisMap<K, V> implements RedisMap<K, V> {
private final BoundHashOperations<String, K, V> hashOps;
private class DefaultRedisMapEntry implements Map.Entry<K, V> {
private K key;
private V value;
public DefaultRedisMapEntry(K key, V value) {
this.key = key;
this.value = value;
}
@Override
public K getKey() {
return key;
}
@Override
public V getValue() {
return value;
}
@Override
public V setValue(V value) {
throw new UnsupportedOperationException();
}
}
/**
* Constructs a new <code>DefaultRedisMap</code> instance.
*
@@ -91,7 +119,18 @@ public class DefaultRedisMap<K, V> implements RedisMap<K, V> {
@Override
public Set<java.util.Map.Entry<K, V>> entrySet() {
throw new UnsupportedOperationException();
Set<K> keySet = keySet();
Collection<V> multiGet = hashOps.multiGet(keySet);
Iterator<K> keys = keySet.iterator();
Iterator<V> values = multiGet.iterator();
Set<Map.Entry<K, V>> entries = new LinkedHashSet<Entry<K, V>>();
while (keys.hasNext()) {
entries.add(new DefaultRedisMapEntry(keys.next(), values.next()));
}
return entries;
}
@Override

View File

@@ -19,6 +19,7 @@ import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import static org.junit.matchers.JUnitMatchers.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashMap;
@@ -344,8 +345,34 @@ public abstract class AbstractRedisMapTests<K, V> {
assertThat(values, hasItems(v1, v2, v3));
}
@Test(expected = UnsupportedOperationException.class)
@Test
public void testEntrySet() {
map.entrySet();
Set<Entry<K, V>> entries = map.entrySet();
assertTrue(entries.isEmpty());
K k1 = getKey();
K k2 = getKey();
V v1 = getValue();
V v2 = getValue();
map.put(k1, v1);
map.put(k2, v1);
entries = map.entrySet();
Set<K> keys = new LinkedHashSet<K>();
Collection<V> values = new ArrayList<V>();
for (Entry<K, V> entry : entries) {
keys.add(entry.getKey());
values.add(entry.getValue());
}
assertEquals(2, keys.size());
assertThat(keys, hasItems(k1, k2));
assertThat(values, hasItem(v1));
assertThat(values, not(hasItem(v2)));
}
}