Extract managed form elements from XML
This commit is contained in:
@@ -983,7 +983,9 @@ def _xml_edge_kind(kind: NodeKind) -> EdgeKind:
|
||||
return EdgeKind.HAS_TABULAR_SECTION
|
||||
if kind == NodeKind.ROLE:
|
||||
return EdgeKind.HAS_ROLE
|
||||
return EdgeKind.HAS_ELEMENT
|
||||
if kind == NodeKind.FORM_ELEMENT:
|
||||
return EdgeKind.HAS_ELEMENT
|
||||
return EdgeKind.CONTAINS
|
||||
|
||||
|
||||
def _find_xml_parent(parents: dict[str, SemanticNode], qualified_name: str) -> SemanticNode | None:
|
||||
|
||||
@@ -346,6 +346,33 @@ def test_index_project_links_form_command_to_handler(tmp_path: Path):
|
||||
assert any(edge.kind == EdgeKind.HANDLES for edge in snapshot.edges)
|
||||
|
||||
|
||||
def test_index_project_extracts_managed_form_items_without_layouts(tmp_path: Path):
|
||||
xml = tmp_path / "form.xml"
|
||||
xml.write_text(
|
||||
"""
|
||||
<Form name="ФормаДокумента" qualifiedName="Документ.Заказ.ФормаДокумента">
|
||||
<items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="form:FormGroup" name="Основное">
|
||||
<caption>Основное</caption>
|
||||
<items xsi:type="form:FormField" name="Номер">
|
||||
<caption>Номер</caption>
|
||||
<dataPath>Объект.Номер</dataPath>
|
||||
</items>
|
||||
</items>
|
||||
<Layout name="ПечатнаяФорма" qualifiedName="Документ.Заказ.ФормаДокумента.ПечатнаяФорма" />
|
||||
</Form>
|
||||
""",
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
snapshot = index_project(tmp_path, project_id="ui-form-items")
|
||||
|
||||
form = form_semantics(snapshot)[0]
|
||||
assert [element.name for element in form.elements] == ["Основное", "Номер"]
|
||||
assert all(element.kind == NodeKind.FORM_ELEMENT for element in form.elements)
|
||||
assert form.elements[1].attributes["dataPath"] == "Объект.Номер"
|
||||
assert not any(element.name == "ПечатнаяФорма" for element in form.elements)
|
||||
|
||||
|
||||
def test_index_project_links_form_events_to_handlers(tmp_path: Path):
|
||||
xml = tmp_path / "form.xml"
|
||||
xml.write_text(
|
||||
|
||||
Reference in New Issue
Block a user