def test_get_signature(): # noinspection PyUnusedLocal def f(a, b): assert False # pragma: no cover # noinspection PyUnusedLocal def f2(b, a): assert False # pragma: no cover assert get_signature(lambda a, b: None) == get_signature( f2) == get_signature(f) == 'a,b||' # noinspection PyUnresolvedReferences assert f.__tri_declarative_signature == 'a,b||'
def test_early_return_from_get_signature(): # noinspection PyUnusedLocal def foo(a, b, c): assert False # pragma: no cover object.__setattr__(foo, '__tri_declarative_signature', 'foobar') assert get_signature(foo) == 'foobar'
def test_get_signature_on_class(): class Foo: # noinspection PyUnusedLocal def __init__(self, a, b): assert False # pragma: no cover assert 'a,b,self||' == get_signature(Foo) # noinspection PyUnresolvedReferences assert 'a,b,self||' == Foo.__tri_declarative_signature
def test_get_signature_description(): assert get_signature(lambda a, b: None) == 'a,b||' assert get_signature(lambda a, b, c, d=None, e=None: None) == 'a,b,c|d,e|' assert get_signature(lambda d, c, b=None, a=None: None) == 'c,d|a,b|' assert get_signature(lambda a, b, c=None, d=None, **_: None) == 'a,b|c,d|*' assert get_signature(lambda d, c, b=None, a=None, **_: None) == 'c,d|a,b|*' assert get_signature(lambda **_: None) == '||*'
def test_get_signature_varargs(): assert get_signature(lambda a, b, **c: None) == "a,b||*"
def test_get_signature_fails_on_native(): # isinstance will return False for a native function. A string will also return False. f = 'this is not a function' assert get_signature(f) is None
def test_get_signature_on_namespace_does_not_modify_its_contents(): foo = Namespace() get_signature(foo) assert str(foo) == 'Namespace()'