[pypy-commit] pypy pep526: Add WIP test for variable annotation in symtable.

alcarithemad pypy.commits at gmail.com
Thu Mar 1 05:07:44 EST 2018


Author: Colin Valliant <alcarithemad at gmail.com>
Branch: pep526
Changeset: r93911:2ddcba2e06c4
Date: 2018-02-13 23:21 -0800
http://bitbucket.org/pypy/pypy/changeset/2ddcba2e06c4/

Log:	Add WIP test for variable annotation in symtable.

diff --git a/pypy/interpreter/astcompiler/test/test_symtable.py b/pypy/interpreter/astcompiler/test/test_symtable.py
--- a/pypy/interpreter/astcompiler/test/test_symtable.py
+++ b/pypy/interpreter/astcompiler/test/test_symtable.py
@@ -486,6 +486,34 @@
         scp = self.mod_scope("with x: pass")
         assert scp.lookup("_[1]") == symtable.SCOPE_LOCAL
 
+    def test_annotation_global(self):
+        src_global = ("def f():\n"
+                      "    x: int\n"
+                      "    global x\n")
+        exc_global = py.test.raises(SyntaxError, self.func_scope, src_global).value
+        assert exc_global.msg == "annotated name 'x' can't be global"
+        assert exc_global.lineno == 3
+
+    def test_annotation_nonlocal(self):
+        src_nonlocal = ("def f():\n"
+                        "    x: int\n"
+                        "    nonlocal x\n")
+        exc_nonlocal = py.test.raises(SyntaxError, self.func_scope, src_nonlocal).value
+        assert exc_nonlocal.msg == "annotated name 'x' can't be nonlocal"
+        assert exc_nonlocal.lineno == 3
+
+    def test_annotation_assignment(self):
+        scp = self.mod_scope("x: int = 1")
+        assert scp.contains_annotated == True
+
+        scp2 = self.mod_scope("x = 1")
+        assert scp2.contains_annotated == False
+
+        fscp = self.func_scope("def f(): x: int")
+        assert fscp.contains_annotated == False
+        assert fscp.lookup("x") == symtable.SCOPE_LOCAL
+
+
     def test_issue13343(self):
         scp = self.mod_scope("lambda *, k1=x, k2: None")
         assert scp.lookup("x") == symtable.SCOPE_GLOBAL_IMPLICIT


More information about the pypy-commit mailing list