Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_dynamic.py @ 78069:a8aa77458e12 3.2
Add c_size_t and c_ssize_t to the ctypes summary table.
| author | Antoine Pitrou <solipsis@pitrou.net> |
|---|---|
| date | Thu, 12 Jul 2012 20:31:50 +0200 |
| parents | aa632943b8bd |
| children |
| rev | line source |
|---|---|
|
59654
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
1 # Test the most dynamic corner cases of Python's runtime semantics. |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
2 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
3 import builtins |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
4 import contextlib |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
5 import unittest |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
6 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
7 from test.support import run_unittest, swap_item, swap_attr |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
8 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
9 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
10 class RebindBuiltinsTests(unittest.TestCase): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
11 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
12 """Test all the ways that we can change/shadow globals/builtins.""" |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
13 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
14 def configure_func(self, func, *args): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
15 """Perform TestCase-specific configuration on a function before testing. |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
16 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
17 By default, this does nothing. Example usage: spinning a function so |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
18 that a JIT will optimize it. Subclasses should override this as needed. |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
19 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
20 Args: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
21 func: function to configure. |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
22 *args: any arguments that should be passed to func, if calling it. |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
23 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
24 Returns: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
25 Nothing. Work will be performed on func in-place. |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
26 """ |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
27 pass |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
28 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
29 def test_globals_shadow_builtins(self): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
30 # Modify globals() to shadow an entry in builtins. |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
31 def foo(): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
32 return len([1, 2, 3]) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
33 self.configure_func(foo) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
34 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
35 self.assertEqual(foo(), 3) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
36 with swap_item(globals(), "len", lambda x: 7): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
37 self.assertEqual(foo(), 7) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
38 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
39 def test_modify_builtins(self): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
40 # Modify the builtins module directly. |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
41 def foo(): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
42 return len([1, 2, 3]) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
43 self.configure_func(foo) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
44 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
45 self.assertEqual(foo(), 3) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
46 with swap_attr(builtins, "len", lambda x: 7): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
47 self.assertEqual(foo(), 7) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
48 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
49 def test_modify_builtins_while_generator_active(self): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
50 # Modify the builtins out from under a live generator. |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
51 def foo(): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
52 x = range(3) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
53 yield len(x) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
54 yield len(x) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
55 self.configure_func(foo) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
56 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
57 g = foo() |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
58 self.assertEqual(next(g), 3) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
59 with swap_attr(builtins, "len", lambda x: 7): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
60 self.assertEqual(next(g), 7) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
61 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
62 def test_modify_builtins_from_leaf_function(self): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
63 # Verify that modifications made by leaf functions percolate up the |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
64 # callstack. |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
65 with swap_attr(builtins, "len", len): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
66 def bar(): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
67 builtins.len = lambda x: 4 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
68 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
69 def foo(modifier): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
70 l = [] |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
71 l.append(len(range(7))) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
72 modifier() |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
73 l.append(len(range(7))) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
74 return l |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
75 self.configure_func(foo, lambda: None) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
76 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
77 self.assertEqual(foo(bar), [7, 4]) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
78 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
79 def test_cannot_change_globals_or_builtins_with_eval(self): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
80 def foo(): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
81 return len([1, 2, 3]) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
82 self.configure_func(foo) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
83 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
84 # Note that this *doesn't* change the definition of len() seen by foo(). |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
85 builtins_dict = {"len": lambda x: 7} |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
86 globals_dict = {"foo": foo, "__builtins__": builtins_dict, |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
87 "len": lambda x: 8} |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
88 self.assertEqual(eval("foo()", globals_dict), 3) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
89 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
90 self.assertEqual(eval("foo()", {"foo": foo}), 3) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
91 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
92 def test_cannot_change_globals_or_builtins_with_exec(self): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
93 def foo(): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
94 return len([1, 2, 3]) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
95 self.configure_func(foo) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
96 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
97 globals_dict = {"foo": foo} |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
98 exec("x = foo()", globals_dict) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
99 self.assertEqual(globals_dict["x"], 3) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
100 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
101 # Note that this *doesn't* change the definition of len() seen by foo(). |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
102 builtins_dict = {"len": lambda x: 7} |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
103 globals_dict = {"foo": foo, "__builtins__": builtins_dict, |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
104 "len": lambda x: 8} |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
105 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
106 exec("x = foo()", globals_dict) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
107 self.assertEqual(globals_dict["x"], 3) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
108 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
109 def test_cannot_replace_builtins_dict_while_active(self): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
110 def foo(): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
111 x = range(3) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
112 yield len(x) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
113 yield len(x) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
114 self.configure_func(foo) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
115 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
116 g = foo() |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
117 self.assertEqual(next(g), 3) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
118 with swap_item(globals(), "__builtins__", {"len": lambda x: 7}): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
119 self.assertEqual(next(g), 3) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
120 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
121 def test_cannot_replace_builtins_dict_between_calls(self): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
122 def foo(): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
123 return len([1, 2, 3]) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
124 self.configure_func(foo) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
125 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
126 self.assertEqual(foo(), 3) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
127 with swap_item(globals(), "__builtins__", {"len": lambda x: 7}): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
128 self.assertEqual(foo(), 3) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
129 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
130 def test_eval_gives_lambda_custom_globals(self): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
131 globals_dict = {"len": lambda x: 7} |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
132 foo = eval("lambda: len([])", globals_dict) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
133 self.configure_func(foo) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
134 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
135 self.assertEqual(foo(), 7) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
136 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
137 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
138 def test_main(): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
139 run_unittest(RebindBuiltinsTests) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
140 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
141 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
142 if __name__ == "__main__": |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
diff
changeset
|
143 test_main() |
