11
11
12
12
glob = 42
13
13
some_var = 12
14
+ some_non_assigned_global_var = 11
15
+ some_assigned_global_var = 11
14
16
15
17
class Mine:
16
18
instance_var = 24
@@ -19,6 +21,8 @@ def a_method(p1, p2):
19
21
20
22
def spam(a, b, *var, **kw):
21
23
global bar
24
+ global some_assigned_global_var
25
+ some_assigned_global_var = 12
22
26
bar = 47
23
27
some_var = 10
24
28
x = 23
@@ -88,14 +92,14 @@ def test_children(self):
88
92
89
93
def test_lineno (self ):
90
94
self .assertEqual (self .top .get_lineno (), 0 )
91
- self .assertEqual (self .spam .get_lineno (), 12 )
95
+ self .assertEqual (self .spam .get_lineno (), 14 )
92
96
93
97
def test_function_info (self ):
94
98
func = self .spam
95
99
self .assertEqual (sorted (func .get_parameters ()), ["a" , "b" , "kw" , "var" ])
96
100
expected = ['a' , 'b' , 'internal' , 'kw' , 'other_internal' , 'some_var' , 'var' , 'x' ]
97
101
self .assertEqual (sorted (func .get_locals ()), expected )
98
- self .assertEqual (sorted (func .get_globals ()), ["bar" , "glob" ])
102
+ self .assertEqual (sorted (func .get_globals ()), ["bar" , "glob" , "some_assigned_global_var" ])
99
103
self .assertEqual (self .internal .get_frees (), ("x" ,))
100
104
101
105
def test_globals (self ):
@@ -106,6 +110,9 @@ def test_globals(self):
106
110
self .assertFalse (self .internal .lookup ("x" ).is_global ())
107
111
self .assertFalse (self .Mine .lookup ("instance_var" ).is_global ())
108
112
self .assertTrue (self .spam .lookup ("bar" ).is_global ())
113
+ # Module-scope globals are both global and local
114
+ self .assertTrue (self .top .lookup ("some_non_assigned_global_var" ).is_global ())
115
+ self .assertTrue (self .top .lookup ("some_assigned_global_var" ).is_global ())
109
116
110
117
def test_nonlocal (self ):
111
118
self .assertFalse (self .spam .lookup ("some_var" ).is_nonlocal ())
@@ -116,6 +123,9 @@ def test_nonlocal(self):
116
123
def test_local (self ):
117
124
self .assertTrue (self .spam .lookup ("x" ).is_local ())
118
125
self .assertFalse (self .spam .lookup ("bar" ).is_local ())
126
+ # Module-scope globals are both global and local
127
+ self .assertTrue (self .top .lookup ("some_non_assigned_global_var" ).is_local ())
128
+ self .assertTrue (self .top .lookup ("some_assigned_global_var" ).is_local ())
119
129
120
130
def test_free (self ):
121
131
self .assertTrue (self .internal .lookup ("x" ).is_free ())
@@ -234,6 +244,10 @@ def test_bytes(self):
234
244
top = symtable .symtable (code , "?" , "exec" )
235
245
self .assertIsNotNone (find_block (top , "\u017d " ))
236
246
247
+ def test_symtable_repr (self ):
248
+ self .assertEqual (str (self .top ), "<SymbolTable for module ?>" )
249
+ self .assertEqual (str (self .spam ), "<Function SymbolTable for spam in ?>" )
250
+
237
251
238
252
if __name__ == '__main__' :
239
253
unittest .main ()
0 commit comments