Fixed #29363 -- Added SimpleTestCase.assertWarnsMessage().

This commit is contained in:
Morgan Aubert 2018-04-27 17:18:15 -04:00 committed by Tim Graham
parent 7ba040de77
commit 704443acac
21 changed files with 210 additions and 285 deletions

View file

@ -23,107 +23,94 @@ class RenameMethodsTests(SimpleTestCase):
Ensure a warning is raised upon class definition to suggest renaming
the faulty method.
"""
with warnings.catch_warnings(record=True) as recorded:
warnings.simplefilter('always')
msg = '`Manager.old` method should be renamed `new`.'
with self.assertWarnsMessage(DeprecationWarning, msg):
class Manager(metaclass=RenameManagerMethods):
def old(self):
pass
self.assertEqual(len(recorded), 1)
msg = str(recorded[0].message)
self.assertEqual(msg, '`Manager.old` method should be renamed `new`.')
def test_get_new_defined(self):
"""
Ensure `old` complains and not `new` when only `new` is defined.
"""
with warnings.catch_warnings(record=True) as recorded:
warnings.simplefilter('ignore')
class Manager(metaclass=RenameManagerMethods):
def new(self):
pass
manager = Manager()
class Manager(metaclass=RenameManagerMethods):
def new(self):
pass
with warnings.catch_warnings(record=True) as recorded:
warnings.simplefilter('always')
manager = Manager()
manager.new()
self.assertEqual(len(recorded), 0)
self.assertEqual(len(recorded), 0)
msg = '`Manager.old` is deprecated, use `new` instead.'
with self.assertWarnsMessage(DeprecationWarning, msg):
manager.old()
self.assertEqual(len(recorded), 1)
msg = str(recorded.pop().message)
self.assertEqual(msg, '`Manager.old` is deprecated, use `new` instead.')
def test_get_old_defined(self):
"""
Ensure `old` complains when only `old` is defined.
"""
with warnings.catch_warnings(record=True) as recorded:
warnings.simplefilter('ignore')
class Manager(metaclass=RenameManagerMethods):
def old(self):
pass
manager = Manager()
class Manager(metaclass=RenameManagerMethods):
def old(self):
pass
with warnings.catch_warnings(record=True) as recorded:
warnings.simplefilter('always')
manager = Manager()
manager.new()
self.assertEqual(len(recorded), 0)
self.assertEqual(len(recorded), 0)
msg = '`Manager.old` is deprecated, use `new` instead.'
with self.assertWarnsMessage(DeprecationWarning, msg):
manager.old()
self.assertEqual(len(recorded), 1)
msg = str(recorded.pop().message)
self.assertEqual(msg, '`Manager.old` is deprecated, use `new` instead.')
def test_deprecated_subclass_renamed(self):
"""
Ensure the correct warnings are raised when a class that didn't rename
`old` subclass one that did.
"""
with warnings.catch_warnings(record=True) as recorded:
warnings.simplefilter('ignore')
class Renamed(metaclass=RenameManagerMethods):
def new(self):
pass
class Renamed(metaclass=RenameManagerMethods):
def new(self):
pass
class Deprecated(Renamed):
def old(self):
super().old()
class Deprecated(Renamed):
def old(self):
super().old()
warnings.simplefilter('always')
deprecated = Deprecated()
deprecated = Deprecated()
msg = '`Renamed.old` is deprecated, use `new` instead.'
with self.assertWarnsMessage(DeprecationWarning, msg):
deprecated.new()
self.assertEqual(len(recorded), 1)
msg = str(recorded.pop().message)
self.assertEqual(msg, '`Renamed.old` is deprecated, use `new` instead.')
recorded[:] = []
msg = '`Deprecated.old` is deprecated, use `new` instead.'
with self.assertWarnsMessage(DeprecationWarning, msg):
deprecated.old()
self.assertEqual(len(recorded), 2)
msgs = [str(warning.message) for warning in recorded]
self.assertEqual(msgs, [
'`Deprecated.old` is deprecated, use `new` instead.',
'`Renamed.old` is deprecated, use `new` instead.',
])
def test_renamed_subclass_deprecated(self):
"""
Ensure the correct warnings are raised when a class that renamed
`old` subclass one that didn't.
"""
class Deprecated(metaclass=RenameManagerMethods):
def old(self):
pass
class Renamed(Deprecated):
def new(self):
super().new()
renamed = Renamed()
with warnings.catch_warnings(record=True) as recorded:
warnings.simplefilter('ignore')
class Deprecated(metaclass=RenameManagerMethods):
def old(self):
pass
class Renamed(Deprecated):
def new(self):
super().new()
warnings.simplefilter('always')
renamed = Renamed()
renamed.new()
self.assertEqual(len(recorded), 0)
self.assertEqual(len(recorded), 0)
msg = '`Renamed.old` is deprecated, use `new` instead.'
with self.assertWarnsMessage(DeprecationWarning, msg):
renamed.old()
self.assertEqual(len(recorded), 1)
msg = str(recorded.pop().message)
self.assertEqual(msg, '`Renamed.old` is deprecated, use `new` instead.')
def test_deprecated_subclass_renamed_and_mixins(self):
"""
@ -131,36 +118,30 @@ class RenameMethodsTests(SimpleTestCase):
class that renamed `old` and mixins that may or may not have renamed
`new`.
"""
with warnings.catch_warnings(record=True) as recorded:
warnings.simplefilter('ignore')
class Renamed(metaclass=RenameManagerMethods):
def new(self):
pass
class RenamedMixin:
def new(self):
super().new()
class DeprecatedMixin:
def old(self):
super().old()
class Deprecated(DeprecatedMixin, RenamedMixin, Renamed):
class Renamed(metaclass=RenameManagerMethods):
def new(self):
pass
warnings.simplefilter('always')
deprecated = Deprecated()
class RenamedMixin:
def new(self):
super().new()
class DeprecatedMixin:
def old(self):
super().old()
class Deprecated(DeprecatedMixin, RenamedMixin, Renamed):
pass
deprecated = Deprecated()
msg = '`RenamedMixin.old` is deprecated, use `new` instead.'
with self.assertWarnsMessage(DeprecationWarning, msg):
deprecated.new()
self.assertEqual(len(recorded), 1)
msg = str(recorded.pop().message)
self.assertEqual(msg, '`RenamedMixin.old` is deprecated, use `new` instead.')
msg = '`DeprecatedMixin.old` is deprecated, use `new` instead.'
with self.assertWarnsMessage(DeprecationWarning, msg):
deprecated.old()
self.assertEqual(len(recorded), 2)
msgs = [str(warning.message) for warning in recorded]
self.assertEqual(msgs, [
'`DeprecatedMixin.old` is deprecated, use `new` instead.',
'`RenamedMixin.old` is deprecated, use `new` instead.',
])
class DeprecationInstanceCheckTest(SimpleTestCase):
@ -170,7 +151,5 @@ class DeprecationInstanceCheckTest(SimpleTestCase):
deprecation_warning = RemovedInNextVersionWarning
msg = '`Manager` is deprecated, use `fake.path.Foo` instead.'
with warnings.catch_warnings():
warnings.simplefilter('error', category=RemovedInNextVersionWarning)
with self.assertRaisesMessage(RemovedInNextVersionWarning, msg):
isinstance(object, Manager)
with self.assertWarnsMessage(RemovedInNextVersionWarning, msg):
isinstance(object, Manager)