1
0
forked from VimPlug/jedi
Files
jedi-fork/test/test_inference/test_gradual/test_conversion.py
2020-12-26 11:52:47 +01:00

86 lines
2.8 KiB
Python

import os
from parso.cache import parser_cache
from test.helpers import root_dir
from jedi.api.project import Project
from jedi.inference.gradual.conversion import convert_names
def test_sqlite3_conversion(Script):
script1 = Script('import sqlite3; sqlite3.Connection')
d, = script1.infer()
assert not d.module_path
assert d.full_name == 'sqlite3.Connection'
assert convert_names([d._name], only_stubs=True)
d, = script1.infer(only_stubs=True)
assert d.is_stub()
assert d.full_name == 'sqlite3.dbapi2.Connection'
script2 = Script(path=d.module_path)
d, = script2.infer(line=d.line, column=d.column)
assert not d.is_stub()
assert d.full_name == 'sqlite3.Connection'
v, = d._name.infer()
assert v.is_compiled()
def test_conversion_of_stub_only(Script):
project = Project(os.path.join(root_dir, 'test', 'completion', 'stub_folder'))
code = 'import stub_only; stub_only.in_stub_only'
d1, = Script(code, project=project).goto()
assert d1.is_stub()
script = Script(path=d1.module_path, project=project)
d2, = script.goto(line=d1.line, column=d1.column)
assert d2.is_stub()
assert d2.module_path == d1.module_path
assert d2.line == d1.line
assert d2.column == d1.column
assert d2.name == 'in_stub_only'
def test_goto_on_file(Script):
project = Project(os.path.join(root_dir, 'test', 'completion', 'stub_folder'))
script = Script('import stub_only; stub_only.Foo', project=project)
d1, = script.goto()
v, = d1._name.infer()
foo, bar, obj = v.py__mro__()
assert foo.py__name__() == 'Foo'
assert bar.py__name__() == 'Bar'
assert obj.py__name__() == 'object'
# Make sure we go to Bar, because Foo is a bit before: `class Foo(Bar):`
script = Script(path=d1.module_path, project=project)
d2, = script.goto(line=d1.line, column=d1.column + 4)
assert d2.name == 'Bar'
def test_goto_import(Script):
code = 'from abc import ABC; ABC'
d, = Script(code).goto(only_stubs=True)
assert d.is_stub()
d, = Script(code).goto()
assert not d.is_stub()
def test_stub_get_line_code(Script):
code = 'from abc import ABC; ABC'
script = Script(code)
d, = script.goto(only_stubs=True)
# Replace \r for tests on Windows
assert d.get_line_code().replace('\r', '') == 'class ABC(metaclass=ABCMeta): ...\n'
del parser_cache[script._inference_state.latest_grammar._hashed][d.module_path]
d, = Script(path=d.module_path).goto(d.line, d.column, only_stubs=True)
assert d.is_stub()
assert d.get_line_code().replace('\r', '') == 'class ABC(metaclass=ABCMeta): ...\n'
def test_os_stat_result(Script):
d, = Script('import os; os.stat_result').goto()
assert d.is_stub()
n = d._name
# This should not be a different stub name
assert convert_names([n]) == [n]