Skip to content

Commit

Permalink
gh-108638: Fix tests when _stat extension is missing (#108689)
Browse files Browse the repository at this point in the history
Fix test_inspect and test_pydoc when the _stat extension is missing.
Skip tests relying on _stat when _stat is missing.
  • Loading branch information
vstinner committed Aug 31, 2023
1 parent d48760b commit c6d5613
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 7 deletions.
28 changes: 22 additions & 6 deletions Lib/test/test_inspect.py
Original file line number Diff line number Diff line change
Expand Up @@ -1186,7 +1186,7 @@ def test_getfullargspec_builtin_func_no_signature(self):

cls = _testcapi.DocStringNoSignatureTest
obj = _testcapi.DocStringNoSignatureTest()
for builtin, template in [
tests = [
(_testcapi.docstring_no_signature_noargs, meth_noargs),
(_testcapi.docstring_no_signature_o, meth_o),
(cls.meth_noargs, meth_self_noargs),
Expand All @@ -1201,7 +1201,6 @@ def test_getfullargspec_builtin_func_no_signature(self):
(cls.meth_o_coexist, meth_self_o),

(time.time, meth_noargs),
(stat.S_IMODE, meth_o),
(str.lower, meth_self_noargs),
(''.lower, meth_self_noargs),
(set.add, meth_self_o),
Expand All @@ -1212,7 +1211,16 @@ def test_getfullargspec_builtin_func_no_signature(self):
(datetime.datetime.utcnow, meth_type_noargs),
(dict.__dict__['__class_getitem__'], meth_type_o),
(dict.__class_getitem__, meth_type_o),
]:
]
try:
import _stat
except ImportError:
# if the _stat extension is not available, stat.S_IMODE() is
# implemented in Python, not in C
pass
else:
tests.append((stat.S_IMODE, meth_o))
for builtin, template in tests:
with self.subTest(builtin):
self.assertEqual(inspect.getfullargspec(builtin),
inspect.getfullargspec(template))
Expand Down Expand Up @@ -2934,7 +2942,7 @@ def test_signature_on_builtins_no_signature(self):

cls = _testcapi.DocStringNoSignatureTest
obj = _testcapi.DocStringNoSignatureTest()
for builtin, template in [
tests = [
(_testcapi.docstring_no_signature_noargs, meth_noargs),
(_testcapi.docstring_no_signature_o, meth_o),
(cls.meth_noargs, meth_self_noargs),
Expand All @@ -2949,7 +2957,6 @@ def test_signature_on_builtins_no_signature(self):
(cls.meth_o_coexist, meth_self_o),

(time.time, meth_noargs),
(stat.S_IMODE, meth_o),
(str.lower, meth_self_noargs),
(''.lower, meth_noargs),
(set.add, meth_self_o),
Expand All @@ -2960,7 +2967,16 @@ def test_signature_on_builtins_no_signature(self):
(datetime.datetime.utcnow, meth_noargs),
(dict.__dict__['__class_getitem__'], meth_type_o),
(dict.__class_getitem__, meth_o),
]:
]
try:
import _stat
except ImportError:
# if the _stat extension is not available, stat.S_IMODE() is
# implemented in Python, not in C
pass
else:
tests.append((stat.S_IMODE, meth_o))
for builtin, template in tests:
with self.subTest(builtin):
self.assertEqual(inspect.signature(builtin),
inspect.signature(template))
Expand Down
8 changes: 7 additions & 1 deletion Lib/test/test_pydoc.py
Original file line number Diff line number Diff line change
Expand Up @@ -1187,7 +1187,13 @@ def test_module_level_callable_noargs(self):
"time()")

def test_module_level_callable_o(self):
self.assertEqual(self._get_summary_line(stat.S_IMODE),
try:
import _stat
except ImportError:
# stat.S_IMODE() and _stat.S_IMODE() have a different signature
self.skipTest('_stat extension is missing')

self.assertEqual(self._get_summary_line(_stat.S_IMODE),
"S_IMODE(object, /)")

def test_unbound_builtin_method_noargs(self):
Expand Down

0 comments on commit c6d5613

Please sign in to comment.