diff options
author | Batuhan Taskaya <batuhanosmantaskaya@gmail.com> | 2020-10-06 20:03:02 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-06 20:03:02 (GMT) |
commit | 044a1048ca93d466965afc027b91a5a9eb9ce23c (patch) | |
tree | 94ef2bca072693d83448edef4009dc840c58a3e2 /Lib/test/test_positional_only_arg.py | |
parent | bef7d299eb911086ea5a7ccf7a9da337e38a8491 (diff) | |
download | cpython-044a1048ca93d466965afc027b91a5a9eb9ce23c.zip cpython-044a1048ca93d466965afc027b91a5a9eb9ce23c.tar.gz cpython-044a1048ca93d466965afc027b91a5a9eb9ce23c.tar.bz2 |
bpo-38605: Make 'from __future__ import annotations' the default (GH-20434)
The hard part was making all the tests pass; there are some subtle issues here, because apparently the future import wasn't tested very thoroughly in previous Python versions.
For example, `inspect.signature()` returned type objects normally (except for forward references), but strings with the future import. We changed it to try and return type objects by calling `typing.get_type_hints()`, but fall back on returning strings if that function fails (which it may do if there are future references in the annotations that require passing in a specific namespace to resolve).
Diffstat (limited to 'Lib/test/test_positional_only_arg.py')
-rw-r--r-- | Lib/test/test_positional_only_arg.py | 17 |
1 files changed, 3 insertions, 14 deletions
diff --git a/Lib/test/test_positional_only_arg.py b/Lib/test/test_positional_only_arg.py index 0a9503e..1fe8256 100644 --- a/Lib/test/test_positional_only_arg.py +++ b/Lib/test/test_positional_only_arg.py @@ -302,14 +302,14 @@ class PositionalOnlyTestCase(unittest.TestCase): def f(x: int, /): ... return f - assert inner_has_pos_only().__annotations__ == {'x': int} + assert inner_has_pos_only().__annotations__ == {'x': 'int'} class Something: def method(self): def f(x: int, /): ... return f - assert Something().method().__annotations__ == {'x': int} + assert Something().method().__annotations__ == {'x': 'int'} def multiple_levels(): def inner_has_pos_only(): @@ -317,7 +317,7 @@ class PositionalOnlyTestCase(unittest.TestCase): return f return inner_has_pos_only() - assert multiple_levels().__annotations__ == {'x': int} + assert multiple_levels().__annotations__ == {'x': 'int'} def test_same_keyword_as_positional_with_kwargs(self): def f(something,/,**kwargs): @@ -429,17 +429,6 @@ class PositionalOnlyTestCase(unittest.TestCase): self.assertEqual(C().method(), sentinel) - def test_annotations_constant_fold(self): - def g(): - def f(x: not (int is int), /): ... - - # without constant folding we end up with - # COMPARE_OP(is), IS_OP (0) - # with constant folding we should expect a IS_OP (1) - codes = [(i.opname, i.argval) for i in dis.get_instructions(g)] - self.assertNotIn(('UNARY_NOT', None), codes) - self.assertIn(('IS_OP', 1), codes) - if __name__ == "__main__": unittest.main() |