Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit becc50f

Browse files
committed
gh-116789: Add more tests for inspect.getmembers
1 parent f20dfb7 commit becc50f

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

Lib/test/test_inspect/test_inspect.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1512,6 +1512,71 @@ def f(self):
15121512
self.assertIn(('f', b.f), inspect.getmembers(b))
15131513
self.assertIn(('f', b.f), inspect.getmembers(b, inspect.ismethod))
15141514

1515+
def test_getmembers_function(self):
1516+
def func(arg: int = 1, *, kw = 2) -> None:
1517+
"""Docstring."""
1518+
1519+
res = dict(inspect.getmembers(func))
1520+
expected = {k: getattr(func, k) for k in dir(func)}
1521+
self.assertEqual(res, expected)
1522+
1523+
def test_getmembers_function_predicate(self):
1524+
def func(*, a: int = 1): ...
1525+
1526+
res = dict(
1527+
inspect.getmembers(
1528+
func, lambda value: isinstance(value, dict),
1529+
),
1530+
)
1531+
expected = {
1532+
k: v
1533+
for k in dir(func)
1534+
if isinstance((v := getattr(func, k)), dict)
1535+
}
1536+
self.assertEqual(res, expected)
1537+
1538+
def test_getmembers_traceback(self):
1539+
try:
1540+
raise ValueError(3)
1541+
except ValueError as ex:
1542+
trace = ex.__traceback__
1543+
1544+
res = dict(inspect.getmembers(trace))
1545+
expected = {k: getattr(trace, k) for k in dir(trace)}
1546+
self.assertEqual(res, expected)
1547+
1548+
def test_getmembers_frame(self):
1549+
ns = {}
1550+
def func(a=1):
1551+
ns['fr'] = inspect.currentframe()
1552+
func()
1553+
1554+
res = dict(inspect.getmembers(ns['fr']))
1555+
expected = {k: getattr(ns['fr'], k) for k in dir(ns['fr'])}
1556+
self.assertEqual(res, expected)
1557+
1558+
def test_getmembers_code(self):
1559+
def func(): ...
1560+
1561+
res = dict(inspect.getmembers(func.__code__))
1562+
expected = {k: getattr(func.__code__, k) for k in dir(func.__code__)}
1563+
self.assertEqual(res, expected)
1564+
1565+
def test_getmembers_code(self):
1566+
async def func(): ...
1567+
1568+
coro = func()
1569+
self.addCleanup(coro.close)
1570+
1571+
res = dict(inspect.getmembers(coro))
1572+
expected = {k: getattr(coro, k) for k in dir(coro)}
1573+
self.assertEqual(res, expected)
1574+
1575+
def test_getmembers_builtin(self):
1576+
res = dict(inspect.getmembers(list))
1577+
expected = {k: getattr(list, k) for k in dir(list)}
1578+
self.assertEqual(res, expected)
1579+
15151580
def test_getmembers_VirtualAttribute(self):
15161581
class M(type):
15171582
def __getattr__(cls, name):

0 commit comments

Comments
 (0)