mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	 430ccbc009
			
		
	
	
		430ccbc009
		
			
		
	
	
	
	
		
			
			* gh-111495: Add more tests on PyEval C APIs (#122789) * Add Lib/test/test_capi/test_eval.py * Add Modules/_testlimitedcapi/eval.c (cherry picked from commitbf8b374639) * gh-111495: Fix refleaks in test_capi.test_eval tests (#122851) (cherry picked from commitb4a316087c)
		
			
				
	
	
		
			103 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import sys
 | |
| import unittest
 | |
| from test.support import import_helper
 | |
| 
 | |
| _testlimitedcapi = import_helper.import_module('_testlimitedcapi')
 | |
| 
 | |
| 
 | |
| class Tests(unittest.TestCase):
 | |
|     def test_eval_get_func_name(self):
 | |
|         eval_get_func_name = _testlimitedcapi.eval_get_func_name
 | |
| 
 | |
|         def function_example(): ...
 | |
| 
 | |
|         class A:
 | |
|             def method_example(self): ...
 | |
| 
 | |
|         self.assertEqual(eval_get_func_name(function_example),
 | |
|                          "function_example")
 | |
|         self.assertEqual(eval_get_func_name(A.method_example),
 | |
|                          "method_example")
 | |
|         self.assertEqual(eval_get_func_name(A().method_example),
 | |
|                          "method_example")
 | |
|         self.assertEqual(eval_get_func_name(sum), "sum")  # c function
 | |
|         self.assertEqual(eval_get_func_name(A), "type")
 | |
| 
 | |
|     def test_eval_get_func_desc(self):
 | |
|         eval_get_func_desc = _testlimitedcapi.eval_get_func_desc
 | |
| 
 | |
|         def function_example(): ...
 | |
| 
 | |
|         class A:
 | |
|             def method_example(self): ...
 | |
| 
 | |
|         self.assertEqual(eval_get_func_desc(function_example),
 | |
|                          "()")
 | |
|         self.assertEqual(eval_get_func_desc(A.method_example),
 | |
|                          "()")
 | |
|         self.assertEqual(eval_get_func_desc(A().method_example),
 | |
|                          "()")
 | |
|         self.assertEqual(eval_get_func_desc(sum), "()")  # c function
 | |
|         self.assertEqual(eval_get_func_desc(A), " object")
 | |
| 
 | |
|     def test_eval_getlocals(self):
 | |
|         # Test PyEval_GetLocals()
 | |
|         x = 1
 | |
|         self.assertEqual(_testlimitedcapi.eval_getlocals(),
 | |
|             {'self': self,
 | |
|              'x': 1})
 | |
| 
 | |
|         y = 2
 | |
|         self.assertEqual(_testlimitedcapi.eval_getlocals(),
 | |
|             {'self': self,
 | |
|              'x': 1,
 | |
|              'y': 2})
 | |
| 
 | |
|     def test_eval_getglobals(self):
 | |
|         # Test PyEval_GetGlobals()
 | |
|         self.assertEqual(_testlimitedcapi.eval_getglobals(),
 | |
|                          globals())
 | |
| 
 | |
|     def test_eval_getbuiltins(self):
 | |
|         # Test PyEval_GetBuiltins()
 | |
|         self.assertEqual(_testlimitedcapi.eval_getbuiltins(),
 | |
|                          globals()['__builtins__'])
 | |
| 
 | |
|     def test_eval_getframe(self):
 | |
|         # Test PyEval_GetFrame()
 | |
|         self.assertEqual(_testlimitedcapi.eval_getframe(),
 | |
|                          sys._getframe())
 | |
| 
 | |
|     def test_eval_getframe_builtins(self):
 | |
|         # Test PyEval_GetFrameBuiltins()
 | |
|         self.assertEqual(_testlimitedcapi.eval_getframe_builtins(),
 | |
|                          sys._getframe().f_builtins)
 | |
| 
 | |
|     def test_eval_getframe_globals(self):
 | |
|         # Test PyEval_GetFrameGlobals()
 | |
|         self.assertEqual(_testlimitedcapi.eval_getframe_globals(),
 | |
|                          sys._getframe().f_globals)
 | |
| 
 | |
|     def test_eval_getframe_locals(self):
 | |
|         # Test PyEval_GetFrameLocals()
 | |
|         self.assertEqual(_testlimitedcapi.eval_getframe_locals(),
 | |
|                          sys._getframe().f_locals)
 | |
| 
 | |
|     def test_eval_get_recursion_limit(self):
 | |
|         # Test Py_GetRecursionLimit()
 | |
|         self.assertEqual(_testlimitedcapi.eval_get_recursion_limit(),
 | |
|                          sys.getrecursionlimit())
 | |
| 
 | |
|     def test_eval_set_recursion_limit(self):
 | |
|         # Test Py_SetRecursionLimit()
 | |
|         old_limit = sys.getrecursionlimit()
 | |
|         try:
 | |
|             limit = old_limit + 123
 | |
|             _testlimitedcapi.eval_set_recursion_limit(limit)
 | |
|             self.assertEqual(sys.getrecursionlimit(), limit)
 | |
|         finally:
 | |
|             sys.setrecursionlimit(old_limit)
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     unittest.main()
 |