summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--redis/client.py5
-rw-r--r--tests/__init__.py4
-rw-r--r--tests/encoding.py35
-rw-r--r--tests/server_commands.py7
4 files changed, 46 insertions, 5 deletions
diff --git a/redis/client.py b/redis/client.py
index 9c5b501..ea1d76d 100644
--- a/redis/client.py
+++ b/redis/client.py
@@ -186,8 +186,8 @@ class StrictRedis(object):
def __init__(self, host='localhost', port=6379,
db=0, password=None, socket_timeout=None,
- connection_pool=None,
- charset='utf-8', errors='strict', unix_socket_path=None):
+ connection_pool=None, charset='utf-8',
+ errors='strict', unix_socket_path=None, **extra_kwargs):
if not connection_pool:
kwargs = {
'db': db,
@@ -207,6 +207,7 @@ class StrictRedis(object):
'host': host,
'port': port
})
+ kwargs.update(extra_kwargs)
connection_pool = ConnectionPool(**kwargs)
self.connection_pool = connection_pool
diff --git a/tests/__init__.py b/tests/__init__.py
index f7db7b1..56227ad 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -4,6 +4,7 @@ from connection_pool import ConnectionPoolTestCase
from pipeline import PipelineTestCase
from lock import LockTestCase
from pubsub import PubSubTestCase, PubSubRedisDownTestCase
+from encoding import PythonParserEncodingTestCase, HiredisEncodingTestCase
use_hiredis = False
try:
@@ -20,4 +21,7 @@ def all_tests():
suite.addTest(unittest.makeSuite(LockTestCase))
suite.addTest(unittest.makeSuite(PubSubTestCase))
suite.addTest(unittest.makeSuite(PubSubRedisDownTestCase))
+ suite.addTest(unittest.makeSuite(PythonParserEncodingTestCase))
+ if use_hiredis:
+ suite.addTest(unittest.makeSuite(HiredisEncodingTestCase))
return suite
diff --git a/tests/encoding.py b/tests/encoding.py
new file mode 100644
index 0000000..69c3fbc
--- /dev/null
+++ b/tests/encoding.py
@@ -0,0 +1,35 @@
+from __future__ import with_statement
+import redis
+from redis.connection import PythonParser, HiredisParser
+import unittest
+
+class EncodingTestCase(unittest.TestCase):
+ def setUp(self):
+ self.client = redis.Redis(host='localhost', port=6379, db=9,
+ charset='utf-8')
+ self.client.flushdb()
+
+ def tearDown(self):
+ self.client.flushdb()
+
+ def test_encoding(self):
+ unicode_string = unichr(3456) + u'abcd' + unichr(3421)
+ self.client.set('unicode-string', unicode_string)
+ cached_val = self.client.get('unicode-string')
+ self.assertEqual('unicode', type(cached_val).__name__,
+ 'Cache returned value with type "%s", expected "unicode"' \
+ % type(cached_val).__name__
+ )
+ self.assertEqual(unicode_string, cached_val)
+
+class PythonParserEncodingTestCase(EncodingTestCase):
+ def setUp(self):
+ self.client = redis.Redis(host='localhost', port=6379, db=9,
+ charset='utf-8', parser_class=PythonParser)
+ self.client.flushdb()
+
+class HiredisEncodingTestCase(EncodingTestCase):
+ def setUp(self):
+ self.client = redis.Redis(host='localhost', port=6379, db=9,
+ charset='utf-8', parser_class=HiredisParser)
+ self.client.flushdb() \ No newline at end of file
diff --git a/tests/server_commands.py b/tests/server_commands.py
index 680a0c7..7dc4fad 100644
--- a/tests/server_commands.py
+++ b/tests/server_commands.py
@@ -47,9 +47,10 @@ class ServerCommandsTestCase(unittest.TestCase):
self.assert_(self.client.set('unicode_string', unicode_string))
self.assertEquals(self.client.get('byte_string'), byte_string)
self.assertEquals(self.client.get('integer'), str(integer))
- self.assertEquals(
- self.client.get('unicode_string').decode('utf-8'),
- unicode_string)
+ cache_value = self.client.get('unicode_string')
+ if isinstance(cache_value, str):
+ cache_value = cache_value.decode('utf-8')
+ self.assertEquals(cache_value, unicode_string)
def test_getitem_and_setitem(self):
self.client['a'] = 'bar'