Skip to content

Commit

Permalink
pythongh-71339: Improve error report for types in assertHasAttr() and…
Browse files Browse the repository at this point in the history
… assertNotHasAttr()
  • Loading branch information
serhiy-storchaka committed Jan 14, 2025
1 parent 06cad77 commit 876b832
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 4 deletions.
20 changes: 18 additions & 2 deletions Lib/test/test_unittest/test_case.py
Original file line number Diff line number Diff line change
Expand Up @@ -795,7 +795,15 @@ def testAssertHasAttr(self):
with self.assertRaises(self.failureException) as cm:
self.assertHasAttr(a, 'y')
self.assertEqual(str(cm.exception),
"List instance has no attribute 'y'")
"'List' object has no attribute 'y'")
with self.assertRaises(self.failureException) as cm:
self.assertHasAttr(List, 'spam')
self.assertEqual(str(cm.exception),
"type object 'List' has no attribute 'spam'")
with self.assertRaises(self.failureException) as cm:
self.assertHasAttr(sys, 'spam')
self.assertEqual(str(cm.exception),
"module 'sys' has no attribute 'spam'")

with self.assertRaises(self.failureException) as cm:
self.assertHasAttr(a, 'y', 'ababahalamaha')
Expand All @@ -811,7 +819,15 @@ def testAssertNotHasAttr(self):
with self.assertRaises(self.failureException) as cm:
self.assertNotHasAttr(a, 'x')
self.assertEqual(str(cm.exception),
"List instance has unexpected attribute 'x'")
"'List' object has unexpected attribute 'x'")
with self.assertRaises(self.failureException) as cm:
self.assertNotHasAttr(List, 'append')
self.assertEqual(str(cm.exception),
"type object 'List' has unexpected attribute 'append'")
with self.assertRaises(self.failureException) as cm:
self.assertNotHasAttr(sys, 'modules')
self.assertEqual(str(cm.exception),
"module 'sys' has unexpected attribute 'modules'")

with self.assertRaises(self.failureException) as cm:
self.assertNotHasAttr(a, 'x', 'ababahalamaha')
Expand Down
8 changes: 6 additions & 2 deletions Lib/unittest/case.py
Original file line number Diff line number Diff line change
Expand Up @@ -1372,16 +1372,20 @@ def assertHasAttr(self, obj, name, msg=None):
if not hasattr(obj, name):
if isinstance(obj, types.ModuleType):
standardMsg = f'module {obj.__name__!r} has no attribute {name!r}'
elif isinstance(obj, type):
standardMsg = f'type object {obj.__name__!r} has no attribute {name!r}'
else:
standardMsg = f'{type(obj).__name__} instance has no attribute {name!r}'
standardMsg = f'{type(obj).__name__!r} object has no attribute {name!r}'
self.fail(self._formatMessage(msg, standardMsg))

def assertNotHasAttr(self, obj, name, msg=None):
if hasattr(obj, name):
if isinstance(obj, types.ModuleType):
standardMsg = f'module {obj.__name__!r} has unexpected attribute {name!r}'
elif isinstance(obj, type):
standardMsg = f'type object {obj.__name__!r} has unexpected attribute {name!r}'
else:
standardMsg = f'{type(obj).__name__} instance has unexpected attribute {name!r}'
standardMsg = f'{type(obj).__name__!r} object has unexpected attribute {name!r}'
self.fail(self._formatMessage(msg, standardMsg))

def assertRaisesRegex(self, expected_exception, expected_regex,
Expand Down

0 comments on commit 876b832

Please sign in to comment.