annotate Lib/test/test_dynamic.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents aa632943b8bd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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()