summaryrefslogtreecommitdiff
path: root/tests/test_pycode_parser.py
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2021-01-24 16:34:47 +0900
committerTakeshi KOMIYA <i.tkomiya@gmail.com>2021-01-24 16:34:47 +0900
commit51d500833e391c182f536e83a5d62d5e90ce8ca9 (patch)
treefb854309b759773feb83e7e4bbc91e3ed3cb2b00 /tests/test_pycode_parser.py
parent375fb52fe402d46d633e321ce8f20c1aa61c49b9 (diff)
parent41ee2d6e6595d0eefb4a2b752fd79a3451382d5a (diff)
downloadsphinx-git-51d500833e391c182f536e83a5d62d5e90ce8ca9.tar.gz
Merge branch '3.x' into 7774_remove_develop.rst
Diffstat (limited to 'tests/test_pycode_parser.py')
-rw-r--r--tests/test_pycode_parser.py80
1 files changed, 79 insertions, 1 deletions
diff --git a/tests/test_pycode_parser.py b/tests/test_pycode_parser.py
index 398c9f8a4..9169315fc 100644
--- a/tests/test_pycode_parser.py
+++ b/tests/test_pycode_parser.py
@@ -4,7 +4,7 @@
Test pycode.parser.
- :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
+ :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
@@ -13,6 +13,7 @@ import sys
import pytest
from sphinx.pycode.parser import Parser
+from sphinx.util.inspect import signature_from_str
def test_comment_picker_basic():
@@ -452,3 +453,80 @@ def test_typing_final_not_imported():
parser = Parser(source)
parser.parse()
assert parser.finals == []
+
+
+def test_typing_overload():
+ source = ('import typing\n'
+ '\n'
+ '@typing.overload\n'
+ 'def func(x: int, y: int) -> int: pass\n'
+ '\n'
+ '@typing.overload\n'
+ 'def func(x: str, y: str) -> str: pass\n'
+ '\n'
+ 'def func(x, y): pass\n')
+ parser = Parser(source)
+ parser.parse()
+ assert parser.overloads == {'func': [signature_from_str('(x: int, y: int) -> int'),
+ signature_from_str('(x: str, y: str) -> str')]}
+
+
+def test_typing_overload_from_import():
+ source = ('from typing import overload\n'
+ '\n'
+ '@overload\n'
+ 'def func(x: int, y: int) -> int: pass\n'
+ '\n'
+ '@overload\n'
+ 'def func(x: str, y: str) -> str: pass\n'
+ '\n'
+ 'def func(x, y): pass\n')
+ parser = Parser(source)
+ parser.parse()
+ assert parser.overloads == {'func': [signature_from_str('(x: int, y: int) -> int'),
+ signature_from_str('(x: str, y: str) -> str')]}
+
+
+def test_typing_overload_import_as():
+ source = ('import typing as foo\n'
+ '\n'
+ '@foo.overload\n'
+ 'def func(x: int, y: int) -> int: pass\n'
+ '\n'
+ '@foo.overload\n'
+ 'def func(x: str, y: str) -> str: pass\n'
+ '\n'
+ 'def func(x, y): pass\n')
+ parser = Parser(source)
+ parser.parse()
+ assert parser.overloads == {'func': [signature_from_str('(x: int, y: int) -> int'),
+ signature_from_str('(x: str, y: str) -> str')]}
+
+
+def test_typing_overload_from_import_as():
+ source = ('from typing import overload as bar\n'
+ '\n'
+ '@bar\n'
+ 'def func(x: int, y: int) -> int: pass\n'
+ '\n'
+ '@bar\n'
+ 'def func(x: str, y: str) -> str: pass\n'
+ '\n'
+ 'def func(x, y): pass\n')
+ parser = Parser(source)
+ parser.parse()
+ assert parser.overloads == {'func': [signature_from_str('(x: int, y: int) -> int'),
+ signature_from_str('(x: str, y: str) -> str')]}
+
+
+def test_typing_overload_not_imported():
+ source = ('@typing.final\n'
+ 'def func(x: int, y: int) -> int: pass\n'
+ '\n'
+ '@typing.final\n'
+ 'def func(x: str, y: str) -> str: pass\n'
+ '\n'
+ 'def func(x, y): pass\n')
+ parser = Parser(source)
+ parser.parse()
+ assert parser.overloads == {}