ClickUp Operator
by noahvanhart
"""Tests for generic docstring routines."""
import pytest
from docstring_parser.common import DocstringStyle, ParseError
from docstring_parser.parser import parse
def test_rest() -> None:
"""Test ReST-style parser autodetection."""
docstring = parse(
"""
Short description
Long description
Causing people to indent:
A lot sometimes
:param spam: spam desc
:param int bla: bla desc
:param str yay:
:raises ValueError: exc desc
:returns tuple: ret desc
"""
)
assert docstring.style == DocstringStyle.REST
assert docstring.short_description == "Short description"
assert docstring.long_description == (
"Long description\n\n"
"Causing people to indent:\n\n"
" A lot sometimes"
)
assert len(docstring.params) == 3
assert docstring.params[0].arg_name == "spam"
assert docstring.params[0].type_name is None
assert docstring.params[0].description == "spam desc"
assert docstring.params[1].arg_name == "bla"
assert docstring.params[1].type_name == "int"
assert docstring.params[1].description == "bla desc"
assert docstring.params[2].arg_name == "yay"
assert docstring.params[2].type_name == "str"
assert docstring.params[2].description == ""
assert len(docstring.raises) == 1
assert docstring.raises[0].type_name == "ValueError"
assert docstring.raises[0].description == "exc desc"
assert docstring.returns is not None
assert docstring.returns.type_name == "tuple"
assert docstring.returns.description == "ret desc"
assert docstring.many_returns is not None
assert len(docstring.many_returns) == 1
assert docstring.many_returns[0] == docstring.returns
def test_google() -> None:
"""Test Google-style parser autodetection."""
docstring = parse(
"""Short description
Long description
Causing people to indent:
A lot sometimes
Args:
spam: spam desc
bla (int): bla desc
yay (str):
Raises:
ValueError: exc desc
Returns:
tuple: ret desc
"""
)
assert docstring.style == DocstringStyle.GOOGLE
assert docstring.short_description == "Short description"
assert docstring.long_description == (
"Long description\n\n"
"Causing people to indent:\n\n"
" A lot sometimes"
)
assert len(docstring.params) == 3
assert docstring.params[0].arg_name == "spam"
assert docstring.params[0].type_name is None
assert docstring.params[0].description == "spam desc"
assert docstring.params[1].arg_name == "bla"
assert docstring.params[1].type_name == "int"
assert docstring.params[1].description == "bla desc"
assert docstring.params[2].arg_name == "yay"
assert docstring.params[2].type_name == "str"
assert docstring.params[2].description == ""
assert len(docstring.raises) == 1
assert docstring.raises[0].type_name == "ValueError"
assert docstring.raises[0].description == "exc desc"
assert docstring.returns is not None
assert docstring.returns.type_name == "tuple"
assert docstring.returns.description == "ret desc"
assert docstring.many_returns is not None
assert len(docstring.many_returns) == 1
assert docstring.many_returns[0] == docstring.returns
def test_numpydoc() -> None:
"""Test numpydoc-style parser autodetection."""
docstring = parse(
"""Short description
Long description
Causing people to indent:
A lot sometimes
Parameters
----------
spam
spam desc
bla : int
bla desc
yay : str
Raises
------
ValueError
exc desc
Other Parameters
----------------
this_guy : int, optional
you know him
Returns
-------
tuple
ret desc
See Also
--------
multiple lines...
something else?
Warnings
--------
multiple lines...
none of this is real!
"""
)
assert docstring.style == DocstringStyle.NUMPYDOC
assert docstring.short_description == "Short description"
assert docstring.long_description == (
"Long description\n\n"
"Causing people to indent:\n\n"
" A lot sometimes"
)
assert len(docstring.params) == 4
assert docstring.params[0].arg_name == "spam"
assert docstring.params[0].type_name is None
assert docstring.params[0].description == "spam desc"
assert docstring.params[1].arg_name == "bla"
assert docstring.params[1].type_name == "int"
assert docstring.params[1].description == "bla desc"
assert docstring.params[2].arg_name == "yay"
assert docstring.params[2].type_name == "str"
assert docstring.params[2].description is None
assert docstring.params[3].arg_name == "this_guy"
assert docstring.params[3].type_name == "int"
assert docstring.params[3].is_optional
assert docstring.params[3].description == "you know him"
assert len(docstring.raises) == 1
assert docstring.raises[0].type_name == "ValueError"
assert docstring.raises[0].description == "exc desc"
assert docstring.returns is not None
assert docstring.returns.type_name == "tuple"
assert docstring.returns.description == "ret desc"
assert docstring.many_returns is not None
assert len(docstring.many_returns) == 1
assert docstring.many_returns[0] == docstring.returns
def test_autodetection_error_detection() -> None:
"""Test autodection for the case where one of the parsers throws an error
and another one succeeds.
"""
source = """
Does something useless
:param 3 + 3 a: a param
"""
with pytest.raises(ParseError):
# assert that one of the parsers does raise
parse(source, DocstringStyle.REST)
# assert that autodetection still works
docstring = parse(source)
assert docstring
assert docstring.style == DocstringStyle.GOOGLE