From 17f6ee63dc95ddd6d9f17fbacd220212a50a4c07 Mon Sep 17 00:00:00 2001 From: Daniel Josefsson Date: Fri, 8 Nov 2013 22:25:37 +0000 Subject: [PATCH] Added support for nested lists, and longs in lists. --- src/main/java/redis/clients/jedis/Jedis.java | 11 ++++---- .../tests/commands/ScriptingCommandsTest.java | 27 +++++++++++++++---- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/main/java/redis/clients/jedis/Jedis.java b/src/main/java/redis/clients/jedis/Jedis.java index 6d0c986..082b197 100644 --- a/src/main/java/redis/clients/jedis/Jedis.java +++ b/src/main/java/redis/clients/jedis/Jedis.java @@ -2783,17 +2783,18 @@ public class Jedis extends BinaryJedis implements JedisCommands, MultiKeyCommand } private Object getEvalResult() { - Object result = client.getOne(); - + return evalResult(client.getOne()); + } + + private Object evalResult(Object result) { if (result instanceof byte[]) return SafeEncoder.encode((byte[]) result); if (result instanceof List) { List list = (List) result; - List listResult = new ArrayList(list.size()); + List listResult = new ArrayList(list.size()); for (Object bin : list) { - listResult.add((bin == null ? null : SafeEncoder - .encode((byte[]) bin))); + listResult.add(evalResult(bin)); } return listResult; diff --git a/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java index 90677ee..354bd4f 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java @@ -1,12 +1,17 @@ package redis.clients.jedis.tests.commands; +import org.hamcrest.CoreMatchers; +import org.hamcrest.core.CombinableMatcher; +import org.junit.Test; +import redis.clients.jedis.exceptions.JedisDataException; +import redis.clients.util.SafeEncoder; + import java.util.ArrayList; import java.util.List; -import org.junit.Test; - -import redis.clients.jedis.exceptions.JedisDataException; -import redis.clients.util.SafeEncoder; +import static org.hamcrest.CoreMatchers.both; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.hasItem; public class ScriptingCommandsTest extends JedisCommandTestBase { @@ -57,6 +62,15 @@ public class ScriptingCommandsTest extends JedisCommandTestBase { assertEquals(new Long(2), response); } + @Test + public void evalNestedLists() { + String script = "return { {KEYS[1]} , {2} }"; + List results = (List) jedis.eval(script, 1, "key1"); + + assertThat((List) results.get(0), listWithItem("key1")); + assertThat((List) results.get(1), listWithItem(2L)); + } + @Test public void evalNoArgs() { String script = "return KEYS[1]"; @@ -156,7 +170,10 @@ public class ScriptingCommandsTest extends JedisCommandTestBase { assertEquals(results.get(1), "key2"); assertEquals(results.get(2), "1"); assertEquals(results.get(3), "2"); - } + + private CombinableMatcher> listWithItem(T expected) { + return both(CoreMatchers.>instanceOf(List.class)).and(hasItem(equalTo(expected))); + } }