summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorINADA Naoki <inada-n@klab.com>2014-02-13 09:55:17 +0900
committerINADA Naoki <inada-n@klab.com>2014-02-13 09:55:17 +0900
commit0cab6092e456ffa04834233ffb01acb48d0869c3 (patch)
tree6d87f1148a6c29097346eee02b588609f7fc52f9
parent38cf835c95273dc20dd6cb3376c11a88b72c7fa9 (diff)
downloadmsgpack-python-0cab6092e456ffa04834233ffb01acb48d0869c3.tar.gz
Add refcount check.
-rw-r--r--test/test_unpack.py30
-rw-r--r--test/test_unpack_file.py19
2 files changed, 29 insertions, 20 deletions
diff --git a/test/test_unpack.py b/test/test_unpack.py
index 1563008..d6ca435 100644
--- a/test/test_unpack.py
+++ b/test/test_unpack.py
@@ -1,6 +1,7 @@
from io import BytesIO
+import sys
from msgpack import Unpacker, packb, OutOfData
-from pytest import raises
+from pytest import raises, mark
def test_unpack_array_header_from_file():
@@ -15,5 +16,32 @@ def test_unpack_array_header_from_file():
unpacker.unpack()
+@mark.skipif(not hasattr(sys, 'getrefcount'),
+ reason='sys.getrefcount() is needed to pass this test')
+def test_unpacker_hook_refcnt():
+ result = []
+
+ def hook(x):
+ result.append(x)
+ return x
+
+ basecnt = sys.getrefcount(hook)
+
+ up = Unpacker(object_pairs_hook=hook, list_hook=hook)
+
+ assert sys.getrefcount(hook) >= basecnt + 2
+
+ up.feed(packb([{}]))
+ up.feed(packb([{}]))
+ assert up.unpack() == [{}]
+ assert up.unpack() == [{}]
+ assert result == [[{}], [{}]]
+
+ del up
+
+ assert sys.getrefcount(hook) == basecnt
+
+
if __name__ == '__main__':
test_unpack_array_header_from_file()
+ test_unpacker_hook_refcnt()
diff --git a/test/test_unpack_file.py b/test/test_unpack_file.py
deleted file mode 100644
index 1563008..0000000
--- a/test/test_unpack_file.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from io import BytesIO
-from msgpack import Unpacker, packb, OutOfData
-from pytest import raises
-
-
-def test_unpack_array_header_from_file():
- f = BytesIO(packb([1,2,3,4]))
- unpacker = Unpacker(f)
- assert unpacker.read_array_header() == 4
- assert unpacker.unpack() == 1
- assert unpacker.unpack() == 2
- assert unpacker.unpack() == 3
- assert unpacker.unpack() == 4
- with raises(OutOfData):
- unpacker.unpack()
-
-
-if __name__ == '__main__':
- test_unpack_array_header_from_file()