[Lxml-checkins] r46516 - in lxml/trunk: . src/lxml/tests
scoder at codespeak.net
scoder at codespeak.net
Wed Sep 12 22:06:10 CEST 2007
Author: scoder
Date: Wed Sep 12 22:06:09 2007
New Revision: 46516
Modified:
lxml/trunk/selftest.py
lxml/trunk/selftest2.py
lxml/trunk/src/lxml/tests/test_elementtree.py
Log:
loads of test cases for QName resolving and serialisation
Modified: lxml/trunk/selftest.py
==============================================================================
--- lxml/trunk/selftest.py (original)
+++ lxml/trunk/selftest.py Wed Sep 12 22:06:09 2007
@@ -23,6 +23,7 @@
def fix_compatibility(xml_data):
xml_data = re.sub('\s*xmlns:[a-z0-9]+="http://www.w3.org/2001/XInclude"', '', xml_data)
+ xml_data = xml_data.replace(' />', '/>')
return xml_data
def serialize(elem, encoding=None):
@@ -437,65 +438,65 @@
'<html><body>text</body></html>'
"""
-## def encoding():
-## r"""
-## Test encoding issues.
+def encoding():
+ r"""
+ Test encoding issues.
-## >>> elem = ElementTree.Element("tag")
-## >>> elem.text = u"abc"
-## >>> serialize(elem)
-## '<tag>abc</tag>'
-## >>> serialize(elem, "utf-8")
-## '<tag>abc</tag>'
-## >>> serialize(elem, "us-ascii")
-## '<tag>abc</tag>'
-## >>> serialize(elem, "iso-8859-1")
-## "<?xml version='1.0' encoding='iso-8859-1'?>\n<tag>abc</tag>"
+ >>> elem = ElementTree.Element("tag")
+ >>> elem.text = u"abc"
+ >>> serialize(elem)
+ '<tag>abc</tag>'
+ >>> serialize(elem, "utf-8")
+ '<tag>abc</tag>'
+ >>> serialize(elem, "us-ascii")
+ '<tag>abc</tag>'
+ >>> serialize(elem, "ISO-8859-1")
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n<tag>abc</tag>"
-## >>> elem.text = "<&\"\'>"
-## >>> serialize(elem)
-## '<tag><&"\'></tag>'
-## >>> serialize(elem, "utf-8")
-## '<tag><&"\'></tag>'
-## >>> serialize(elem, "us-ascii") # cdata characters
-## '<tag><&"\'></tag>'
-## >>> serialize(elem, "iso-8859-1")
-## '<?xml version=\'1.0\' encoding=\'iso-8859-1\'?>\n<tag><&"\'></tag>'
+ >>> elem.text = "<&\"\'>"
+ >>> serialize(elem)
+ '<tag><&"\'></tag>'
+ >>> serialize(elem, "utf-8")
+ '<tag><&"\'></tag>'
+ >>> serialize(elem, "us-ascii") # cdata characters
+ '<tag><&"\'></tag>'
+ >>> serialize(elem, "ISO-8859-1")
+ '<?xml version=\'1.0\' encoding=\'ISO-8859-1\'?>\n<tag><&"\'></tag>'
## >>> elem.attrib["key"] = "<&\"\'>"
## >>> elem.text = None
## >>> serialize(elem)
-## '<tag key="<&"'>" />'
+## '<tag key="<&"'>"/>'
## >>> serialize(elem, "utf-8")
-## '<tag key="<&"'>" />'
+## '<tag key="<&"'>"/>'
## >>> serialize(elem, "us-ascii")
-## '<tag key="<&"'>" />'
+## '<tag key="<&"'>"/>'
## >>> serialize(elem, "iso-8859-1")
-## '<?xml version=\'1.0\' encoding=\'iso-8859-1\'?>\n<tag key="<&"'>" />'
+## '<?xml version=\'1.0\' encoding=\'iso-8859-1\'?>\n<tag key="<&"'>"/>'
-## >>> elem.text = u'\xe5\xf6\xf6<>'
-## >>> elem.attrib.clear()
-## >>> serialize(elem)
-## '<tag>åöö<></tag>'
-## >>> serialize(elem, "utf-8")
-## '<tag>\xc3\xa5\xc3\xb6\xc3\xb6<></tag>'
-## >>> serialize(elem, "us-ascii")
-## '<tag>åöö<></tag>'
-## >>> serialize(elem, "iso-8859-1")
-## "<?xml version='1.0' encoding='iso-8859-1'?>\n<tag>\xe5\xf6\xf6<></tag>"
+ >>> elem.text = u'\xe5\xf6\xf6<>'
+ >>> elem.attrib.clear()
+ >>> serialize(elem)
+ '<tag>åöö<></tag>'
+ >>> serialize(elem, "utf-8")
+ '<tag>\xc3\xa5\xc3\xb6\xc3\xb6<></tag>'
+ >>> serialize(elem, "us-ascii")
+ '<tag>åöö<></tag>'
+ >>> serialize(elem, "ISO-8859-1")
+ "<?xml version='1.0' encoding='ISO-8859-1'?>\n<tag>\xe5\xf6\xf6<></tag>"
## >>> elem.attrib["key"] = u'\xe5\xf6\xf6<>'
## >>> elem.text = None
## >>> serialize(elem)
-## '<tag key="åöö<>" />'
+## '<tag key="åöö<>"/>'
## >>> serialize(elem, "utf-8")
-## '<tag key="\xc3\xa5\xc3\xb6\xc3\xb6<>" />'
+## '<tag key="\xc3\xa5\xc3\xb6\xc3\xb6<>"/>'
## >>> serialize(elem, "us-ascii")
-## '<tag key="åöö<>" />'
-## >>> serialize(elem, "iso-8859-1")
-## '<?xml version=\'1.0\' encoding=\'iso-8859-1\'?>\n<tag key="\xe5\xf6\xf6<>" />'
+## '<tag key="åöö<>"/>'
+## >>> serialize(elem, "ISO-8859-1")
+## '<?xml version=\'1.0\' encoding=\'ISO-8859-1\'?>\n<tag key="\xe5\xf6\xf6<>"/>'
-## """
+ """
ENTITY_XML = """\
<!DOCTYPE points [
@@ -532,8 +533,6 @@
>>> elem = ElementTree.XML("<tag xml:lang='en' />")
>>> serialize(elem) # 1.1
'<tag xml:lang="en"/>'
-
-# '<tag xml:lang="en" />' # ElementTree produces an extra blank
"""
def namespace():
@@ -560,33 +559,35 @@
"""
-## def qname():
-## """
-## Test QName handling.
+def qname():
+ """
+ Test QName handling.
+
+ 1) decorated tags
-## 1) decorated tags
+ >>> elem = ElementTree.Element("{uri}tag")
+ >>> serialize(elem) # 1.1
+ '<ns0:tag xmlns:ns0="uri"/>'
+ >>> elem = ElementTree.Element(ElementTree.QName("{uri}tag"))
+ >>> serialize(elem) # 1.2
+ '<ns0:tag xmlns:ns0="uri"/>'
+ >>> elem = ElementTree.Element(ElementTree.QName("uri", "tag"))
+ >>> serialize(elem) # 1.3
+ '<ns0:tag xmlns:ns0="uri"/>'
-## >>> elem = ElementTree.Element("{uri}tag")
-## >>> serialize(elem) # 1.1
-## '<ns0:tag xmlns:ns0="uri" />'
-## >>> elem = ElementTree.Element(ElementTree.QName("{uri}tag"))
-## >>> serialize(elem) # 1.2
-## '<ns0:tag xmlns:ns0="uri" />'
-## >>> elem = ElementTree.Element(ElementTree.QName("uri", "tag"))
-## >>> serialize(elem) # 1.3
-## '<ns0:tag xmlns:ns0="uri" />'
+# ns/attribute order ...
## 2) decorated attributes
## >>> elem.clear()
## >>> elem.attrib["{uri}key"] = "value"
## >>> serialize(elem) # 2.1
-## '<ns0:tag ns0:key="value" xmlns:ns0="uri" />'
+## '<ns0:tag ns0:key="value" xmlns:ns0="uri"/>'
## >>> elem.clear()
## >>> elem.attrib[ElementTree.QName("{uri}key")] = "value"
## >>> serialize(elem) # 2.2
-## '<ns0:tag ns0:key="value" xmlns:ns0="uri" />'
+## '<ns0:tag ns0:key="value" xmlns:ns0="uri"/>'
## 3) decorated values are not converted by default, but the
## QName wrapper can be used for values
@@ -594,12 +595,12 @@
## >>> elem.clear()
## >>> elem.attrib["{uri}key"] = "{uri}value"
## >>> serialize(elem) # 3.1
-## '<ns0:tag ns0:key="{uri}value" xmlns:ns0="uri" />'
+## '<ns0:tag ns0:key="{uri}value" xmlns:ns0="uri"/>'
## >>> elem.clear()
## >>> elem.attrib["{uri}key"] = ElementTree.QName("{uri}value")
## >>> serialize(elem) # 3.2
-## '<ns0:tag ns0:key="ns0:value" xmlns:ns0="uri" />'
+## '<ns0:tag ns0:key="ns0:value" xmlns:ns0="uri"/>'
## >>> elem.clear()
## >>> subelem = ElementTree.Element("tag")
@@ -607,9 +608,9 @@
## >>> elem.append(subelem)
## >>> elem.append(subelem)
## >>> serialize(elem) # 3.3
-## '<ns0:tag xmlns:ns0="uri"><tag ns1:key="ns2:value" xmlns:ns1="uri1" xmlns:ns2="uri2" /><tag ns1:key="ns2:value" xmlns:ns1="uri1" xmlns:ns2="uri2" /></ns0:tag>'
+## '<ns0:tag xmlns:ns0="uri"><tag ns1:key="ns2:value" xmlns:ns1="uri1" xmlns:ns2="uri2"/><tag ns1:key="ns2:value" xmlns:ns1="uri1" xmlns:ns2="uri2"/></ns0:tag>'
-## """
+ """
def xpath_tokenizer(p):
"""
Modified: lxml/trunk/selftest2.py
==============================================================================
--- lxml/trunk/selftest2.py (original)
+++ lxml/trunk/selftest2.py Wed Sep 12 22:06:09 2007
@@ -22,7 +22,7 @@
tree.write(file, encoding)
else:
tree.write(file)
- return file.getvalue()
+ return file.getvalue().replace(' />', '/>')
def summarize(elem):
return elem.tag
@@ -161,13 +161,13 @@
## >>> elem.attrib["key"] = "<&\"\'>"
## >>> elem.text = None
## >>> serialize(elem)
-## '<tag key="<&"'>" />'
+## '<tag key="<&"'>"/>'
## >>> serialize(elem, "utf-8")
-## '<tag key="<&"'>" />'
+## '<tag key="<&"'>"/>'
## >>> serialize(elem, "us-ascii")
-## '<tag key="<&"'>" />'
+## '<tag key="<&"'>"/>'
## >>> serialize(elem, "iso-8859-1")
-## '<?xml version=\'1.0\' encoding=\'iso-8859-1\'?>\n<tag key="<&"'>" />'
+## '<?xml version=\'1.0\' encoding=\'iso-8859-1\'?>\n<tag key="<&"'>"/>'
>>> elem.text = u'\xe5\xf6\xf6<>'
>>> elem.attrib.clear()
@@ -183,13 +183,13 @@
## >>> elem.attrib["key"] = u'\xe5\xf6\xf6<>'
## >>> elem.text = None
## >>> serialize(elem)
-## '<tag key="åöö<>" />'
+## '<tag key="åöö<>"/>'
## >>> serialize(elem, "utf-8")
-## '<tag key="\xc3\xa5\xc3\xb6\xc3\xb6<>" />'
+## '<tag key="\xc3\xa5\xc3\xb6\xc3\xb6<>"/>'
## >>> serialize(elem, "us-ascii")
-## '<tag key="åöö<>" />'
+## '<tag key="åöö<>"/>'
## >>> serialize(elem, "iso-8859-1")
-## '<?xml version=\'1.0\' encoding=\'iso-8859-1\'?>\n<tag key="\xe5\xf6\xf6<>" />'
+## '<?xml version=\'1.0\' encoding=\'iso-8859-1\'?>\n<tag key="\xe5\xf6\xf6<>"/>'
"""
@@ -290,25 +290,28 @@
['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag']
"""
-# XXX gives a segfault
+# XXX only deep copying is supported
-## def copy():
-## """
-## Test copy handling (etc).
+def copy():
+ """
+ Test copy handling (etc).
-## >>> import copy
-## >>> e1 = unserialize("<tag>hello<foo/></tag>")
-## >>> e2 = copy.copy(e1)
-## >>> e3 = copy.deepcopy(e1)
-## >>> e1.find("foo").tag = "bar"
-## >>> serialize(e1)
-## '<tag>hello<bar /></tag>'
-## >>> serialize(e2)
-## '<tag>hello<bar /></tag>'
-## >>> serialize(e3)
-## '<tag>hello<foo /></tag>'
+ >>> import copy
+ >>> e1 = unserialize("<tag>hello<foo/></tag>")
+ >>> # e2 = copy.copy(e1)
+ >>> e3 = copy.deepcopy(e1)
+ >>> e1.find("foo").tag = "bar"
-## """
+ >>> serialize(e1).replace(' ', '')
+ '<tag>hello<bar/></tag>'
+
+## >>> serialize(e2).replace(' ', '')
+## '<tag>hello<bar/></tag>'
+
+ >>> serialize(e3).replace(' ', '')
+ '<tag>hello<foo/></tag>'
+
+ """
def attrib():
"""
Modified: lxml/trunk/src/lxml/tests/test_elementtree.py
==============================================================================
--- lxml/trunk/src/lxml/tests/test_elementtree.py (original)
+++ lxml/trunk/src/lxml/tests/test_elementtree.py Wed Sep 12 22:06:09 2007
@@ -1986,7 +1986,7 @@
del one
self.assertEquals('{http://a.b.c}baz', baz.tag)
- def test_ns_decl(self):
+ def test_ns_decl_tostring(self):
tostring = self.etree.tostring
root = self.etree.XML(
'<foo><bar xmlns:ns="http://a.b.c"><ns:baz/></bar></foo>')
@@ -1996,7 +1996,7 @@
tostring(baz))
self.assertEquals(["http://a.b.c"], nsdecl)
- def test_ns_decl_default(self):
+ def test_ns_decl_tostring_default(self):
tostring = self.etree.tostring
root = self.etree.XML(
'<foo><bar xmlns="http://a.b.c"><baz/></bar></foo>')
@@ -2006,7 +2006,7 @@
tostring(baz))
self.assertEquals(["http://a.b.c"], nsdecl)
- def test_ns_decl_root(self):
+ def test_ns_decl_tostring_root(self):
tostring = self.etree.tostring
root = self.etree.XML(
'<foo xmlns:ns="http://a.b.c"><bar><ns:baz/></bar></foo>')
@@ -2016,6 +2016,19 @@
tostring(baz))
self.assertEquals(["http://a.b.c"], nsdecl)
+
+ def test_ns_decl_tostring_element(self):
+ Element = self.etree.Element
+ SubElement = self.etree.SubElement
+
+ root = Element("foo")
+ bar = SubElement(root, "{http://a.b.c}bar")
+ baz = SubElement(bar, "{http://a.b.c}baz")
+
+ nsdecl = re.findall("xmlns(?::[a-z0-9]+)?=[\"']([^\"']+)[\"']",
+ self.etree.tostring(baz))
+
+ self.assertEquals(["http://a.b.c"], nsdecl)
def test_attribute_xmlns_move(self):
Element = self.etree.Element
@@ -2562,6 +2575,59 @@
self.assertEquals(qname1, qname1)
self.assertEquals(qname1, qname2)
+ def test_qname_attribute_getset(self):
+ etree = self.etree
+ qname = etree.QName('myns', 'a')
+
+ a = etree.Element(qname)
+ a.set(qname, "value")
+
+ self.assertEquals(a.get(qname), "value")
+ self.assertEquals(a.get("{myns}a"), "value")
+
+ def test_qname_attrib(self):
+ etree = self.etree
+ qname = etree.QName('myns', 'a')
+
+ a = etree.Element(qname)
+ a.attrib[qname] = "value"
+
+ self.assertEquals(a.attrib[qname], "value")
+ self.assertEquals(a.attrib.get(qname), "value")
+
+ self.assertEquals(a.attrib["{myns}a"], "value")
+ self.assertEquals(a.attrib.get("{myns}a"), "value")
+
+ def test_qname_attribute_resolve(self):
+ etree = self.etree
+ qname = etree.QName('http://myns', 'a')
+ a = etree.Element(qname)
+ a.set(qname, qname)
+
+ self.assertXML(
+ '<ns0:a xmlns:ns0="http://myns" ns0:a="ns0:a"></ns0:a>',
+ a)
+
+ def test_qname_attribute_resolve_new(self):
+ etree = self.etree
+ qname = etree.QName('http://myns', 'a')
+ a = etree.Element('a')
+ a.set('a', qname)
+
+ self.assertXML(
+ '<a xmlns:ns0="http://myns" a="ns0:a"></a>',
+ a)
+
+ def test_qname_attrib_resolve(self):
+ etree = self.etree
+ qname = etree.QName('http://myns', 'a')
+ a = etree.Element(qname)
+ a.attrib[qname] = qname
+
+ self.assertXML(
+ '<ns0:a xmlns:ns0="http://myns" ns0:a="ns0:a"></ns0:a>',
+ a)
+
def test_parser_version(self):
etree = self.etree
parser = etree.XMLParser()
More information about the lxml-checkins
mailing list