+ several improvements/bugfixes applied to RedisList

+ more redis list tests
This commit is contained in:
Costin Leau
2010-11-11 14:39:22 +02:00
parent a0f0b2ac87
commit 547b0f202d
4 changed files with 26 additions and 16 deletions

View File

@@ -16,6 +16,7 @@
package org.springframework.datastore.redis.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
@@ -37,14 +38,14 @@ abstract class CollectionUtils {
return result;
}
@SuppressWarnings("unchecked")
static <E> Collection<E> reverse(Collection<? extends E> c) {
List<E> reverse = new ArrayList<E>(c.size());
Object[] reverse = new Object[c.size()];
int index = c.size();
for (E e : c) {
reverse.add(--index, e);
reverse[--index] = e;
}
return reverse;
return (List<E>) Arrays.asList(reverse);
}
}

View File

@@ -140,6 +140,9 @@ public class DefaultRedisList<E> extends AbstractRedisCollection<E> implements R
@Override
public E get(int index) {
if (index < 0 || index > size()) {
throw new IndexOutOfBoundsException();
}
return serializer.deserialize(commands.lIndex(key, index));
}
@@ -201,13 +204,15 @@ public class DefaultRedisList<E> extends AbstractRedisCollection<E> implements R
@Override
public E peek() {
return serializer.deserialize(commands.lIndex(key, 0));
String element = commands.lIndex(key, 0);
return (element == null ? null : (E) serializer.deserialize(element));
}
@Override
public E poll() {
return serializer.deserialize(commands.lPop(key));
String element = commands.lPop(key);
return (element == null ? null : (E) serializer.deserialize(element));
}

View File

@@ -63,12 +63,12 @@ public abstract class AbstractRedisListTest<T> extends AbstractRedisCollectionTe
list.add(t1);
list.add(t2);
assertEquals(t1, list.get(2));
assertEquals(t2, list.get(1));
list.add(2, t3);
assertEquals(t3, list.get(2));
}
@Test(expected = UnsupportedOperationException.class)
@Test(expected = IllegalArgumentException.class)
public void testAddIndexObjectMiddle() {
T t1 = getT();
T t2 = getT();
@@ -95,7 +95,9 @@ public abstract class AbstractRedisListTest<T> extends AbstractRedisCollectionTe
assertEquals(t1, list.get(0));
list.addAll(0, asList);
// verify insertion order
assertEquals(t3, list.get(0));
assertEquals(t4, list.get(1));
}
@Test
@@ -112,10 +114,13 @@ public abstract class AbstractRedisListTest<T> extends AbstractRedisCollectionTe
assertEquals(t1, list.get(0));
assertTrue(list.addAll(2, asList));
assertEquals(t4, list.get(0));
// verify insertion order
assertEquals(t3, list.get(2));
assertEquals(t4, list.get(3));
}
@Test(expected = UnsupportedOperationException.class)
@Test(expected = IllegalArgumentException.class)
public void addAllIndexCollectionMiddle() {
T t1 = getT();
T t2 = getT();
@@ -131,7 +136,7 @@ public abstract class AbstractRedisListTest<T> extends AbstractRedisCollectionTe
assertTrue(list.addAll(1, asList));
}
@Test
@Test(expected = UnsupportedOperationException.class)
public void testIndexOfObject() {
T t1 = getT();
T t2 = getT();
@@ -149,9 +154,8 @@ public abstract class AbstractRedisListTest<T> extends AbstractRedisCollectionTe
public void testOffer() {
T t1 = getT();
assertFalse(list.offer(t1));
list.add(t1);
assertTrue(list.offer(t1));
assertTrue(list.contains(t1));
}
@Test
@@ -224,10 +228,10 @@ public abstract class AbstractRedisListTest<T> extends AbstractRedisCollectionTe
list.add(t2);
assertEquals(2, list.range(0, -1).size());
assertEquals(t1, list.range(0, 0).get(0));
assertEquals(t2, list.range(1, 0).get(0));
assertEquals(t2, list.range(1, 1).get(0));
}
@Test
@Test(expected = UnsupportedOperationException.class)
public void testRemoveIndex() {
T t1 = getT();
T t2 = getT();

View File

@@ -25,7 +25,7 @@ import org.springframework.datastore.redis.connection.jedis.JedisConnectionFacto
*
* @author Costin Leau
*/
public class StringRedisListTest extends AbstractRedisCollectionTest<String> {
public class StringRedisListTest extends AbstractRedisListTest<String> {
private JedisConnectionFactory factory;