1import unittest
2
3from test.support import import_helper
4
5
6# Skip this test if the _testcapi module isn't available.
7_testcapi = import_helper.import_module('_testcapi')
8
9
10class PyEval_EvalCodeExTests(unittest.TestCase):
11
12    def test_simple(self):
13        def f():
14            return a
15
16        self.assertEqual(_testcapi.eval_code_ex(f.__code__, dict(a=1)), 1)
17
18    # Need to force the compiler to use LOAD_NAME
19    # def test_custom_locals(self):
20    #     def f():
21    #         return
22
23    def test_with_args(self):
24        def f(a, b, c):
25            return a
26
27        self.assertEqual(_testcapi.eval_code_ex(f.__code__, {}, {}, (1, 2, 3)), 1)
28
29    def test_with_kwargs(self):
30        def f(a, b, c):
31            return a
32
33        self.assertEqual(_testcapi.eval_code_ex(f.__code__, {}, {}, (), dict(a=1, b=2, c=3)), 1)
34
35    def test_with_default(self):
36        def f(a):
37            return a
38
39        self.assertEqual(_testcapi.eval_code_ex(f.__code__, {}, {}, (), {}, (1,)), 1)
40
41    def test_with_kwarg_default(self):
42        def f(*, a):
43            return a
44
45        self.assertEqual(_testcapi.eval_code_ex(f.__code__, {}, {}, (), {}, (), dict(a=1)), 1)
46
47    def test_with_closure(self):
48        a = 1
49        def f():
50            return a
51
52        self.assertEqual(_testcapi.eval_code_ex(f.__code__, {}, {}, (), {}, (), {}, f.__closure__), 1)
53
54
55if __name__ == "__main__":
56    unittest.main()
57