diff --git a/src/main/java/com/fiftyonred/mock_jedis/MockJedis.java b/src/main/java/com/fiftyonred/mock_jedis/MockJedis.java index 98022f0..794f970 100644 --- a/src/main/java/com/fiftyonred/mock_jedis/MockJedis.java +++ b/src/main/java/com/fiftyonred/mock_jedis/MockJedis.java @@ -805,7 +805,7 @@ public String substr(String key, int start, int end) { @Override public Long rpush(String key, String... strings) { - throw new UnsupportedOperationException(NOT_IMPLEMENTED); + return pipeline.rpush(key, strings).get(); } @Override @@ -830,7 +830,7 @@ public Long lrem(String key, long count, String value) { @Override public String rpop(String key) { - throw new UnsupportedOperationException(NOT_IMPLEMENTED); + return pipeline.rpop(key).get(); } @Override @@ -1515,7 +1515,7 @@ public Double hincrByFloat(byte[] key, byte[] field, double value) { @Override public Long rpush(byte[] key, byte[]... strings) { - throw new UnsupportedOperationException(NOT_IMPLEMENTED); + return pipeline.rpush(key, strings).get(); } @Override @@ -1540,7 +1540,7 @@ public Long lrem(byte[] key, long count, byte[] value) { @Override public byte[] rpop(byte[] key) { - throw new UnsupportedOperationException(NOT_IMPLEMENTED); + return pipeline.rpop(key).get(); } @Override diff --git a/src/main/java/com/fiftyonred/mock_jedis/MockPipeline.java b/src/main/java/com/fiftyonred/mock_jedis/MockPipeline.java index d7588e2..29cfd4c 100644 --- a/src/main/java/com/fiftyonred/mock_jedis/MockPipeline.java +++ b/src/main/java/com/fiftyonred/mock_jedis/MockPipeline.java @@ -929,6 +929,36 @@ public Response lpop(final byte[] key) { return response; } + @Override + public Response rpush(final String key, final String... string) { + final Response response = new Response(BuilderFactory.LONG); + response.set((long) mockStorage.rpush(DataContainer.from(key), DataContainer.from(string))); + return response; + } + + @Override + public Response rpush(final byte[] key, final byte[]... string) { + final Response response = new Response(BuilderFactory.LONG); + response.set((long) mockStorage.rpush(DataContainer.from(key), DataContainer.from(string))); + return response; + } + + @Override + public Response rpop(final String key) { + final Response response = new Response(BuilderFactory.STRING); + final DataContainer result = mockStorage.rpop(DataContainer.from(key)); + response.set(result == null ? null : result.getBytes()); + return response; + } + + @Override + public Response rpop(final byte[] key) { + final Response response = new Response(BuilderFactory.BYTE_ARRAY); + final DataContainer result = mockStorage.rpop(DataContainer.from(key)); + response.set(result == null ? null : result.getBytes()); + return response; + } + @Override public Response llen(final String key) { final Response response = new Response(BuilderFactory.LONG); diff --git a/src/main/java/com/fiftyonred/mock_jedis/MockStorage.java b/src/main/java/com/fiftyonred/mock_jedis/MockStorage.java index e3d5ad4..28e94fd 100644 --- a/src/main/java/com/fiftyonred/mock_jedis/MockStorage.java +++ b/src/main/java/com/fiftyonred/mock_jedis/MockStorage.java @@ -560,6 +560,21 @@ public synchronized DataContainer lpop(final DataContainer key) { return list == null || list.isEmpty() ? null : list.remove(list.size() - 1); } + public synchronized int rpush(final DataContainer key, final DataContainer... string) { + List list = getListFromStorage(key, true); + if (list == null) { + list = new ArrayList(); + listStorage.put(key, list); + } + for (DataContainer d: string) list.add(0, d); + return list.size(); + } + + public synchronized DataContainer rpop(final DataContainer key) { + final List list = getListFromStorage(key, true); + return list == null || list.isEmpty() ? null : list.remove(0); + } + public synchronized int llen(final DataContainer key) { final List list = getListFromStorage(key, false); return list == null ? 0 : list.size(); @@ -567,6 +582,10 @@ public synchronized int llen(final DataContainer key) { public synchronized List lrange(final DataContainer key, long start, long end) { final List full = getListFromStorage(key, false); + + if (full == null) { + return Collections.emptyList(); + } final List result = new ArrayList(); diff --git a/src/test/java/com/fiftyonred/mock_jedis/MockJedisTest.java b/src/test/java/com/fiftyonred/mock_jedis/MockJedisTest.java index 74ecb24..3aacc09 100644 --- a/src/test/java/com/fiftyonred/mock_jedis/MockJedisTest.java +++ b/src/test/java/com/fiftyonred/mock_jedis/MockJedisTest.java @@ -106,10 +106,34 @@ public void testList() { assertEquals("a", j.lpop("test")); assertEquals(Long.valueOf(0), j.llen("test")); + + j.rpush("test", "a"); + j.rpush("test", "b", "c"); + + assertEquals(Long.valueOf(3), j.llen("test")); + + assertEquals("c", j.rpop("test")); + assertEquals("b", j.rpop("test")); + assertEquals("a", j.rpop("test")); + + assertEquals(Long.valueOf(0), j.llen("test")); + + j.rpush("test", "a"); + j.rpush("test", "b", "c"); + + assertEquals(Long.valueOf(3), j.llen("test")); + + assertEquals("a", j.lpop("test")); + assertEquals("b", j.lpop("test")); + assertEquals("c", j.lpop("test")); + + assertEquals(Long.valueOf(0), j.llen("test")); } @Test public void testLRange() { + assertEquals(0, j.lrange("missingkey", 0, 100).size()); + j.lpush("test", "a"); j.lpush("test", "b"); j.lpush("test", "c");