Пример #1
0
def test_completion_on_complex_literals():
    assert api.Script('1j..').completions() == []
    _check_number('1j.', 'complex')
    _check_number('44.j.', 'complex')
    _check_number('4.0j.', 'complex')
    # No dot no completion
    assert api.Script('4j').completions() == []
Пример #2
0
def test_goto_assignments_follow_imports():
    code = dedent("""
    import inspect
    inspect.isfunction""")
    definition, = api.Script(code,
                             column=0).goto_assignments(follow_imports=True)
    assert 'inspect.py' in definition.module_path
    assert (definition.line, definition.column) == (1, 0)

    definition, = api.Script(code).goto_assignments(follow_imports=True)
    assert 'inspect.py' in definition.module_path
    assert (definition.line, definition.column) > (1, 0)

    code = '''def param(p): pass\nparam(1)'''
    start_pos = 1, len('def param(')

    script = api.Script(code, *start_pos)
    definition, = script.goto_assignments(follow_imports=True)
    assert (definition.line, definition.column) == start_pos
    assert definition.name == 'p'
    result, = definition.goto_assignments()
    assert result.name == 'p'
    result, = definition._goto_definitions()
    assert result.name == 'int'
    result, = result._goto_definitions()
    assert result.name == 'int'

    definition, = script.goto_assignments()
    assert (definition.line, definition.column) == start_pos
Пример #3
0
def test_completion_on_complex_literals():
    assert api.Script('1j..').completions() == []
    _check_number('1j.', 'complex')
    _check_number('44.j.', 'complex')
    _check_number('4.0j.', 'complex')
    # No dot no completion - I thought, but 4j is actually a literall after
    # which a keyword like or is allowed. Good times, haha!
    assert (set([c.name for c in api.Script('4j').completions()]) ==
            set(['if', 'and', 'in', 'is', 'not', 'or']))
Пример #4
0
def test_goto_assignments_on_non_name():
    assert api.Script('for').goto_assignments() == []

    assert api.Script('assert').goto_assignments() == []
    if is_py3:
        assert api.Script('True').goto_assignments() == []
    else:
        # In Python 2.7 True is still a name.
        assert api.Script('True').goto_assignments()[0].description == 'class bool'
Пример #5
0
def test_goto_assignments_follow_imports():
    code = dedent("""
    import inspect
    inspect.isfunction""")
    definition, = api.Script(code, column=0).goto_assignments(follow_imports=True)
    assert 'inspect.py' in definition.module_path
    assert definition.start_pos == (1, 0)

    definition, = api.Script(code).goto_assignments(follow_imports=True)
    assert 'inspect.py' in definition.module_path
    assert definition.start_pos > (1, 0)
Пример #6
0
def test_completion_on_hex_literals():
    assert api.Script('0x1..').completions() == []
    _check_number('0x1.', 'int')  # hexdecimal
    # Completing binary literals doesn't work if they are not actually binary
    # (invalid statements).
    assert api.Script('0b2.b').completions() == []
    _check_number('0b1.', 'int')  # binary

    _check_number('0x2e.', 'int')
    _check_number('0xE7.', 'int')
    _check_number('0xEa.', 'int')
Пример #7
0
def test_completion_on_number_literals():
    # No completions on an int literal (is a float).
    assert api.Script('1.').completions() == []

    # Multiple points after an int literal basically mean that there's a float
    # and a call after that.
    _check_number('1..')
    _check_number('1.0.')

    # power notation
    _check_number('1.e14.')
    _check_number('1.e-3.')
    _check_number('9e3.')
    assert api.Script('1.e3..').completions() == []
    assert api.Script('1.e-13..').completions() == []
Пример #8
0
def test_completion_on_hex_literals():
    assert api.Script('0x1..').completions() == []
    _check_number('0x1.', 'int')  # hexdecimal
    _check_number('0b3.', 'int')  # binary
    _check_number('0o7.', 'int')  # octal

    _check_number('0x2e.', 'int')
    _check_number('0xE7.', 'int')
    _check_number('0xEa.', 'int')
Пример #9
0
def make_definitions():
    """
    Return a list of definitions for parametrized tests.

    :rtype: [jedi.api_classes.BaseDefinition]
    """
    source = textwrap.dedent("""
    import sys

    class C:
        pass

    x = C()

    def f():
        pass

    def g():
        yield

    h = lambda: None
    """)

    definitions = []
    definitions += api.defined_names(source)

    source += textwrap.dedent("""
    variable = sys or C or x or f or g or g() or h""")
    lines = source.splitlines()
    script = api.Script(source, len(lines), len('variable'), None)
    definitions += script.goto_definitions()

    script2 = api.Script(source, 4, len('class C'), None)
    definitions += script2.usages()

    source_param = "def f(a): return a"
    script_param = api.Script(source_param, 1, len(source_param), None)
    definitions += script_param.goto_assignments()

    return definitions
Пример #10
0
def test_goto_definition_not_multiple():
    """
    There should be only one Definition result if it leads back to the same
    origin (e.g. instance method)
    """

    s = dedent('''\
            import random
            class A():
                def __init__(self, a):
                    self.a = 3

                def foo(self):
                    pass

            if random.randint(0, 1):
                a = A(2)
            else:
                a = A(1)
            a''')
    assert len(api.Script(s).goto_definitions()) == 1
Пример #11
0
def test_line_number_errors():
    """
    Script should raise a ValueError if line/column numbers are not in a
    valid range.
    """
    s = 'hello'
    # lines
    with raises(ValueError):
        api.Script(s, 2, 0)
    with raises(ValueError):
        api.Script(s, 0, 0)

    # columns
    with raises(ValueError):
        api.Script(s, 1, len(s) + 1)
    with raises(ValueError):
        api.Script(s, 1, -1)

    # ok
    api.Script(s, 1, 0)
    api.Script(s, 1, len(s))
Пример #12
0
def test_goto_assignments_on_non_name():
    assert api.Script('for').goto_assignments() == []

    assert api.Script('assert').goto_assignments() == []
    assert api.Script('True').goto_assignments() == []
Пример #13
0
def test_goto_assignments_on_non_statement():
    with raises(api.NotFoundError):
        api.Script('for').goto_assignments()

    with raises(api.NotFoundError):
        api.Script('assert').goto_assignments()
Пример #14
0
def _check_number(source, result='float'):
    completions = api.Script(source).completions()
    assert completions[0].parent().name == result
Пример #15
0
def test_usage_description():
    for u in api.Script('foo = ' '; foo').usages():
        assert u.description == 'foo'
Пример #16
0
 def get_line_code(source, line=None, **kwargs):
     return api.Script(source, line=line).completions()[0].get_line_code(**kwargs)
Пример #17
0
def test_usage_description():
    descs = [u.description for u in api.Script("foo = ''; foo").usages()]
    assert set(descs) == set(["foo = ''", 'foo'])
Пример #18
0
def test_goto_assignments_on_non_statement():
    assert api.Script('for').goto_assignments() == []

    assert api.Script('assert').goto_assignments() == []
Пример #19
0
def test_empty_script():
    assert api.Script('')
Пример #20
0
def test_goto_definitions_on_generator():
    def_, = api.Script('def x(): yield 1\ny=x()\ny').goto_definitions()
    assert def_.name == 'generator'
Пример #21
0
def test_goto_definitions_on_non_name():
    assert api.Script('import x', column=0).goto_definitions() == []
Пример #22
0
 def check(line, expected):
     script = api.Script(path=path, line=line)
     module, = script.goto_assignments()
     assert module.module_path == expected