diff --git a/src/main/java/redis/clients/jedis/Jedis.java b/src/main/java/redis/clients/jedis/Jedis.java index d5f7283..1b202ac 100644 --- a/src/main/java/redis/clients/jedis/Jedis.java +++ b/src/main/java/redis/clients/jedis/Jedis.java @@ -2797,17 +2797,18 @@ public class Jedis extends BinaryJedis implements JedisCommands, } 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 83b0d04..f40c8d3 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java @@ -1,13 +1,16 @@ package redis.clients.jedis.tests.commands; +import org.hamcrest.CoreMatchers; +import org.hamcrest.Matcher; +import org.junit.Test; +import redis.clients.jedis.BinaryJedis; +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.BinaryJedis; -import redis.clients.jedis.exceptions.JedisDataException; -import redis.clients.util.SafeEncoder; +import static org.hamcrest.CoreMatchers.equalTo; public class ScriptingCommandsTest extends JedisCommandTestBase { @@ -88,6 +91,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]"; @@ -171,24 +183,25 @@ public class ScriptingCommandsTest extends JedisCommandTestBase { @Test public void scriptEvalReturnNullValues() { String script = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}"; - List results = (List) jedis.eval(script, 2, "key1", - "key2", "1", "2"); - assertEquals(results.get(0), "key1"); - assertEquals(results.get(1), "key2"); - assertEquals(results.get(2), "1"); - assertEquals(results.get(3), "2"); + List results = (List) jedis.eval(script, 2, "key1", "key2", "1", "2"); + assertEquals("key1", results.get(0)); + assertEquals("key2", results.get(1)); + assertEquals("1", results.get(2)); + assertEquals("2", results.get(3)); } @Test public void scriptEvalShaReturnNullValues() { String script = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}"; String sha = jedis.scriptLoad(script); - List results = (List) jedis.evalsha(sha, 2, "key1", - "key2", "1", "2"); - assertEquals(results.get(0), "key1"); - assertEquals(results.get(1), "key2"); - assertEquals(results.get(2), "1"); - assertEquals(results.get(3), "2"); + List results = (List) jedis.evalsha(sha, 2, "key1", "key2", "1", "2"); + assertEquals("key1", results.get(0)); + assertEquals("key2", results.get(1)); + assertEquals("1", results.get(2)); + assertEquals("2", results.get(3)); + } + private Matcher> listWithItem(T expected) { + return CoreMatchers.hasItem(equalTo(expected)); } }