diff --git a/unittests/test_xml_converter.py b/unittests/test_xml_converter.py index e1e0b2e14b49015e1446773ea2854f14504a5087..62c44c19944b9219cde085a58b7740c6e321ca2d 100644 --- a/unittests/test_xml_converter.py +++ b/unittests/test_xml_converter.py @@ -239,10 +239,10 @@ def test_namespace_xml(converter_registry): xml_text = """ <root xmlns="default-namespace" xmlns:test="alternative-namespace"> - <node1> + <node1 active="true"> Bla </node1> - <node1> + <node1 active="true" size="45"> text <node2 xmlns="sub-namespace"> <node3> @@ -256,6 +256,7 @@ def test_namespace_xml(converter_registry): </root> """ + # Test unsupported xpath (containing text()): converter = XMLTagConverter(yaml.safe_load(""" type: XMLTag match_tag: "{default-namespace}root" @@ -270,6 +271,7 @@ default_namespace: default with pytest.raises(RuntimeError, match="Only standard xml nodes.*"): converter.create_children(GeneralStore(), tag) + # Test complex xml using namespaces and text nodes: converter = XMLTagConverter(yaml.safe_load(""" type: XMLTag match_tag: "{default-namespace}root" @@ -285,3 +287,36 @@ tags_as_children: false assert children[0].value.strip() == "Bla" assert children[1].name == "{default-namespace}node1[2]/text()" assert children[1].value.strip() == "text" + + # Check child generation of attributes: + converter = XMLTagConverter(yaml.safe_load(""" +type: XMLTag +match_tag: "{default-namespace}root" +xpath: "default:node1" +default_namespace: default +attribs_as_children: true +text_as_children: false +tags_as_children: false +"""), "TestXMLTagConverter", converter_registry) + children = converter.create_children(GeneralStore(), tag) + + assert len(children) == 3 + assert children[0].name == "{default-namespace}node1[1]@active" + assert children[0].value.strip() == "true" + assert children[1].name == "{default-namespace}node1[2]@active" + assert children[1].value.strip() == "true" + assert children[2].name == "{default-namespace}node1[2]@size" + assert children[2].value.strip() == "45" + + # Test setting nsmap entries: + converter = XMLTagConverter(yaml.safe_load(""" +type: XMLTag +match_tag: "{default-namespace}root" +xpath: "//s:node2" +default_namespace: default +nsmap: + s: sub-namespace +"""), "TestXMLTagConverter", converter_registry) + children = converter.create_children(GeneralStore(), tag) + assert len(children) == 1 + assert children[0].name == "{default-namespace}node1[2]/{sub-namespace}node2"