Skip to content

Commit 4f22a16

Browse files
committed
Add tests
1 parent ac555bc commit 4f22a16

1 file changed

Lines changed: 33 additions & 0 deletions

File tree

Lib/test/test_exceptions.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from codecs import BOM_UTF8
1111
from itertools import product
1212
from textwrap import dedent
13+
from types import ModuleType
1314

1415
from test.support import (captured_stderr, check_impl_detail,
1516
cpython_only, gc_collect,
@@ -2047,6 +2048,38 @@ def blech(self):
20472048
self.assertEqual("bluch", exc.name)
20482049
self.assertEqual(obj, exc.obj)
20492050

2051+
def _test_generated_message(self, obj, name):
2052+
with self.assertRaises(AttributeError) as cm:
2053+
getattr(obj, name)
2054+
self.assertEqual(str(cm.exception),
2055+
f"{obj!r} has no attribute {name!r}")
2056+
2057+
def test_getattr_error_message(self):
2058+
class RaiseWithName:
2059+
def __getattr__(self, name):
2060+
raise AttributeError(name)
2061+
2062+
class BareRaise:
2063+
def __getattr__(self, name):
2064+
raise AttributeError
2065+
2066+
self._test_generated_message(RaiseWithName(), "missing1")
2067+
self._test_generated_message(BareRaise(), "missing2")
2068+
2069+
def test_module_getattr_attribute_error_message(self):
2070+
mod1 = ModuleType("raisewithname")
2071+
def raise_with_name(name):
2072+
raise AttributeError(name)
2073+
mod1.__getattr__ = raise_with_name
2074+
2075+
mod2 = ModuleType("bareraise")
2076+
def bare_raise(name):
2077+
raise AttributeError
2078+
mod2.__getattr__ = bare_raise
2079+
2080+
self._test_generated_message(mod1, "missing3")
2081+
self._test_generated_message(mod2, "missing4")
2082+
20502083
# Note: name suggestion tests live in `test_traceback`.
20512084

20522085

0 commit comments

Comments
 (0)