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
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()