From 547b0f202ddc9673cb4bc84a592e88d996c9c1e8 Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Thu, 11 Nov 2010 14:39:22 +0200 Subject: [PATCH] + several improvements/bugfixes applied to RedisList + more redis list tests --- .../datastore/redis/util/CollectionUtils.java | 9 ++++---- .../redis/util/DefaultRedisList.java | 9 ++++++-- .../redis/util/AbstractRedisListTest.java | 22 +++++++++++-------- .../redis/util/StringRedisListTest.java | 2 +- 4 files changed, 26 insertions(+), 16 deletions(-) diff --git a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/util/CollectionUtils.java b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/util/CollectionUtils.java index 322628dcc..84a77c5d8 100644 --- a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/util/CollectionUtils.java +++ b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/util/CollectionUtils.java @@ -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 Collection reverse(Collection c) { - List reverse = new ArrayList(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) Arrays.asList(reverse); } } diff --git a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/util/DefaultRedisList.java b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/util/DefaultRedisList.java index c6a220cca..44ffa8a71 100644 --- a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/util/DefaultRedisList.java +++ b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/util/DefaultRedisList.java @@ -140,6 +140,9 @@ public class DefaultRedisList extends AbstractRedisCollection 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 extends AbstractRedisCollection 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)); } diff --git a/spring-datastore-redis/src/test/java/org/springframework/datastore/redis/util/AbstractRedisListTest.java b/spring-datastore-redis/src/test/java/org/springframework/datastore/redis/util/AbstractRedisListTest.java index fce611b6e..395d5d198 100644 --- a/spring-datastore-redis/src/test/java/org/springframework/datastore/redis/util/AbstractRedisListTest.java +++ b/spring-datastore-redis/src/test/java/org/springframework/datastore/redis/util/AbstractRedisListTest.java @@ -63,12 +63,12 @@ public abstract class AbstractRedisListTest 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 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 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 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 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 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(); diff --git a/spring-datastore-redis/src/test/java/org/springframework/datastore/redis/util/StringRedisListTest.java b/spring-datastore-redis/src/test/java/org/springframework/datastore/redis/util/StringRedisListTest.java index c2858f9e1..a75468bcf 100644 --- a/spring-datastore-redis/src/test/java/org/springframework/datastore/redis/util/StringRedisListTest.java +++ b/spring-datastore-redis/src/test/java/org/springframework/datastore/redis/util/StringRedisListTest.java @@ -25,7 +25,7 @@ import org.springframework.datastore.redis.connection.jedis.JedisConnectionFacto * * @author Costin Leau */ -public class StringRedisListTest extends AbstractRedisCollectionTest { +public class StringRedisListTest extends AbstractRedisListTest { private JedisConnectionFactory factory;