Author: Colin Valliant <[email protected]>
Branch: pep526
Changeset: r93917:8d9b6685e41e
Date: 2018-02-13 23:27 -0800
http://bitbucket.org/pypy/pypy/changeset/8d9b6685e41e/
Log: Add some app-level test for variable annotations.
diff --git a/pypy/interpreter/test/test_annotations.py
b/pypy/interpreter/test/test_annotations.py
new file mode 100644
--- /dev/null
+++ b/pypy/interpreter/test/test_annotations.py
@@ -0,0 +1,95 @@
+import py
+
+class AppTestAnnotations:
+
+ def test_simple_annotation(self):
+ # exec because this needs to be in "top level" scope
+ # whereas the docstring-based tests are inside a function
+ # (or don't care)
+ exec("a: int; assert __annotations__['a'] == int")
+
+ def test_non_simple_annotation(self):
+ '''
+ class C:
+ (a): int
+ assert "a" not in __annotations__
+ '''
+
+ def test_simple_with_target(self):
+ '''
+ class C:
+ a: int = 1
+ assert __annotations__["a"] == int
+ assert a == 1
+ '''
+
+ def test_attribute_target(self):
+ '''
+ class C:
+ a = 1
+ a.x: int
+ assert __annotations__ == {}
+ '''
+
+ def test_subscript_target(self):
+ '''
+ # this test exists to ensure that these type annotations
+ # don't raise exceptions during compilation
+ class C:
+ a = 1
+ a[0]: int
+ a[1:2]: int
+ a[1:2:2]: int
+ a[1:2:2,...]: int
+ assert __annotations__ == {}
+ '''
+
+ def test_class_annotation(self):
+ '''
+ class C:
+ a: int
+ b: str = "s"
+ assert "__annotations__" in locals()
+ assert C.__annotations__ == {"a": int, "b": str}
+ assert C.b == "s"
+ '''
+
+ def test_unevaluated_name(self):
+ '''
+ class C:
+ def __init__(self):
+ self.x: invalid_name = 1
+ y[0]: also_invalid
+ assert self.x == 1
+ C()
+ '''
+
+ def test_function_no___annotations__(self):
+ '''
+ a: int
+ assert "__annotations__" not in locals()
+ '''
+
+ def test_unboundlocal(self):
+ # this test and the one below it are adapted from PEP 526
+ '''
+ a: int
+ try:
+ print(a)
+ except UnboundLocalError:
+ pass
+ except:
+ assert False
+ '''
+
+ def test_nameerror(self):
+ # there's no annotation here, but it's present for contrast with
+ # the test above
+ '''
+ try:
+ print(a)
+ except NameError:
+ pass
+ except:
+ raise
+ '''
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit