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))); + } }