summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_symtable.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_symtable.py')
-rw-r--r--Lib/test/test_symtable.py17
1 files changed, 15 insertions, 2 deletions
diff --git a/Lib/test/test_symtable.py b/Lib/test/test_symtable.py
index 8d76f6f..0a1cb8d 100644
--- a/Lib/test/test_symtable.py
+++ b/Lib/test/test_symtable.py
@@ -10,6 +10,7 @@ TEST_CODE = """
import sys
glob = 42
+some_var = 12
class Mine:
instance_var = 24
@@ -19,10 +20,15 @@ class Mine:
def spam(a, b, *var, **kw):
global bar
bar = 47
+ some_var = 10
x = 23
glob
def internal():
return x
+ def other_internal():
+ nonlocal some_var
+ some_var = 3
+ return some_var
return internal
def foo():
@@ -47,6 +53,7 @@ class SymtableTest(unittest.TestCase):
a_method = find_block(Mine, "a_method")
spam = find_block(top, "spam")
internal = find_block(spam, "internal")
+ other_internal = find_block(spam, "other_internal")
foo = find_block(top, "foo")
def test_type(self):
@@ -75,12 +82,12 @@ class SymtableTest(unittest.TestCase):
def test_lineno(self):
self.assertEqual(self.top.get_lineno(), 0)
- self.assertEqual(self.spam.get_lineno(), 11)
+ self.assertEqual(self.spam.get_lineno(), 12)
def test_function_info(self):
func = self.spam
self.assertEqual(sorted(func.get_parameters()), ["a", "b", "kw", "var"])
- expected = ["a", "b", "internal", "kw", "var", "x"]
+ expected = ['a', 'b', 'internal', 'kw', 'other_internal', 'some_var', 'var', 'x']
self.assertEqual(sorted(func.get_locals()), expected)
self.assertEqual(sorted(func.get_globals()), ["bar", "glob"])
self.assertEqual(self.internal.get_frees(), ("x",))
@@ -93,6 +100,12 @@ class SymtableTest(unittest.TestCase):
self.assertFalse(self.internal.lookup("x").is_global())
self.assertFalse(self.Mine.lookup("instance_var").is_global())
+ def test_nonlocal(self):
+ self.assertFalse(self.spam.lookup("some_var").is_nonlocal())
+ self.assertTrue(self.other_internal.lookup("some_var").is_nonlocal())
+ expected = ("some_var",)
+ self.assertEqual(self.other_internal.get_nonlocals(), expected)
+
def test_local(self):
self.assertTrue(self.spam.lookup("x").is_local())
self.assertFalse(self.internal.lookup("x").is_local())