kitchen/kitchen3/tests/test_deprecation_py3.py

65 lines
2.8 KiB
Python

# -*- coding: utf-8 -*-
from nose import tools
import sys
import warnings
import importlib
from kitchen.pycompat25.collections import defaultdict
class TestPendingDeprecationModules(object):
def __init__(self):
kitchen_path = 'kitchen'
collections_path = 'kitchen/collections'
pycompat24_path = 'kitchen/pycompat24'
pycompat25_path = 'kitchen/pycompat25'
pycompat27_path = 'kitchen/pycompat27'
self.module_data = (
('strictdict', 'kitchen.collections.strictdict', collections_path),
('pycompat24', 'kitchen.pycompat24', kitchen_path),
('base64', 'kitchen.pycompat24.base64', pycompat24_path),
('sets', 'kitchen.pycompat24.sets', pycompat24_path),
('subprocess', 'kitchen.pycompat24.subprocess', pycompat24_path),
('pycompat25', 'kitchen.pycompat25', kitchen_path),
('collections', 'kitchen.pycompat25.collections', pycompat25_path),
('pycompat27', 'kitchen.pycompat27', kitchen_path),
('subprocess', 'kitchen.pycompat27.subprocess', pycompat27_path),
)
def setUp(self):
for module in sys.modules.values():
if hasattr(module, '__warningregistry__'):
del module.__warningregistry__
def check_modules(self, module_name, module_fqn, module_path):
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter('always')
# imp.load_module will load even if it has already been loaded.
# We need to ensure that happens in order to trigger the
# deprecation warnings
importlib.find_loader(module_fqn, module_path).load_module()
warning_raised = False
for warning in (e.message for e in w):
if isinstance(warning, PendingDeprecationWarning) and \
('%s is deprecated' % module_name) in warning.args[0]:
warning_raised = True
break
tools.assert_true(warning_raised, msg='%s did not raise a PendingDeprecationWarning' % module_fqn)
def test_modules(self):
for mod in self.module_data:
yield self.check_modules, mod[0], mod[1], mod[2]
def test_defaultdict(self):
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter('always')
defaultdict()
warning_raised = False
for warning in (e.message for e in w):
if isinstance(warning, PendingDeprecationWarning) and \
('defaultdict is deprecated') in warning.args[0]:
warning_raised = True
break
tools.assert_true(warning_raised, msg='kitchen.pycompat25.collections.defaultdict did not raise a PendingDeprecationWarning')