summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_sys_setprofile.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_sys_setprofile.py')
-rw-r--r--Lib/test/test_sys_setprofile.py14
1 files changed, 14 insertions, 0 deletions
diff --git a/Lib/test/test_sys_setprofile.py b/Lib/test/test_sys_setprofile.py
index 32e03d7..b2e8e8a 100644
--- a/Lib/test/test_sys_setprofile.py
+++ b/Lib/test/test_sys_setprofile.py
@@ -479,6 +479,20 @@ class TestEdgeCases(unittest.TestCase):
sys.setprofile(lambda *args: None)
f()
+ def test_method_with_c_function(self):
+ # gh-122029
+ # When we have a PyMethodObject whose im_func is a C function, we
+ # should record both the call and the return. f = classmethod(repr)
+ # is just a way to create a PyMethodObject with a C function.
+ class A:
+ f = classmethod(repr)
+ events = []
+ sys.setprofile(lambda frame, event, args: events.append(event))
+ A().f()
+ sys.setprofile(None)
+ # The last c_call is the call to sys.setprofile
+ self.assertEqual(events, ['c_call', 'c_return', 'c_call'])
+
if __name__ == "__main__":
unittest.main()