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
@@ -81,14 +85,14 @@ def test_children(self):
81
85
82
86
def test_lineno (self ):
83
87
self .assertEqual (self .top .get_lineno (), 0 )
84
- self .assertEqual (self .spam .get_lineno (), 12 )
88
+ self .assertEqual (self .spam .get_lineno (), 14 )
85
89
86
90
def test_function_info (self ):
87
91
func = self .spam
88
92
self .assertEqual (sorted (func .get_parameters ()), ["a" , "b" , "kw" , "var" ])
89
93
expected = ['a' , 'b' , 'internal' , 'kw' , 'other_internal' , 'some_var' , 'var' , 'x' ]
90
94
self .assertEqual (sorted (func .get_locals ()), expected )
91
- self .assertEqual (sorted (func .get_globals ()), ["bar" , "glob" ])
95
+ self .assertEqual (sorted (func .get_globals ()), ["bar" , "glob" , "some_assigned_global_var" ])
92
96
self .assertEqual (self .internal .get_frees (), ("x" ,))
93
97
94
98
def test_globals (self ):
@@ -99,6 +103,9 @@ def test_globals(self):
99
103
self .assertFalse (self .internal .lookup ("x" ).is_global ())
100
104
self .assertFalse (self .Mine .lookup ("instance_var" ).is_global ())
101
105
self .assertTrue (self .spam .lookup ("bar" ).is_global ())
106
+ # Module-scope globals are both global and local
107
+ self .assertTrue (self .top .lookup ("some_non_assigned_global_var" ).is_global ())
108
+ self .assertTrue (self .top .lookup ("some_assigned_global_var" ).is_global ())
102
109
103
110
def test_nonlocal (self ):
104
111
self .assertFalse (self .spam .lookup ("some_var" ).is_nonlocal ())
@@ -109,6 +116,9 @@ def test_nonlocal(self):
109
116
def test_local (self ):
110
117
self .assertTrue (self .spam .lookup ("x" ).is_local ())
111
118
self .assertFalse (self .spam .lookup ("bar" ).is_local ())
119
+ # Module-scope globals are both global and local
120
+ self .assertTrue (self .top .lookup ("some_non_assigned_global_var" ).is_local ())
121
+ self .assertTrue (self .top .lookup ("some_assigned_global_var" ).is_local ())
112
122
113
123
def test_free (self ):
114
124
self .assertTrue (self .internal .lookup ("x" ).is_free ())
@@ -227,6 +237,10 @@ def test_bytes(self):
227
237
top = symtable .symtable (code , "?" , "exec" )
228
238
self .assertIsNotNone (find_block (top , "\u017d " ))
229
239
240
+ def test_symtable_repr (self ):
241
+ self .assertEqual (str (self .top ), "<SymbolTable for module ?>" )
242
+ self .assertEqual (str (self .spam ), "<Function SymbolTable for spam in ?>" )
243
+
230
244
231
245
if __name__ == '__main__' :
232
246
unittest .main ()
0 commit comments