@@ -1512,6 +1512,71 @@ def f(self):
1512
1512
self .assertIn (('f' , b .f ), inspect .getmembers (b ))
1513
1513
self .assertIn (('f' , b .f ), inspect .getmembers (b , inspect .ismethod ))
1514
1514
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
+
1515
1580
def test_getmembers_VirtualAttribute (self ):
1516
1581
class M (type ):
1517
1582
def __getattr__ (cls , name ):
0 commit comments