def test_Function_params(self): mod = pdoc.Module(pdoc) func = pdoc.Function('f', mod, lambda a, _a, _b=None: None) self.assertEqual(func.params(), ['a', '_a']) func = pdoc.Function( 'f', mod, lambda _ok, a, _a, *args, _b=None, c=None, _d=None: None) self.assertEqual(func.params(), ['_ok', 'a', '_a', '*args', 'c=None']) func = pdoc.Function('f', mod, lambda a, b, *, _c=1: None) self.assertEqual(func.params(), ['a', 'b']) func = pdoc.Function('f', mod, lambda a, *, b, c: None) self.assertEqual(func.params(), ['a', '*', 'b', 'c']) func = pdoc.Function('f', mod, lambda a=os.environ, b=sys.stdout: None) self.assertEqual(func.params(), ['a=os.environ', 'b=sys.stdout']) class Foo(enum.Enum): a, b = 1, 2 func = pdoc.Function('f', mod, lambda a=Foo.a: None) self.assertEqual(func.params(), ['a=Foo.a']) func = pdoc.Function('f', mod, lambda a=object(): None) self.assertEqual(func.params(), ['a=<object object>']) func = pdoc.Function('f', mod, lambda a=object(): None) self.assertEqual(func.params(link=lambda x: ''), ['a=<object object>']) # typed def f(a: int, *b, c: typing.List[pdoc.Doc] = []): pass func = pdoc.Function('f', mod, f) self.assertEqual(func.params(), ['a', '*b', "c=[]"]) self.assertEqual(func.params(annotate=True), [ 'a:\N{NBSP}int', '*b', "c:\N{NBSP}List[pdoc.Doc]\N{NBSP}=\N{NBSP}[]" ]) # typed, linked def link(dobj): return '<a href="{}">{}</a>'.format(dobj.url(relative_to=mod), dobj.qualname) self.assertEqual(func.params(annotate=True, link=link), [ 'a:\N{NBSP}int', '*b', "c:\N{NBSP}List[<a href=\"#pdoc.Doc\">Doc</a>]\N{NBSP}=\N{NBSP}[]" ]) def bug130_str_annotation(a: "str"): return self.assertEqual( pdoc.Function('bug130', mod, bug130_str_annotation).params(annotate=True), ['a:\N{NBSP}str'])
def test_Function_private_params(self): func = pdoc.Function('f', pdoc.Module(pdoc), lambda a, _a, _b=None: None) self.assertEqual(func.params(), ['a', '_a']) func = pdoc.Function('f', pdoc.Module(pdoc), lambda _ok, a, _a, *args, _b=None, c=None, _d=None: None) self.assertEqual(func.params(), ['_ok', 'a', '_a', '*args', 'c=None']) func = pdoc.Function('f', pdoc.Module(pdoc), lambda a, b, *, _c=1: None) self.assertEqual(func.params(), ['a', 'b'])
def test_Function_return_annotation(self): import typing def f() -> typing.List[typing.Union[str, pdoc.Doc]]: pass func = pdoc.Function('f', pdoc.Module(pdoc), f) self.assertEqual(func.return_annotation(), 'List[Union[str,\N{NBSP}pdoc.Doc]]')
def test_to_html_refname_warning(self): mod = pdoc.Module(EXAMPLE_MODULE) def f(): """Reference to some `example_pkg.nonexisting` object""" mod.doc['__f'] = pdoc.Function('__f', mod, f) with self.assertWarns(ReferenceWarning) as cm: mod.html() del mod.doc['__f'] self.assertIn('example_pkg.nonexisting', cm.warning.args[0])
def test_Function_params(self): mod = pdoc.Module(pdoc) func = pdoc.Function('f', mod, lambda a, _a, _b=None: None) self.assertEqual(func.params(), ['a', '_a']) func = pdoc.Function( 'f', mod, lambda _ok, a, _a, *args, _b=None, c=None, _d=None: None) self.assertEqual(func.params(), ['_ok', 'a', '_a', '*args', 'c=None']) func = pdoc.Function('f', mod, lambda a, b, *, _c=1: None) self.assertEqual(func.params(), ['a', 'b']) func = pdoc.Function('f', mod, lambda a, *, b, c: None) self.assertEqual(func.params(), ['a', '*', 'b', 'c']) func = pdoc.Function('f', mod, lambda a=os.environ: None) self.assertEqual(func.params(), ['a=os.environ']) # typed def f(a: int, *b, c: typing.List[pdoc.Doc] = []): pass func = pdoc.Function('f', mod, f) self.assertEqual(func.params(), ['a', '*b', "c=[]"]) self.assertEqual(func.params(annotate=True), [ 'a:\N{NBSP}int', '*b', "c:\N{NBSP}List[pdoc.Doc]\N{NBSP}=\N{NBSP}[]" ]) # typed, linked def link(dobj): return '<a href="{}">{}</a>'.format(dobj.url(relative_to=mod), dobj.qualname) self.assertEqual(func.params(annotate=True, link=link), [ 'a:\N{NBSP}int', '*b', "c:\N{NBSP}List[<a href=\"#pdoc.Doc\">Doc</a>]\N{NBSP}=\N{NBSP}[]" ])