From ed088a322d895498eb59d9fa4a1f06e5b5f13895 Mon Sep 17 00:00:00 2001 From: donBarbos Date: Wed, 20 Nov 2024 12:24:44 +0400 Subject: [PATCH 1/3] Add more tests for inspect.getmembers --- Lib/test/test_inspect/test_inspect.py | 66 +++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/Lib/test/test_inspect/test_inspect.py b/Lib/test/test_inspect/test_inspect.py index a92627a4d60f68..030cd2e28d8aac 100644 --- a/Lib/test/test_inspect/test_inspect.py +++ b/Lib/test/test_inspect/test_inspect.py @@ -1732,6 +1732,72 @@ class C(metaclass=M): attrs = [a[0] for a in inspect.getmembers(C)] self.assertNotIn('missing', attrs) + def test_getmembers_function(self): + members = inspect.getmembers(mod.eggs) + callables = inspect.getmembers(mod.eggs, predicate=callable) + self.assertIn(('__name__', 'eggs'), members) + self.assertIn(('__doc__', 'A docstring.'), members) + self.assertTrue(any(name == '__call__' for name, _ in callables)) + + def test_getmembers_code(self): + code = mod.eggs.__code__ + members = inspect.getmembers(code) + integers = inspect.getmembers(code, predicate=lambda x: isinstance(x, int)) + self.assertIn(("co_name", "eggs"), members) + self.assertIn(("co_argcount", code.co_argcount), members) + self.assertIn(("co_argcount", code.co_argcount), integers) + + def test_getmembers_frame(self): + members = inspect.getmembers(mod.currentframe) + dicts = inspect.getmembers( + mod.currentframe, predicate=lambda x: isinstance(x, dict) + ) + self.assertIn(("f_code", mod.currentframe.f_code), members) + self.assertIn(("f_globals", mod.currentframe.f_globals), members) + self.assertIn(("f_globals", mod.currentframe.f_globals), dicts) + + def test_getmembers_traceback(self): + try: + 1 / 0 + except Exception as e: + tb = e.__traceback__ + + members = inspect.getmembers(tb) + integers = inspect.getmembers(tb, predicate=lambda x: isinstance(x, int)) + self.assertIn(("tb_frame", tb.tb_frame), members) + self.assertIn(("tb_lineno", tb.tb_lineno), members) + self.assertTrue(("tb_lineno", tb.tb_lineno) in integers) + + def test_getmembers_generator(self): + gen = generator_function_example(1) + members = inspect.getmembers(gen) + attrs = inspect.getmembers( + gen, predicate=lambda x: hasattr(x, "__class__") + ) + self.assertIn(("gi_code", gen.gi_code), members) + self.assertIn(("gi_running", gen.gi_running), members) + self.assertTrue(any(name.startswith("gi_") for name, _ in attrs)) + + def test_getmembers_coroutine(self): + coro = coroutine_function_example(1) + members = inspect.getmembers(coro) + attrs = inspect.getmembers( + coro, predicate=lambda x: hasattr(x, "__class__") + ) + self.assertIn(("cr_code", coro.cr_code), members) + self.assertIn(("cr_running", coro.cr_running), members) + self.assertTrue(any(name.startswith("cr_") for name, _ in attrs)) + + coro.close() # silence warnings + + def test_getmembers_builtin(self): + members = inspect.getmembers(len) + callables = inspect.getmembers(len, predicate=callable) + self.assertIn(("__name__", "len"), members) + self.assertIn(("__doc__", len.__doc__), members) + self.assertTrue(any(name == "__call__" for name, _ in callables)) + + class TestFormatAnnotation(unittest.TestCase): def test_typing_replacement(self): From 2adf72b9891aa06528fd091b57981a1edaaad013 Mon Sep 17 00:00:00 2001 From: donBarbos Date: Fri, 22 Nov 2024 22:56:31 +0000 Subject: [PATCH 2/3] Update Lib/test/test_inspect/test_inspect.py Co-authored-by: Peter Bierma --- Lib/test/test_inspect/test_inspect.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_inspect/test_inspect.py b/Lib/test/test_inspect/test_inspect.py index 030cd2e28d8aac..aea97f37396eaf 100644 --- a/Lib/test/test_inspect/test_inspect.py +++ b/Lib/test/test_inspect/test_inspect.py @@ -1788,7 +1788,7 @@ def test_getmembers_coroutine(self): self.assertIn(("cr_running", coro.cr_running), members) self.assertTrue(any(name.startswith("cr_") for name, _ in attrs)) - coro.close() # silence warnings + coro.close() # silence warnings def test_getmembers_builtin(self): members = inspect.getmembers(len) From f79ef082d552efebf381188e808d64a872316c2e Mon Sep 17 00:00:00 2001 From: donBarbos Date: Mon, 25 Nov 2024 02:36:11 +0000 Subject: [PATCH 3/3] Update Lib/test/test_inspect/test_inspect.py Co-authored-by: Peter Bierma --- Lib/test/test_inspect/test_inspect.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_inspect/test_inspect.py b/Lib/test/test_inspect/test_inspect.py index aea97f37396eaf..f9a0f232abac73 100644 --- a/Lib/test/test_inspect/test_inspect.py +++ b/Lib/test/test_inspect/test_inspect.py @@ -1759,7 +1759,7 @@ def test_getmembers_frame(self): def test_getmembers_traceback(self): try: 1 / 0 - except Exception as e: + except ZeroDivisionError as e: tb = e.__traceback__ members = inspect.getmembers(tb)