def test_find_tests_section_without_section_returns_none(self) -> None: document = TestUtils.to_document("<tool></tool>") tool = GalaxyToolXmlDocument(document) actual = tool.find_element("notexistent") assert actual is None
def test_get_element_content_range_of_element_returns_expected(self, source: str, element: str, expected: Range) -> None: document = TestUtils.to_document(source) tool = GalaxyToolXmlDocument(document) node = tool.find_element(element) actual = tool.get_element_content_range(node) assert actual == expected
def test_get_element_content_range_of_unknown_element_returns_none(self) -> None: document = TestUtils.to_document("<tool><tests></tests></tool>") tool = GalaxyToolXmlDocument(document) node = tool.find_element("unknown") actual = tool.get_element_content_range(node) assert actual is None
def test_find_tests_section_returns_expected(self) -> None: document = TestUtils.to_document("<tool><tests></tests></tool>") tool = GalaxyToolXmlDocument(document) actual = tool.find_element("tests") assert actual assert actual.name == "tests"
def test_get_position_after_element_returns_expected_position( self, source: str, element_name: str, expected_position: Position ) -> None: document = TestUtils.to_document(source) tool = GalaxyToolXmlDocument(document) element = tool.find_element(element_name, maxlevel=4) assert element is not None actual_position = tool.get_position_after(element) assert actual_position == expected_position
def _find_macros_insert_position(self, tool: GalaxyToolXmlDocument) -> Position: """Returns the position inside the document where the macros section can be inserted. Returns: Range: The position where the macros section can be inserted in the document. """ section = tool.find_element(XREF) if section: return tool.get_position_after(section) section = tool.find_element(DESCRIPTION) if section: return tool.get_position_after(section) root = tool.find_element(TOOL) content_range = tool.get_content_range(root) if content_range: return content_range.start return Position(line=0, character=0)
def _edit_create_import_macros_section(self, tool: GalaxyToolXmlDocument, macros_file_name: str) -> TextEdit: """Returns the TextEdit operation that will add a macros file <import> definition to the existing <macros> section of a tool wrapper or also create the <macros> section if it doesn't exists.""" macros_element = tool.find_element(MACROS) if macros_element: insert_position = tool.get_position_before_first_child( macros_element) macro_xml = f"<import>{macros_file_name}</import>" else: insert_position = self._find_macros_insert_position(tool) macro_xml = f"<macros>\n<import>{macros_file_name}</import>\n</macros>" insert_range = Range(start=insert_position, end=insert_position) final_macro_xml = self._adapt_format(tool.xml_document, insert_range, macro_xml) return TextEdit( range=insert_range, new_text=final_macro_xml, )