import builtins import pytest from xonsh.completers.python import python_signature_complete @pytest.fixture(autouse=True) def xonsh_execer_autouse(xonsh_builtins, xonsh_execer): return xonsh_execer def foo(x, y, z): pass def bar(wakka='wow', jawaka='mom'): pass def baz(sonata, artica=True): pass def always_true(x, y): return True BASE_CTX = {'foo': foo, 'bar': bar, 'baz': baz} FOO_ARGS = {'x=', 'y=', 'z='} BAR_ARGS = {'wakka=', 'jawaka='} BAZ_ARGS = {'sonata=', 'artica='} @pytest.mark.parametrize('line, end, exp', [ ('foo(', 4, FOO_ARGS), # I have no idea why this one needs to be first ('foo()', 3, set()), ('foo()', 4, FOO_ARGS), ('foo()', 5, set()), ('foo(x, ', 6, FOO_ARGS), ('foo(x, )', 6, FOO_ARGS), ('bar()', 4, BAR_ARGS), ('baz()', 4, BAZ_ARGS), ('foo(bar(', 8, BAR_ARGS), ('foo(bar()', 9, FOO_ARGS), ('foo(bar())', 4, FOO_ARGS), ]) def test_complete_python_signatures(line, end, exp): ctx = dict(BASE_CTX) obs = python_signature_complete('', line, end, ctx, always_true) assert exp == obs