--- /dev/null
+#!/usr/bin/env python\r
+from __future__ import with_statement\r
+#-------------------------------------------------------------------------------\r
+import unittest\r
+from xml.etree.ElementTree import fromstring\r
+#-------------------------------------------------------------------------------\r
+from xmlbuilder import XMLBuilder\r
+#-------------------------------------------------------------------------------\r
+def xmlStructureEqual(xml1,xml2):\r
+ tree1 = fromstring(xml1)\r
+ tree2 = fromstring(xml2)\r
+ return _xmlStructureEqual(tree1,tree2)\r
+#-------------------------------------------------------------------------------\r
+def _xmlStructureEqual(tree1,tree2):\r
+ if tree1.tag != tree2.tag:\r
+ return False\r
+ attr1 = list(tree1.attrib.items())\r
+ attr1.sort()\r
+ attr2 = list(tree2.attrib.items())\r
+ attr2.sort()\r
+ if attr1 != attr2:\r
+ return False\r
+ return tree1.getchildren() == tree2.getchildren()\r
+#-------------------------------------------------------------------------------\r
+result1 = \\r
+"""\r
+<root>\r
+ <array />\r
+ <array len="10">\r
+ <el val="0" />\r
+ <el val="1">xyz</el>\r
+ <el val="2">abc</el>\r
+ <el val="3" />\r
+ <el val="4" />\r
+ <el val="5" />\r
+ <sup-el val="23">test </sup-el>\r
+ </array>\r
+</root>\r
+""".strip()\r
+#-------------------------------------------------------------------------------\r
+class TestXMLBuilder(unittest.TestCase):\r
+ def testShift(self):\r
+ xml = (XMLBuilder() << ('root',))\r
+ self.assertEqual(str(xml),"<root />")\r
+ \r
+ xml = XMLBuilder()\r
+ xml << ('root',"some text")\r
+ self.assertEqual(str(xml),"<root>some text</root>")\r
+ \r
+ xml = XMLBuilder()\r
+ xml << ('root',{'x':1,'y':'2'})\r
+ self.assert_(xmlStructureEqual(str(xml),"<root x='1' y='2'>some text</root>"))\r
+ \r
+ xml = XMLBuilder()\r
+ xml << ('root',{'x':1,'y':'2'})\r
+ self.assert_(xmlStructureEqual(str(xml),"<root x='1' y='2'></root>"))\r
+\r
+ xml = XMLBuilder()\r
+ xml << ('root',{'x':1,'y':'2'})\r
+ self.assert_(not xmlStructureEqual(str(xml),"<root x='2' y='2'></root>"))\r
+\r
+ \r
+ xml = XMLBuilder()\r
+ xml << ('root',"gonduras.ua",{'x':1,'y':'2'})\r
+ self.assert_(xmlStructureEqual(str(xml),"<root x='1' y='2'>gonduras.ua</root>"))\r
+ \r
+ xml = XMLBuilder()\r
+ xml << ('root',"gonduras.ua",{'x':1,'y':'2'})\r
+ self.assert_(xmlStructureEqual(str(xml),"<root x='1' y='2'>gonduras.com</root>"))\r
+ #---------------------------------------------------------------------------\r
+ def testWith(self):\r
+ xml = XMLBuilder()\r
+ with xml.root(lenght = 12):\r
+ pass\r
+ self.assertEqual(str(xml),'<root lenght="12" />')\r
+ \r
+ xml = XMLBuilder()\r
+ with xml.root():\r
+ xml << "text1" << "text2" << ('some_node',)\r
+ self.assertEqual(str(xml),"<root>text1text2<some_node /></root>")\r
+ #---------------------------------------------------------------------------\r
+ def testFormat(self):\r
+ x = XMLBuilder('utf-8',format = True)\r
+ with x.root():\r
+ x << ('array',)\r
+ with x.array(len = 10):\r
+ with x.el(val = 0):\r
+ pass\r
+ with x.el('xyz',val = 1):\r
+ pass\r
+ x << ("el","abc",{'val':2}) << ('el',dict(val=3))\r
+ x << ('el',dict(val=4)) << ('el',dict(val='5'))\r
+ with x('sup-el',val = 23):\r
+ x << "test "\r
+ self.assertEqual(str(x),result1)\r
+#-------------------------------------------------------------------------------\r
+if __name__ == '__main__':\r
+ unittest.main()\r
+#-------------------------------------------------------------------------------\r