diff options
author | Irit Katriel <1055913+iritkatriel@users.noreply.github.com> | 2024-08-02 22:56:51 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-02 22:56:51 (GMT) |
commit | fe0a28d850943cf2ba132c9b0a933bb0c98ff0ae (patch) | |
tree | 02211945b8b257dc7903cb8d949d86a43593d7f4 /Lib/test | |
parent | 4b63cd170e5dd840bffc80922f09f2d69932ff5c (diff) | |
download | cpython-fe0a28d850943cf2ba132c9b0a933bb0c98ff0ae.zip cpython-fe0a28d850943cf2ba132c9b0a933bb0c98ff0ae.tar.gz cpython-fe0a28d850943cf2ba132c9b0a933bb0c98ff0ae.tar.bz2 |
gh-122560: add test that comprehension loop var appears only in one scope of the symtable (#122582)
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/test_symtable.py | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Lib/test/test_symtable.py b/Lib/test/test_symtable.py index bd367c1..24d89b0 100644 --- a/Lib/test/test_symtable.py +++ b/Lib/test/test_symtable.py @@ -528,6 +528,27 @@ class SymtableTest(unittest.TestCase): self.assertEqual(repr(self.top._table), expected) +class ComprehensionTests(unittest.TestCase): + def get_identifiers_recursive(self, st, res): + res.extend(st.get_identifiers()) + for ch in st.get_children(): + self.get_identifiers_recursive(ch, res) + + def test_loopvar_in_only_one_scope(self): + # ensure that the loop variable appears only once in the symtable + comps = [ + "[x for x in [1]]", + "{x for x in [1]}", + "{x:x*x for x in [1]}", + ] + for comp in comps: + with self.subTest(comp=comp): + st = symtable.symtable(comp, "?", "exec") + ids = [] + self.get_identifiers_recursive(st, ids) + self.assertEqual(len([x for x in ids if x == 'x']), 1) + + class CommandLineTest(unittest.TestCase): maxDiff = None |