1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
"""Test functions loading."""
from __future__ import annotations
import pytest
from griffe import ParameterKind, temporary_visited_module
def test_visit_simple_function() -> None:
"""Test functions parameters loading."""
with temporary_visited_module("def f(foo='<>'): ...") as module:
function = module["f"]
assert len(function.parameters) == 1
param = function.parameters[0]
assert param is function.parameters["foo"]
assert param.name == "foo"
assert param.kind is ParameterKind.positional_or_keyword
assert param.default == "'<>'"
def test_visit_function_positional_only_param() -> None:
"""Test functions parameters loading."""
with temporary_visited_module("def f(posonly, /): ...") as module:
function = module["f"]
assert len(function.parameters) == 1
param = function.parameters[0]
assert param is function.parameters["posonly"]
assert param.name == "posonly"
assert param.kind is ParameterKind.positional_only
assert param.default is None
def test_visit_function_positional_only_param_with_default() -> None:
"""Test functions parameters loading."""
with temporary_visited_module("def f(posonly=0, /): ...") as module:
function = module["f"]
assert len(function.parameters) == 1
param = function.parameters[0]
assert param is function.parameters["posonly"]
assert param.name == "posonly"
assert param.kind is ParameterKind.positional_only
assert param.default == "0"
def test_visit_function_positional_or_keyword_param() -> None:
"""Test functions parameters loading."""
with temporary_visited_module("def f(posonly, /, poskw): ...") as module:
function = module["f"]
assert len(function.parameters) == 2
param = function.parameters[1]
assert param is function.parameters["poskw"]
assert param.name == "poskw"
assert param.kind is ParameterKind.positional_or_keyword
assert param.default is None
def test_visit_function_positional_or_keyword_param_with_default() -> None:
"""Test functions parameters loading."""
with temporary_visited_module("def f(posonly, /, poskw=0): ...") as module:
function = module["f"]
assert len(function.parameters) == 2
param = function.parameters[1]
assert param is function.parameters["poskw"]
assert param.name == "poskw"
assert param.kind is ParameterKind.positional_or_keyword
assert param.default == "0"
def test_visit_function_keyword_only_param() -> None:
"""Test functions parameters loading."""
with temporary_visited_module("def f(*, kwonly): ...") as module:
function = module["f"]
assert len(function.parameters) == 1
param = function.parameters[0]
assert param is function.parameters["kwonly"]
assert param.name == "kwonly"
assert param.kind is ParameterKind.keyword_only
assert param.default is None
def test_visit_function_keyword_only_param_with_default() -> None:
"""Test functions parameters loading."""
with temporary_visited_module("def f(*, kwonly=0): ...") as module:
function = module["f"]
assert len(function.parameters) == 1
param = function.parameters[0]
assert param is function.parameters["kwonly"]
assert param.name == "kwonly"
assert param.kind is ParameterKind.keyword_only
assert param.default == "0"
def test_visit_function_syntax_error() -> None:
"""Test functions parameters loading."""
with pytest.raises(SyntaxError), temporary_visited_module("def f(/, poskw=0): ..."):
...
def test_visit_function_variadic_params() -> None:
"""Test functions variadic parameters visit."""
with temporary_visited_module("def f(*args: str, kw=1, **kwargs: int): ...") as module:
function = module["f"]
assert len(function.parameters) == 3
param = function.parameters[0]
assert param.name == "args"
assert param.annotation.name == "str"
assert param.annotation.canonical_path == "str"
param = function.parameters[1]
assert param.annotation is None
param = function.parameters[2]
assert param.name == "kwargs"
assert param.annotation.name == "int"
assert param.annotation.canonical_path == "int"
def test_visit_function_params_annotations() -> None:
"""Test functions parameters loading."""
with temporary_visited_module(
"""
import typing
from typing import Any
def f_annorations(
a: str,
b: Any,
c: typing.Optional[typing.List[int]],
d: float | None):
...
""",
) as module:
function = module["f_annorations"]
assert len(function.parameters) == 4
param = function.parameters[0]
assert param.annotation.name == "str"
assert param.annotation.canonical_path == "str"
param = function.parameters[1]
assert param.annotation.name == "Any"
assert param.annotation.canonical_path == "typing.Any"
param = function.parameters[2]
assert str(param.annotation) == "typing.Optional[typing.List[int]]"
param = function.parameters[3]
assert str(param.annotation) == "float | None"
|