From 17f6ee63dc95ddd6d9f17fbacd220212a50a4c07 Mon Sep 17 00:00:00 2001 From: Daniel Josefsson Date: Fri, 8 Nov 2013 22:25:37 +0000 Subject: [PATCH 1/3] 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))); + } } From 4fb85d0d609500fe45b0a064286e2777393b0418 Mon Sep 17 00:00:00 2001 From: Daniel Josefsson Date: Fri, 8 Nov 2013 22:54:27 +0000 Subject: [PATCH 2/3] Fixed the ordering of arguments in assertions for a couple of older tests. --- .../tests/commands/ScriptingCommandsTest.java | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) 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 354bd4f..b634b2c 100644 --- a/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java +++ b/src/test/java/redis/clients/jedis/tests/commands/ScriptingCommandsTest.java @@ -151,26 +151,26 @@ 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"); - } + @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("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"); - } + @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("key1", results.get(0)); + assertEquals("key2", results.get(1)); + assertEquals("1", results.get(2)); + assertEquals("2", results.get(3)); + } private CombinableMatcher> listWithItem(T expected) { return both(CoreMatchers.>instanceOf(List.class)).and(hasItem(equalTo(expected))); From f81f75177c4387eb9d2265f84bce91ad156e1550 Mon Sep 17 00:00:00 2001 From: Daniel Josefsson Date: Sat, 8 Feb 2014 10:10:45 +0000 Subject: [PATCH 3/3] Simplified unit test for compatibility with JDK6. --- .../jedis/tests/commands/ScriptingCommandsTest.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) 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 8752311..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,9 +1,8 @@ package redis.clients.jedis.tests.commands; import org.hamcrest.CoreMatchers; -import org.hamcrest.core.CombinableMatcher; +import org.hamcrest.Matcher; import org.junit.Test; - import redis.clients.jedis.BinaryJedis; import redis.clients.jedis.exceptions.JedisDataException; import redis.clients.util.SafeEncoder; @@ -11,9 +10,7 @@ import redis.clients.util.SafeEncoder; import java.util.ArrayList; import java.util.List; -import static org.hamcrest.CoreMatchers.both; import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.hasItem; public class ScriptingCommandsTest extends JedisCommandTestBase { @@ -204,7 +201,7 @@ public class ScriptingCommandsTest extends JedisCommandTestBase { assertEquals("2", results.get(3)); } - private CombinableMatcher> listWithItem(T expected) { - return both(CoreMatchers.>instanceOf(List.class)).and(hasItem(equalTo(expected))); + private Matcher> listWithItem(T expected) { + return CoreMatchers.hasItem(equalTo(expected)); } }