Avoid triggering the refleak detector

This commit is contained in:
Nick Coghlan 2013-11-16 00:35:34 +10:00
parent 4b9b936429
commit 4e553e2e52
1 changed files with 14 additions and 8 deletions

View File

@ -2386,6 +2386,15 @@ class TransformCodecTest(unittest.TestCase):
# currently *only* want this to happen for relatively stateless
# exceptions, where the only significant information they contain is their
# type and a single str argument.
# Use a local codec registry to avoid appearing to leak objects when
# registering multiple seach functions
_TEST_CODECS = {}
def _get_test_codec(codec_name):
return _TEST_CODECS.get(codec_name)
codecs.register(_get_test_codec) # Returns None, not usable as a decorator
class ExceptionChainingTest(unittest.TestCase):
def setUp(self):
@ -2395,19 +2404,16 @@ class ExceptionChainingTest(unittest.TestCase):
# The codecs module normalizes codec names, although this doesn't
# appear to be formally documented...
self.codec_name = repr(self).lower().replace(" ", "-")
self.codec_info = None
codecs.register(self.get_codec)
def get_codec(self, codec_name):
if codec_name != self.codec_name:
return None
return self.codec_info
def tearDown(self):
_TEST_CODECS.pop(self.codec_name, None)
def set_codec(self, obj_to_raise):
def raise_obj(*args, **kwds):
raise obj_to_raise
self.codec_info = codecs.CodecInfo(raise_obj, raise_obj,
codec_info = codecs.CodecInfo(raise_obj, raise_obj,
name=self.codec_name)
_TEST_CODECS[self.codec_name] = codec_info
@contextlib.contextmanager
def assertWrapped(self, operation, exc_type, msg):