def test_find_definition_same_basename(workspace, libspec_manager, cases, tmpdir): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition workspace.set_root("case_same_basename", libspec_manager=libspec_manager) doc1 = workspace.get_doc("tasks1.robot") doc2 = workspace.get_doc("directory/tasks2.robot") completion_context = CompletionContext(doc1, workspace=workspace.ws) def1 = find_definition(completion_context) completion_context = CompletionContext(doc2, workspace=workspace.ws) def2 = find_definition(completion_context) assert len(def1) == 1 assert len(def2) == 1 assert (def1[0].source.replace( "\\", "/").endswith("case_same_basename/my_library.py")) assert (def2[0].source.replace( "\\", "/").endswith("case_same_basename/directory/my_library.py")) found = [ lib_info for lib_info in libspec_manager.iter_lib_info() if lib_info.library_doc.name == "my_library" ] assert len(found) == 2
def test_find_definition_should_not_resolve_link_in_resource( workspace, libspec_manager, cases, tmpdir): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition target_original, target_link = create_case_as_link(cases, tmpdir, "case4") workspace.set_absolute_path_root(target_link, libspec_manager=libspec_manager) doc = workspace.get_doc("case4.robot") doc.source = """*** Settings *** Library String Library Collections Resource case4resource.txt *** Test Cases *** Test case4resource3.Yet Another Equal Redefined""" completion_context = CompletionContext(doc, workspace=workspace.ws) definitions = find_definition(completion_context) assert len(definitions) == 1 definition = next(iter(definitions)) assert definition.source.endswith("case4resource3.robot") assert definition.lineno == 1 check_using_link_version(definition.source, target_link, target_original)
def test_find_definition_variables_dict(workspace, libspec_manager, data_regression): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition workspace.set_root("case4", libspec_manager=libspec_manager) doc = workspace.get_doc("case4.robot") doc.source = """ *** Variables *** @{SOME LIST} foo bar baz &{SOME DICT} string=cat int=${1} list=@{SOME LIST} *** Test Cases *** Log Global Constants Log ${SOME LIST} info Log ${SOME DICT} info""" line, col = doc.get_last_line_col() col -= len("CT} info") completion_context = CompletionContext(doc, workspace=workspace.ws, line=line, col=col) data_regression.check( _definitions_to_data_regression(find_definition(completion_context)))
def test_find_definition_keyword_resource_in_pythonpath( workspace, libspec_manager, cases): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition from robotframework_ls.robot_config import RobotConfig from robotframework_ls.impl.robot_lsp_constants import OPTION_ROBOT_PYTHONPATH case2_path = cases.get_path("case2") config = RobotConfig() config.update({"robot": {"pythonpath": [case2_path]}}) assert config.get_setting(OPTION_ROBOT_PYTHONPATH, list, []) == [case2_path] libspec_manager.config = config workspace.set_root("case1", libspec_manager=libspec_manager) doc = workspace.get_doc("case1.robot") doc.source = """ *** Settings *** Resource case2.robot""" completion_context = CompletionContext(doc, workspace=workspace.ws, config=config) definitions = find_definition(completion_context) assert len(definitions) == 1, "Failed to find definition" definition = next(iter(definitions)) assert definition.source.endswith("case2.robot") assert definition.lineno == 0
def test_find_definition_in_package_init(workspace, libspec_manager): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition workspace.set_root("case_package_lib", libspec_manager=libspec_manager) doc1 = workspace.get_doc("case_package.robot") completion_context = CompletionContext(doc1, workspace=workspace.ws) def1 = find_definition(completion_context) assert len(def1) == 1 assert def1[0].source.endswith("__init__.py") assert os.path.basename(os.path.dirname(def1[0].source)) == "package"
def test_find_definition_builtin(workspace, libspec_manager): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition workspace.set_root("case1", libspec_manager=libspec_manager) doc = workspace.get_doc("case1.robot") doc.source = doc.source + "\n Should Be Empty" completion_context = CompletionContext(doc, workspace=workspace.ws) definitions = find_definition(completion_context) assert len(definitions) == 1 definition = next(iter(definitions)) assert definition.source.endswith("BuiltIn.py") assert definition.lineno > 0
def test_find_definition_keyword_settings_fixture(workspace, libspec_manager): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition workspace.set_root("case2", libspec_manager=libspec_manager) doc = workspace.get_doc("case2.robot") doc.source = doc.source + "\n*** Keywords ***\nTeardown my_Equal redefined" completion_context = CompletionContext(doc, workspace=workspace.ws) definitions = find_definition(completion_context) assert len(definitions) == 1 definition = next(iter(definitions)) assert definition.source.endswith("case2.robot") assert definition.lineno == 1
def test_find_definition_library_itself(workspace, libspec_manager): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition workspace.set_root("case4", libspec_manager=libspec_manager) doc = workspace.get_doc("case4.robot") doc.source = """*** Settings *** Library Collections""" completion_context = CompletionContext(doc, workspace=workspace.ws) definitions = find_definition(completion_context) assert len(definitions) == 1 definition = next(iter(definitions)) assert definition.source.endswith("Collections.py")
def test_find_definition_keyword(workspace, libspec_manager): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition workspace.set_root("case2", libspec_manager=libspec_manager) doc = workspace.get_doc("case2.robot") for i in range(4, 10): completion_context = CompletionContext( doc, workspace=workspace.ws, line=7, col=i ) definitions = find_definition(completion_context) assert len(definitions) == 1, "Failed to find definitions for col: %s" % (i,) definition = next(iter(definitions)) assert definition.source.endswith("case2.robot") assert definition.lineno == 1
def test_variables_completions_recursive(workspace, libspec_manager, data_regression): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition workspace.set_root("case5", libspec_manager=libspec_manager) doc = workspace.get_doc("case5.robot") doc.source += """ *** Test Cases *** List Variable Log ${VAR2}""" completion_context = CompletionContext(doc, workspace=workspace.ws) data_regression.check( _definitions_to_data_regression(find_definition(completion_context)))
def test_find_definition_variables_file(workspace, libspec_manager): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition workspace.set_root("case_vars_file", libspec_manager=libspec_manager) doc = workspace.get_doc("case_vars_file.robot") line_contents = "Variables ./robotvars.py" line = doc.find_line_with_contents(line_contents) completion_context = CompletionContext(doc, workspace=workspace.ws, line=line, col=len(line_contents) - 1) definitions = find_definition(completion_context) assert len(definitions) == 1 definition = next(iter(definitions)) assert definition.source.endswith("robotvars.py")
def test_find_definition_variables_arguments(workspace, libspec_manager, data_regression): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition workspace.set_root("case4", libspec_manager=libspec_manager) doc = workspace.get_doc("case4.robot") doc.source = """ *** Keywords *** This is the Test [Arguments] ${arg} ${arg2} Log To Console ${arg2}""" completion_context = CompletionContext(doc, workspace=workspace.ws) data_regression.check( _definitions_to_data_regression(find_definition(completion_context)))
def test_find_definition_variables_in_section(workspace, libspec_manager, data_regression): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition workspace.set_root("case4", libspec_manager=libspec_manager) doc = workspace.get_doc("case4.robot") doc.source = """ *** Variables *** ${SOME_DIR} c:/foo/bar *** Settings *** Resource ${some dir}""" completion_context = CompletionContext(doc, workspace=workspace.ws) data_regression.check( _definitions_to_data_regression(find_definition(completion_context)))
def test_find_definition_variables_assign(workspace, libspec_manager, data_regression): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition workspace.set_root("case4", libspec_manager=libspec_manager) doc = workspace.get_doc("case4.robot") doc.source += """ *** Test Cases *** Returning ${variable_x} = ${variable_y} @{variable_z}= Get X an argument Log We got ${variable_x}""" completion_context = CompletionContext(doc, workspace=workspace.ws) data_regression.check( _definitions_to_data_regression(find_definition(completion_context)))
def test_find_definition_should_not_resolve_link_in_curr_file( workspace, libspec_manager, tmpdir, cases ): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition target_original, target_link = create_case_as_link(cases, tmpdir, "case2") workspace.set_absolute_path_root(target_link, libspec_manager=libspec_manager) doc = workspace.get_doc("case2.robot") col = 4 completion_context = CompletionContext(doc, workspace=workspace.ws, line=7, col=4) definitions = find_definition(completion_context) assert len(definitions) == 1, "Failed to find definitions for col: %s" % (col,) definition = next(iter(definitions)) assert definition.source.endswith("case2.robot") assert definition.lineno == 1 check_using_link_version(definition.source, target_link, target_original)
def test_find_definition_variables_dict_access(workspace, libspec_manager, data_regression): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition workspace.set_root("case4", libspec_manager=libspec_manager) doc = workspace.get_doc("case4.robot") doc.source = """ *** Variables *** &{Person} First name=John Last name=Smith *** Test Cases *** Dictionary Variable Log to Console ${Person}[First]""" completion_context = CompletionContext(doc, workspace=workspace.ws) data_regression.check( _definitions_to_data_regression(find_definition(completion_context)))
def test_find_definition_variable_from_variables_file(workspace, libspec_manager): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition workspace.set_root("case_vars_file", libspec_manager=libspec_manager) doc = workspace.get_doc("case_vars_file.robot") line_contents = " Log ${VARIABLE_1} console=True" line = doc.find_line_with_contents(line_contents) completion_context = CompletionContext(doc, workspace=workspace.ws, line=line, col=18) definitions = find_definition(completion_context) assert len(definitions) == 1 definition = next(iter(definitions)) assert definition.source.endswith("robotvars.py") assert definition.lineno == 0 assert definition.col_offset == 0
def _threaded_find_definition(self, doc_uri, line, col, monitor) -> Optional[list]: from robotframework_ls.impl.find_definition import find_definition import os.path from robocorp_ls_core.lsp import Location, Range from robocorp_ls_core import uris completion_context = self._create_completion_context( doc_uri, line, col, monitor ) if completion_context is None: return None definitions = find_definition(completion_context) ret = [] for definition in definitions: if not definition.source: log.info("Found definition with empty source (%s).", definition) continue if not os.path.exists(definition.source): log.info( "Found definition: %s (but source does not exist).", definition ) continue lineno = definition.lineno if lineno is None or lineno < 0: lineno = 0 end_lineno = definition.end_lineno if end_lineno is None or end_lineno < 0: end_lineno = 0 col_offset = definition.col_offset end_col_offset = definition.end_col_offset ret.append( Location( uris.from_fs_path(definition.source), Range((lineno, col_offset), (end_lineno, end_col_offset)), ).to_dict() ) return ret
def test_find_definition_library_prefix(workspace, libspec_manager): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition workspace.set_root("case4", libspec_manager=libspec_manager) doc = workspace.get_doc("case4.robot") doc.source = """*** Settings *** Library String Library Collections Resource case4resource.txt *** Test Cases *** Test case4resource3.Yet Another Equal Redefined""" completion_context = CompletionContext(doc, workspace=workspace.ws) definitions = find_definition(completion_context) assert len(definitions) == 1 definition = next(iter(definitions)) assert definition.source.endswith("case4resource3.robot") assert definition.lineno == 1
def test_find_definition_keyword_test_template_fixture(workspace, libspec_manager): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition workspace.set_root("case2", libspec_manager=libspec_manager) doc = workspace.get_doc("case2.robot") doc.source = """ *** Keywords *** My Equal Redefined [Arguments] ${arg1} ${arg2} Should Be Equal ${arg1} ${arg2} *** Settings *** Test Template my equal_redefined""" completion_context = CompletionContext(doc, workspace=workspace.ws) definitions = find_definition(completion_context) assert len(definitions) == 1 definition = next(iter(definitions)) assert definition.source.endswith("case2.robot") assert definition.lineno == 2
def test_find_definition_keyword_prefix2(workspace, libspec_manager): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition workspace.set_root("case2", libspec_manager=libspec_manager) doc = workspace.get_doc("case2.robot") doc.source = """ *** Keywords *** I check ${cmd} Log ${cmd} *** Test Cases *** Test 1 when icheck ls""" completion_context = CompletionContext(doc, workspace=workspace.ws) definitions = find_definition(completion_context) assert len(definitions) == 1 definition = next(iter(definitions)) assert definition.source.endswith("case2.robot") assert definition.lineno == 2
def test_find_definition_in_pythonpath(workspace, libspec_manager, cases): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition from robotframework_ls.robot_config import RobotConfig from robotframework_ls.impl.robot_lsp_constants import OPTION_ROBOT_PYTHONPATH add_to_pythonpath = cases.get_path("case_search_pythonpath/libraries") config = RobotConfig() config.update({"robot": {"pythonpath": [add_to_pythonpath]}}) assert config.get_setting(OPTION_ROBOT_PYTHONPATH, list, []) == [add_to_pythonpath] libspec_manager.config = config workspace.set_root("case_search_pythonpath", libspec_manager=libspec_manager) doc1 = workspace.get_doc("case_search_pythonpath.robot") completion_context = CompletionContext(doc1, workspace=workspace.ws, config=config) def1 = find_definition(completion_context) assert len(def1) == 1 assert def1[0].source.endswith("lib_in_pythonpath.py")
def test_find_definition_library_prefix_with_name(workspace, libspec_manager): from robotframework_ls.impl.completion_context import CompletionContext from robotframework_ls.impl.find_definition import find_definition workspace.set_root("case4", libspec_manager=libspec_manager) doc = workspace.get_doc("case4.robot") doc.source = """*** Settings *** Library Collections WITH NAME Col1 *** Test Cases *** Test Col1.Append To List ${list} 3""" line, col = doc.get_last_line_col() col -= len(" List ${list} 3") completion_context = CompletionContext( doc, workspace=workspace.ws, line=line, col=col ) definitions = find_definition(completion_context) assert len(definitions) == 1 definition = next(iter(definitions)) assert definition.source.endswith("Collections.py") assert definition.lineno > 0