summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_capi/test_eval.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_capi/test_eval.py')
-rw-r--r--Lib/test/test_capi/test_eval.py103
1 files changed, 103 insertions, 0 deletions
diff --git a/Lib/test/test_capi/test_eval.py b/Lib/test/test_capi/test_eval.py
new file mode 100644
index 0000000..20ef269
--- /dev/null
+++ b/Lib/test/test_capi/test_eval.py
@@ -0,0 +1,103 @@
+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()