# -*- coding: utf-8 -*- """ tests.unit.xmlutil_test ~~~~~~~~~~~~~~~~~~~~ """ from __future__ import absolute_import, print_function, unicode_literals import salt.utils.xmlutil as xml # Import Salt libs from salt._compat import ElementTree as ET # Import Salt Testing libs from tests.support.unit import TestCase class XMLUtilTestCase(TestCase): """ Tests that salt.utils.xmlutil properly parses XML data and returns as a properly formatted dictionary. The default method of parsing will ignore attributes and return only the child items. The full method will include parsing attributes. """ def setUp(self): # Populate our use cases for specific XML formats. self.cases = { "a": { "xml": "data", "legacy": {"parent": "data"}, "full": "data", }, "b": { "xml": 'data', "legacy": {"parent": "data"}, "full": {"parent": "data", "value": "data"}, }, "c": { "xml": 'datadata' '', "legacy": { "child": [ "data", {"child": "data"}, {"child": None}, {"child": None}, ] }, "full": { "child": [ "data", {"child": "data", "value": "data"}, {"value": "data"}, None, ] }, }, "d": { "xml": 'data', "legacy": {"child": "data"}, "full": {"child": "data", "another": "data", "value": "data"}, }, "e": { "xml": 'data', "legacy": {"child": "data"}, "full": { "child": {"child": "data", "value": "data"}, "another": "data", "value": "data", }, }, "f": { "xml": 'data' "data", "legacy": {"child": [{"sub-child": "data"}, {"child": "data"}]}, "full": { "child": [ {"sub-child": {"value": "data", "sub-child": "data"}}, "data", ] }, }, } def test_xml_case_a(self): xmldata = ET.fromstring(self.cases["a"]["xml"]) defaultdict = xml.to_dict(xmldata) self.assertEqual(defaultdict, self.cases["a"]["legacy"]) def test_xml_case_a_legacy(self): xmldata = ET.fromstring(self.cases["a"]["xml"]) defaultdict = xml.to_dict(xmldata, False) self.assertEqual(defaultdict, self.cases["a"]["legacy"]) def test_xml_case_a_full(self): xmldata = ET.fromstring(self.cases["a"]["xml"]) defaultdict = xml.to_dict(xmldata, True) self.assertEqual(defaultdict, self.cases["a"]["full"]) def test_xml_case_b(self): xmldata = ET.fromstring(self.cases["b"]["xml"]) defaultdict = xml.to_dict(xmldata) self.assertEqual(defaultdict, self.cases["b"]["legacy"]) def test_xml_case_b_legacy(self): xmldata = ET.fromstring(self.cases["b"]["xml"]) defaultdict = xml.to_dict(xmldata, False) self.assertEqual(defaultdict, self.cases["b"]["legacy"]) def test_xml_case_b_full(self): xmldata = ET.fromstring(self.cases["b"]["xml"]) defaultdict = xml.to_dict(xmldata, True) self.assertEqual(defaultdict, self.cases["b"]["full"]) def test_xml_case_c(self): xmldata = ET.fromstring(self.cases["c"]["xml"]) defaultdict = xml.to_dict(xmldata) self.assertEqual(defaultdict, self.cases["c"]["legacy"]) def test_xml_case_c_legacy(self): xmldata = ET.fromstring(self.cases["c"]["xml"]) defaultdict = xml.to_dict(xmldata, False) self.assertEqual(defaultdict, self.cases["c"]["legacy"]) def test_xml_case_c_full(self): xmldata = ET.fromstring(self.cases["c"]["xml"]) defaultdict = xml.to_dict(xmldata, True) self.assertEqual(defaultdict, self.cases["c"]["full"]) def test_xml_case_d(self): xmldata = ET.fromstring(self.cases["d"]["xml"]) defaultdict = xml.to_dict(xmldata) self.assertEqual(defaultdict, self.cases["d"]["legacy"]) def test_xml_case_d_legacy(self): xmldata = ET.fromstring(self.cases["d"]["xml"]) defaultdict = xml.to_dict(xmldata, False) self.assertEqual(defaultdict, self.cases["d"]["legacy"]) def test_xml_case_d_full(self): xmldata = ET.fromstring(self.cases["d"]["xml"]) defaultdict = xml.to_dict(xmldata, True) self.assertEqual(defaultdict, self.cases["d"]["full"]) def test_xml_case_e(self): xmldata = ET.fromstring(self.cases["e"]["xml"]) defaultdict = xml.to_dict(xmldata) self.assertEqual(defaultdict, self.cases["e"]["legacy"]) def test_xml_case_e_legacy(self): xmldata = ET.fromstring(self.cases["e"]["xml"]) defaultdict = xml.to_dict(xmldata, False) self.assertEqual(defaultdict, self.cases["e"]["legacy"]) def test_xml_case_e_full(self): xmldata = ET.fromstring(self.cases["e"]["xml"]) defaultdict = xml.to_dict(xmldata, True) self.assertEqual(defaultdict, self.cases["e"]["full"]) def test_xml_case_f(self): xmldata = ET.fromstring(self.cases["f"]["xml"]) defaultdict = xml.to_dict(xmldata) self.assertEqual(defaultdict, self.cases["f"]["legacy"]) def test_xml_case_f_legacy(self): xmldata = ET.fromstring(self.cases["f"]["xml"]) defaultdict = xml.to_dict(xmldata, False) self.assertEqual(defaultdict, self.cases["f"]["legacy"]) def test_xml_case_f_full(self): xmldata = ET.fromstring(self.cases["f"]["xml"]) defaultdict = xml.to_dict(xmldata, True) self.assertEqual(defaultdict, self.cases["f"]["full"])