Add refcount check.

This commit is contained in:
INADA Naoki 2014-02-13 09:55:17 +09:00
parent 38cf835c95
commit 0cab6092e4
2 changed files with 29 additions and 20 deletions

View file

@ -1,6 +1,7 @@
from io import BytesIO from io import BytesIO
import sys
from msgpack import Unpacker, packb, OutOfData from msgpack import Unpacker, packb, OutOfData
from pytest import raises from pytest import raises, mark
def test_unpack_array_header_from_file(): def test_unpack_array_header_from_file():
@ -15,5 +16,32 @@ def test_unpack_array_header_from_file():
unpacker.unpack() 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__': if __name__ == '__main__':
test_unpack_array_header_from_file() test_unpack_array_header_from_file()
test_unpacker_hook_refcnt()

View file

@ -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()