diff --git a/src/main/java/redis/clients/jedis/Jedis.java b/src/main/java/redis/clients/jedis/Jedis.java index 3fa89bb..7d38af0 100644 --- a/src/main/java/redis/clients/jedis/Jedis.java +++ b/src/main/java/redis/clients/jedis/Jedis.java @@ -1,10 +1,10 @@ package redis.clients.jedis; +import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Map.Entry; public class Jedis extends Client { public Jedis(String host) { @@ -160,16 +160,15 @@ public class Jedis extends Client { public String hmset(String key, Map hash) throws JedisException { - String[] params = new String[(hash.size() * 2) + 1]; - params[0] = key; - Iterator> iterator = hash.entrySet().iterator(); - int i = 1; - while (iterator.hasNext()) { - Entry entry = iterator.next(); - params[i++] = entry.getKey(); - params[i++] = entry.getValue(); + List params = new ArrayList(); + params.add(key); + + for (String field : hash.keySet()) { + params.add(field); + params.add(hash.get(field)); } - return sendCommand("HMSET", params).getStatusCodeReply(); + return sendCommand("HMSET", params.toArray(new String[params.size()])) + .getStatusCodeReply(); } public List hmget(String key, String... fields) @@ -216,4 +215,22 @@ public class Jedis extends Client { return hash; } + + public int rpush(String key, String string) throws JedisException { + return sendCommand("RPUSH", key, string).getIntegerReply(); + } + + public int lpush(String key, String string) throws JedisException { + return sendCommand("LPUSH", key, string).getIntegerReply(); + } + + public int llen(String key) throws JedisException { + return sendCommand("LLEN", key).getIntegerReply(); + } + + public List lrange(String key, int start, int end) + throws JedisException { + return sendCommand("LRANGE", key, String.valueOf(start), + String.valueOf(end)).getMultiBulkReply(); + } } diff --git a/src/test/java/redis/clients/jedis/tests/commands/ListCommandsTest.java b/src/test/java/redis/clients/jedis/tests/commands/ListCommandsTest.java new file mode 100644 index 0000000..b6f8fe9 --- /dev/null +++ b/src/test/java/redis/clients/jedis/tests/commands/ListCommandsTest.java @@ -0,0 +1,89 @@ +package redis.clients.jedis.tests.commands; + +import java.util.ArrayList; +import java.util.List; + +import junit.framework.Assert; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisException; + +public class ListCommandsTest extends Assert { + private Jedis jedis; + + @Before + public void setUp() throws Exception { + jedis = new Jedis("localhost"); + jedis.connect(); + } + + @After + public void tearDown() throws Exception { + jedis.flushDB(); + jedis.disconnect(); + } + + @Test + public void rpush() throws JedisException { + int size = jedis.rpush("foo", "bar"); + assertEquals(1, size); + size = jedis.rpush("foo", "foo"); + assertEquals(2, size); + } + + @Test + public void lpush() throws JedisException { + int size = jedis.lpush("foo", "bar"); + assertEquals(1, size); + size = jedis.lpush("foo", "foo"); + assertEquals(2, size); + } + + @Test + public void llen() throws JedisException { + assertEquals(0, jedis.llen("foo")); + jedis.lpush("foo", "bar"); + jedis.lpush("foo", "car"); + assertEquals(2, jedis.llen("foo")); + } + + @Test(expected = JedisException.class) + public void llenNotOnList() throws JedisException { + jedis.set("foo", "bar"); + jedis.llen("foo"); + } + + @Test + public void lrange() throws JedisException { + jedis.rpush("foo", "a"); + jedis.rpush("foo", "b"); + jedis.rpush("foo", "c"); + + List expected = new ArrayList(); + expected.add("a"); + expected.add("b"); + expected.add("c"); + + List range = jedis.lrange("foo", 0, 2); + assertEquals(expected, range); + + range = jedis.lrange("foo", 0, 20); + assertEquals(expected, range); + + expected = new ArrayList(); + expected.add("b"); + expected.add("c"); + + range = jedis.lrange("foo", 1, 2); + assertEquals(expected, range); + + expected = new ArrayList(); + range = jedis.lrange("foo", 2, 1); + assertEquals(expected, range); + } + +}