diff options
Diffstat (limited to 'Lib/test/test_symtable.py')
-rw-r--r-- | Lib/test/test_symtable.py | 17 |
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()) |