[Lxml-checkins] r54978 - in lxml/trunk: . src/lxml/tests
scoder at codespeak.net
scoder at codespeak.net
Tue May 20 00:02:17 CEST 2008
Author: scoder
Date: Tue May 20 00:02:14 2008
New Revision: 54978
Modified:
lxml/trunk/ (props changed)
lxml/trunk/src/lxml/tests/common_imports.py
lxml/trunk/src/lxml/tests/test_classlookup.py
lxml/trunk/src/lxml/tests/test_dtd.py
lxml/trunk/src/lxml/tests/test_elementtree.py
lxml/trunk/src/lxml/tests/test_errors.py
lxml/trunk/src/lxml/tests/test_etree.py
lxml/trunk/src/lxml/tests/test_htmlparser.py
lxml/trunk/src/lxml/tests/test_io.py
lxml/trunk/src/lxml/tests/test_nsclasses.py
lxml/trunk/src/lxml/tests/test_objectify.py
lxml/trunk/src/lxml/tests/test_pyclasslookup.py
lxml/trunk/src/lxml/tests/test_relaxng.py
lxml/trunk/src/lxml/tests/test_sax.py
lxml/trunk/src/lxml/tests/test_schematron.py
lxml/trunk/src/lxml/tests/test_threading.py
lxml/trunk/src/lxml/tests/test_xmlschema.py
lxml/trunk/src/lxml/tests/test_xpathevaluator.py
lxml/trunk/src/lxml/tests/test_xslt.py
Log:
r4235 at delle: sbehnel | 2008-05-19 23:57:56 +0200
Py3 test fixes
Modified: lxml/trunk/src/lxml/tests/common_imports.py
==============================================================================
--- lxml/trunk/src/lxml/tests/common_imports.py (original)
+++ lxml/trunk/src/lxml/tests/common_imports.py Tue May 20 00:02:14 2008
@@ -1,6 +1,6 @@
import unittest
import os.path
-import re, gc
+import re, gc, sys
from lxml import etree
@@ -56,38 +56,41 @@
seq = list(seq)
seq.sort(**kwargs)
return seq
+else:
+ locals()['sorted'] = sorted
-try:
- unicode
-except NameError:
+if sys.version_info >= (3,):
# Python 3
unicode = str
- def unicode_literal(s, encoding="UTF-8"):
+ def _str(s, encoding="UTF-8"):
return s
- def byte_literal(s, encoding="UTF-8"):
+ def _bytes(s, encoding="UTF-8"):
return s.encode(encoding)
+ from io import StringIO, BytesIO as _BytesIO
+ def BytesIO(*args):
+ if args and isinstance(args[0], str):
+ args = (args[0].encode("UTF-8"),)
+ return _BytesIO(*args)
else:
# Python 2
- unicode_literal = unicode
- def byte_literal(s, encoding="UTF-8"):
+ def _str(s, encoding="UTF-8"):
+ return unicode(s, encoding=encoding)
+ def _bytes(s, encoding="UTF-8"):
return s
-
-try:
from StringIO import StringIO
-except ImportError:
- # Python 3
- from io import StringIO
+ BytesIO = StringIO
class HelperTestCase(unittest.TestCase):
def tearDown(self):
gc.collect()
def parse(self, text, parser=None):
- f = StringIO(text)
+ f = BytesIO(text)
return etree.parse(f, parser=parser)
def _rootstring(self, tree):
- return etree.tostring(tree.getroot()).replace(' ', '').replace('\n', '')
+ return etree.tostring(tree.getroot()).replace(
+ _bytes(' '), _bytes('')).replace(_bytes('\n'), _bytes(''))
# assertFalse doesn't exist in Python 2.3
try:
@@ -149,13 +152,13 @@
return result
def fileInTestDir(name):
- _testdir = os.path.split(__file__)[0]
+ _testdir = os.path.dirname(__file__)
return os.path.join(_testdir, name)
def canonicalize(xml):
- f = StringIO(xml)
+ f = BytesIO(xml)
tree = etree.parse(f)
- f = StringIO()
+ f = BytesIO()
tree.write_c14n(f)
return f.getvalue()
Modified: lxml/trunk/src/lxml/tests/test_classlookup.py
==============================================================================
--- lxml/trunk/src/lxml/tests/test_classlookup.py (original)
+++ lxml/trunk/src/lxml/tests/test_classlookup.py Tue May 20 00:02:14 2008
@@ -160,4 +160,4 @@
return suite
if __name__ == '__main__':
- print 'to test use test.py %s' % __file__
+ print('to test use test.py %s' % __file__)
Modified: lxml/trunk/src/lxml/tests/test_dtd.py
==============================================================================
--- lxml/trunk/src/lxml/tests/test_dtd.py (original)
+++ lxml/trunk/src/lxml/tests/test_dtd.py Tue May 20 00:02:14 2008
@@ -130,4 +130,4 @@
return suite
if __name__ == '__main__':
- print 'to test use test.py %s' % __file__
+ print('to test use test.py %s' % __file__)
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 Tue May 20 00:02:14 2008
@@ -15,9 +15,9 @@
if this_dir not in sys.path:
sys.path.insert(0, this_dir) # needed for Py3
-from common_imports import StringIO, etree, ElementTree, cElementTree
+from common_imports import StringIO, BytesIO, etree, ElementTree, cElementTree
from common_imports import fileInTestDir, canonicalize, HelperTestCase
-from common_imports import unicode_literal, byte_literal
+from common_imports import _str, _bytes
if cElementTree is not None:
if tuple([int(n) for n in
@@ -59,7 +59,7 @@
def test_weird_dict_interaction(self):
root = self.etree.Element('root')
self.assertEquals(root.tag, "root")
- add = self.etree.ElementTree(file=StringIO('<foo>Foo</foo>'))
+ add = self.etree.ElementTree(file=BytesIO('<foo>Foo</foo>'))
self.assertEquals(add.getroot().tag, "foo")
self.assertEquals(add.getroot().text, "Foo")
root.append(self.etree.Element('baz'))
@@ -100,7 +100,7 @@
def test_element_indexing_with_text(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<doc>Test<one>One</one></doc>')
+ f = BytesIO('<doc>Test<one>One</one></doc>')
doc = ElementTree(file=f)
root = doc.getroot()
self.assertEquals(1, len(root))
@@ -110,7 +110,7 @@
def test_element_indexing_with_text2(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<doc><one>One</one><two>Two</two>hm<three>Three</three></doc>')
+ f = BytesIO('<doc><one>One</one><two>Two</two>hm<three>Three</three></doc>')
doc = ElementTree(file=f)
root = doc.getroot()
self.assertEquals(3, len(root))
@@ -121,7 +121,7 @@
def test_element_indexing_only_text(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<doc>Test</doc>')
+ f = BytesIO('<doc>Test</doc>')
doc = ElementTree(file=f)
root = doc.getroot()
self.assertEquals(0, len(root))
@@ -145,7 +145,7 @@
def test_elementtree(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<doc><one>One</one><two>Two</two></doc>')
+ f = BytesIO('<doc><one>One</one><two>Two</two></doc>')
doc = ElementTree(file=f)
root = doc.getroot()
self.assertEquals(2, len(root))
@@ -155,7 +155,7 @@
def test_text(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<doc>This is a text</doc>')
+ f = BytesIO('<doc>This is a text</doc>')
doc = ElementTree(file=f)
root = doc.getroot()
self.assertEquals('This is a text', root.text)
@@ -163,7 +163,7 @@
def test_text_empty(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<doc></doc>')
+ f = BytesIO('<doc></doc>')
doc = ElementTree(file=f)
root = doc.getroot()
self.assertEquals(None, root.text)
@@ -171,7 +171,7 @@
def test_text_other(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<doc><one>One</one></doc>')
+ f = BytesIO('<doc><one>One</one></doc>')
doc = ElementTree(file=f)
root = doc.getroot()
self.assertEquals(None, root.text)
@@ -180,7 +180,7 @@
def test_text_escape_in(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<doc>This is > than a text</doc>')
+ f = BytesIO('<doc>This is > than a text</doc>')
doc = ElementTree(file=f)
root = doc.getroot()
self.assertEquals('This is > than a text', root.text)
@@ -190,7 +190,7 @@
a = Element("a")
a.text = "<>&"
- self.assertXML('<a><>&</a>',
+ self.assertXML(_bytes('<a><>&</a>'),
a)
def test_text_escape_tostring(self):
@@ -199,7 +199,7 @@
a = Element("a")
a.text = "<>&"
- self.assertEquals('<a><>&</a>',
+ self.assertEquals(_bytes('<a><>&</a>'),
tostring(a))
def test_text_str_subclass(self):
@@ -210,13 +210,13 @@
a = Element("a")
a.text = strTest("text")
- self.assertXML('<a>text</a>',
+ self.assertXML(_bytes('<a>text</a>'),
a)
def test_tail(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<doc>This is <i>mixed</i> content.</doc>')
+ f = BytesIO('<doc>This is <i>mixed</i> content.</doc>')
doc = ElementTree(file=f)
root = doc.getroot()
self.assertEquals(1, len(root))
@@ -234,14 +234,14 @@
a = Element("a")
SubElement(a, "t").tail = strTest("tail")
- self.assertXML('<a><t></t>tail</a>',
+ self.assertXML(_bytes('<a><t></t>tail</a>'),
a)
def _test_del_tail(self):
# this is discouraged for ET compat, should not be tested...
XML = self.etree.XML
- root = XML('<doc>This is <i>mixed</i> content.</doc>')
+ root = XML(_bytes('<doc>This is <i>mixed</i> content.</doc>'))
self.assertEquals(1, len(root))
self.assertEquals('This is ', root.text)
self.assertEquals(None, root.tail)
@@ -277,7 +277,7 @@
def test_attributes(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<doc one="One" two="Two"/>')
+ f = BytesIO('<doc one="One" two="Two"/>')
doc = ElementTree(file=f)
root = doc.getroot()
self.assertEquals('One', root.attrib['one'])
@@ -287,7 +287,7 @@
def test_attributes2(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<doc one="One" two="Two"/>')
+ f = BytesIO('<doc one="One" two="Two"/>')
doc = ElementTree(file=f)
root = doc.getroot()
self.assertEquals('One', root.attrib.get('one'))
@@ -298,7 +298,7 @@
def test_attributes3(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<doc one="One" two="Two"/>')
+ f = BytesIO('<doc one="One" two="Two"/>')
doc = ElementTree(file=f)
root = doc.getroot()
self.assertEquals('One', root.get('one'))
@@ -309,7 +309,7 @@
def test_attrib_clear(self):
XML = self.etree.XML
- root = XML('<doc one="One" two="Two"/>')
+ root = XML(_bytes('<doc one="One" two="Two"/>'))
self.assertEquals('One', root.get('one'))
self.assertEquals('Two', root.get('two'))
root.attrib.clear()
@@ -348,7 +348,7 @@
def test_attrib_pop(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<doc one="One" two="Two"/>')
+ f = BytesIO('<doc one="One" two="Two"/>')
doc = ElementTree(file=f)
root = doc.getroot()
self.assertEquals('One', root.attrib['one'])
@@ -360,29 +360,29 @@
self.assertEquals('Two', root.attrib['two'])
def test_attrib_pop_unknown(self):
- root = self.etree.XML('<doc one="One" two="Two"/>')
+ root = self.etree.XML(_bytes('<doc one="One" two="Two"/>'))
self.assertRaises(KeyError, root.attrib.pop, 'NONE')
self.assertEquals('One', root.attrib['one'])
self.assertEquals('Two', root.attrib['two'])
def test_attrib_pop_default(self):
- root = self.etree.XML('<doc one="One" two="Two"/>')
+ root = self.etree.XML(_bytes('<doc one="One" two="Two"/>'))
self.assertEquals('Three', root.attrib.pop('three', 'Three'))
def test_attrib_pop_empty_default(self):
- root = self.etree.XML('<doc/>')
+ root = self.etree.XML(_bytes('<doc/>'))
self.assertEquals('Three', root.attrib.pop('three', 'Three'))
def test_attrib_pop_invalid_args(self):
- root = self.etree.XML('<doc one="One" two="Two"/>')
+ root = self.etree.XML(_bytes('<doc one="One" two="Two"/>'))
self.assertRaises(TypeError, root.attrib.pop, 'One', None, None)
def test_attribute_update_dict(self):
XML = self.etree.XML
- root = XML('<doc alpha="Alpha" beta="Beta"/>')
- items = root.attrib.items()
+ root = XML(_bytes('<doc alpha="Alpha" beta="Beta"/>'))
+ items = list(root.attrib.items())
items.sort()
self.assertEquals(
[('alpha', 'Alpha'), ('beta', 'Beta')],
@@ -390,7 +390,7 @@
root.attrib.update({'alpha' : 'test', 'gamma' : 'Gamma'})
- items = root.attrib.items()
+ items = list(root.attrib.items())
items.sort()
self.assertEquals(
[('alpha', 'test'), ('beta', 'Beta'), ('gamma', 'Gamma')],
@@ -399,8 +399,8 @@
def test_attribute_update_sequence(self):
XML = self.etree.XML
- root = XML('<doc alpha="Alpha" beta="Beta"/>')
- items = root.attrib.items()
+ root = XML(_bytes('<doc alpha="Alpha" beta="Beta"/>'))
+ items = list(root.attrib.items())
items.sort()
self.assertEquals(
[('alpha', 'Alpha'), ('beta', 'Beta')],
@@ -408,7 +408,7 @@
root.attrib.update({'alpha' : 'test', 'gamma' : 'Gamma'}.items())
- items = root.attrib.items()
+ items = list(root.attrib.items())
items.sort()
self.assertEquals(
[('alpha', 'test'), ('beta', 'Beta'), ('gamma', 'Gamma')],
@@ -417,16 +417,16 @@
def test_attribute_update_iter(self):
XML = self.etree.XML
- root = XML('<doc alpha="Alpha" beta="Beta"/>')
- items = root.attrib.items()
+ root = XML(_bytes('<doc alpha="Alpha" beta="Beta"/>'))
+ items = list(root.attrib.items())
items.sort()
self.assertEquals(
[('alpha', 'Alpha'), ('beta', 'Beta')],
items)
- root.attrib.update({'alpha' : 'test', 'gamma' : 'Gamma'}.iteritems())
+ root.attrib.update({'alpha' : 'test', 'gamma' : 'Gamma'}.items())
- items = root.attrib.items()
+ items = list(root.attrib.items())
items.sort()
self.assertEquals(
[('alpha', 'test'), ('beta', 'Beta'), ('gamma', 'Gamma')],
@@ -435,7 +435,7 @@
def test_attribute_keys(self):
XML = self.etree.XML
- root = XML('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>')
+ root = XML(_bytes('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>'))
keys = root.attrib.keys()
keys.sort()
self.assertEquals(['alpha', 'beta', 'gamma'], keys)
@@ -443,7 +443,7 @@
def test_attribute_keys2(self):
XML = self.etree.XML
- root = XML('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>')
+ root = XML(_bytes('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>'))
keys = root.keys()
keys.sort()
self.assertEquals(['alpha', 'beta', 'gamma'], keys)
@@ -451,8 +451,8 @@
def test_attribute_items2(self):
XML = self.etree.XML
- root = XML('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>')
- items = root.items()
+ root = XML(_bytes('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>'))
+ items = list(root.items())
items.sort()
self.assertEquals(
[('alpha','Alpha'), ('beta','Beta'), ('gamma','Gamma')],
@@ -461,7 +461,7 @@
def test_attribute_keys_ns(self):
XML = self.etree.XML
- root = XML('<foo bar="Bar" xmlns:ns="http://ns.codespeak.net/test" ns:baz="Baz" />')
+ root = XML(_bytes('<foo bar="Bar" xmlns:ns="http://ns.codespeak.net/test" ns:baz="Baz" />'))
keys = root.keys()
keys.sort()
self.assertEquals(['bar', '{http://ns.codespeak.net/test}baz'],
@@ -470,7 +470,7 @@
def test_attribute_values(self):
XML = self.etree.XML
- root = XML('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>')
+ root = XML(_bytes('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>'))
values = root.attrib.values()
values.sort()
self.assertEquals(['Alpha', 'Beta', 'Gamma'], values)
@@ -478,7 +478,7 @@
def test_attribute_values_ns(self):
XML = self.etree.XML
- root = XML('<foo bar="Bar" xmlns:ns="http://ns.codespeak.net/test" ns:baz="Baz" />')
+ root = XML(_bytes('<foo bar="Bar" xmlns:ns="http://ns.codespeak.net/test" ns:baz="Baz" />'))
values = root.attrib.values()
values.sort()
self.assertEquals(
@@ -487,8 +487,8 @@
def test_attribute_items(self):
XML = self.etree.XML
- root = XML('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>')
- items = root.attrib.items()
+ root = XML(_bytes('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>'))
+ items = list(root.attrib.items())
items.sort()
self.assertEquals([
('alpha', 'Alpha'),
@@ -500,8 +500,8 @@
def test_attribute_items_ns(self):
XML = self.etree.XML
- root = XML('<foo bar="Bar" xmlns:ns="http://ns.codespeak.net/test" ns:baz="Baz" />')
- items = root.attrib.items()
+ root = XML(_bytes('<foo bar="Bar" xmlns:ns="http://ns.codespeak.net/test" ns:baz="Baz" />'))
+ items = list(root.attrib.items())
items.sort()
self.assertEquals(
[('bar', 'Bar'), ('{http://ns.codespeak.net/test}baz', 'Baz')],
@@ -513,7 +513,7 @@
expected = "{'{http://ns.codespeak.net/test}baz': 'Baz', 'bar': 'Bar'}"
alternative = "{'bar': 'Bar', '{http://ns.codespeak.net/test}baz': 'Baz'}"
- root = XML('<foo bar="Bar" xmlns:ns="http://ns.codespeak.net/test" ns:baz="Baz" />')
+ root = XML(_bytes('<foo bar="Bar" xmlns:ns="http://ns.codespeak.net/test" ns:baz="Baz" />'))
try:
self.assertEquals(expected, str(root.attrib))
except AssertionError:
@@ -522,7 +522,7 @@
def test_attribute_has_key(self):
XML = self.etree.XML
- root = XML('<foo bar="Bar" xmlns:ns="http://ns.codespeak.net/test" ns:baz="Baz" />')
+ root = XML(_bytes('<foo bar="Bar" xmlns:ns="http://ns.codespeak.net/test" ns:baz="Baz" />'))
self.assertEquals(
True, root.attrib.has_key('bar'))
self.assertEquals(
@@ -536,7 +536,7 @@
def test_attribute_contains(self):
XML = self.etree.XML
- root = XML('<foo bar="Bar" xmlns:ns="http://ns.codespeak.net/test" ns:baz="Baz" />')
+ root = XML(_bytes('<foo bar="Bar" xmlns:ns="http://ns.codespeak.net/test" ns:baz="Baz" />'))
self.assertEquals(
True, 'bar' in root.attrib)
self.assertEquals(
@@ -557,14 +557,14 @@
def test_XML(self):
XML = self.etree.XML
- root = XML('<doc>This is a text.</doc>')
+ root = XML(_bytes('<doc>This is a text.</doc>'))
self.assertEquals(0, len(root))
self.assertEquals('This is a text.', root.text)
def test_XMLID(self):
XMLID = self.etree.XMLID
XML = self.etree.XML
- xml_text = '''
+ xml_text = _bytes('''
<document>
<h1 id="chapter1">...</h1>
<p id="note1" class="note">...</p>
@@ -572,7 +572,7 @@
<p xml:id="xmlid">XML:ID paragraph.</p>
<p id="warn1" class="warning">...</p>
</document>
- '''
+ ''')
root, dic = XMLID(xml_text)
root2 = XML(xml_text)
@@ -625,7 +625,7 @@
el = Element('hoi')
self.assert_(iselement(el))
- el2 = XML('<foo/>')
+ el2 = XML(_bytes('<foo/>'))
self.assert_(iselement(el2))
tree = ElementTree(element=Element('dag'))
@@ -641,7 +641,7 @@
def test_iteration(self):
XML = self.etree.XML
- root = XML('<doc><one/><two>Two</two>Hm<three/></doc>')
+ root = XML(_bytes('<doc><one/><two>Two</two>Hm<three/></doc>'))
result = []
for el in root:
result.append(el.tag)
@@ -650,7 +650,7 @@
def test_iteration_empty(self):
XML = self.etree.XML
- root = XML('<doc></doc>')
+ root = XML(_bytes('<doc></doc>'))
result = []
for el in root:
result.append(el.tag)
@@ -659,7 +659,7 @@
def test_iteration_text_only(self):
XML = self.etree.XML
- root = XML('<doc>Text</doc>')
+ root = XML(_bytes('<doc>Text</doc>'))
result = []
for el in root:
result.append(el.tag)
@@ -674,7 +674,7 @@
def test_iteration_reversed(self):
XML = self.etree.XML
- root = XML('<doc><one/><two>Two</two>Hm<three/></doc>')
+ root = XML(_bytes('<doc><one/><two>Two</two>Hm<three/></doc>'))
result = []
for el in reversed(root):
result.append(el.tag)
@@ -683,7 +683,7 @@
def test_iteration_subelement(self):
XML = self.etree.XML
- root = XML('<doc><one/><two>Two</two>Hm<three/></doc>')
+ root = XML(_bytes('<doc><one/><two>Two</two>Hm<three/></doc>'))
result = []
add = True
for el in root:
@@ -696,7 +696,7 @@
def test_iteration_del_child(self):
XML = self.etree.XML
- root = XML('<doc><one/><two>Two</two>Hm<three/></doc>')
+ root = XML(_bytes('<doc><one/><two>Two</two>Hm<three/></doc>'))
result = []
for el in root:
result.append(el.tag)
@@ -706,7 +706,7 @@
def test_iteration_double(self):
XML = self.etree.XML
- root = XML('<doc><one/><two/></doc>')
+ root = XML(_bytes('<doc><one/><two/></doc>'))
result = []
for el0 in root:
result.append(el0.tag)
@@ -717,7 +717,7 @@
def test_attribute_iterator(self):
XML = self.etree.XML
- root = XML('<doc alpha="Alpha" beta="Beta" gamma="Gamma" />')
+ root = XML(_bytes('<doc alpha="Alpha" beta="Beta" gamma="Gamma" />'))
result = []
for key in root.attrib:
result.append(key)
@@ -727,7 +727,7 @@
def test_itertext(self):
# ET 1.3+
XML = self.etree.XML
- root = XML("<root>RTEXT<a></a>ATAIL<b/><c>CTEXT</c>CTAIL</root>")
+ root = XML(_bytes("<root>RTEXT<a></a>ATAIL<b/><c>CTEXT</c>CTAIL</root>"))
text = list(root.itertext())
self.assertEquals(["RTEXT", "ATAIL", "CTEXT", "CTAIL"],
@@ -736,7 +736,7 @@
def test_itertext_child(self):
# ET 1.3+
XML = self.etree.XML
- root = XML("<root>RTEXT<a></a>ATAIL<b/><c>CTEXT</c>CTAIL</root>")
+ root = XML(_bytes("<root>RTEXT<a></a>ATAIL<b/><c>CTEXT</c>CTAIL</root>"))
text = list(root[2].itertext())
self.assertEquals(["CTEXT"],
@@ -744,7 +744,7 @@
def test_findall(self):
XML = self.etree.XML
- root = XML('<a><b><c/></b><b/><c><b/></c></a>')
+ root = XML(_bytes('<a><b><c/></b><b/><c><b/></c></a>'))
self.assertEquals(len(list(root.findall("c"))), 1)
self.assertEquals(len(list(root.findall(".//c"))), 2)
self.assertEquals(len(list(root.findall(".//b"))), 3)
@@ -754,7 +754,7 @@
def test_findall_ns(self):
XML = self.etree.XML
- root = XML('<a xmlns:x="X" xmlns:y="Y"><x:b><c/></x:b><b/><c><x:b/><b/></c><b/></a>')
+ root = XML(_bytes('<a xmlns:x="X" xmlns:y="Y"><x:b><c/></x:b><b/><c><x:b/><b/></c><b/></a>'))
self.assertEquals(len(list(root.findall(".//{X}b"))), 2)
self.assertEquals(len(list(root.findall(".//b"))), 3)
self.assertEquals(len(list(root.findall("b"))), 2)
@@ -803,13 +803,13 @@
XML = self.etree.XML
for i in range(10):
- f = StringIO()
- root = XML('<doc%s>This is a test.</doc%s>' % (i, i))
+ f = BytesIO()
+ root = XML(_bytes('<doc%s>This is a test.</doc%s>' % (i, i)))
tree = ElementTree(element=root)
tree.write(f)
data = f.getvalue()
self.assertEquals(
- '<doc%s>This is a test.</doc%s>' % (i, i),
+ _bytes('<doc%s>This is a test.</doc%s>' % (i, i)),
canonicalize(data))
def test_write_method_html(self):
@@ -824,11 +824,11 @@
SubElement(p, 'br').tail = "test"
tree = ElementTree(element=html)
- f = StringIO()
+ f = BytesIO()
tree.write(f, method="html")
- data = f.getvalue().replace('\n','')
+ data = f.getvalue().replace(_bytes('\n'),_bytes(''))
- self.assertEquals('<html><body><p>html<br>test</p></body></html>',
+ self.assertEquals(_bytes('<html><body><p>html<br>test</p></body></html>'),
data)
def test_write_method_text(self):
@@ -846,18 +846,18 @@
c.text = "C"
tree = ElementTree(element=a)
- f = StringIO()
+ f = BytesIO()
tree.write(f, method="text")
data = f.getvalue()
- self.assertEquals('ABTAILCtail',
+ self.assertEquals(_bytes('ABTAILCtail'),
data)
def test_write_fail(self):
ElementTree = self.etree.ElementTree
XML = self.etree.XML
- tree = ElementTree( XML('<doc>This is a test.</doc>') )
+ tree = ElementTree( XML(_bytes('<doc>This is a test.</doc>')) )
self.assertRaises(IOError, tree.write,
"definitely////\\-\\nonexisting\\-\\////FILE")
@@ -877,7 +877,7 @@
Element = self.etree.Element
ElementTree = self.etree.ElementTree
- f = StringIO()
+ f = BytesIO()
for i in range(10):
element = Element('tag%s' % i)
self._check_element(element)
@@ -947,7 +947,7 @@
self.assertEquals(
None,
a.text)
- self.assertXML('<a></a>', a)
+ self.assertXML(_bytes('<a></a>'), a)
def test_set_text_empty(self):
Element = self.etree.Element
@@ -957,7 +957,7 @@
a.text = ''
self.assertEquals('', a.text)
- self.assertXML('<a></a>', a)
+ self.assertXML(_bytes('<a></a>'), a)
def test_tail1(self):
Element = self.etree.Element
@@ -994,7 +994,7 @@
b.tail = 'bar'
self.assertEquals('bar',
b.tail)
- self.assertXML('<a><b></b>bar</a>', a)
+ self.assertXML(_bytes('<a><b></b>bar</a>'), a)
def test_tail_set_none(self):
Element = self.etree.Element
@@ -1004,7 +1004,7 @@
self.assertEquals(
None,
a.tail)
- self.assertXML('<a></a>', a)
+ self.assertXML(_bytes('<a></a>'), a)
def test_extend(self):
root = self.etree.Element('foo')
@@ -1042,68 +1042,54 @@
self.assertEquals(a[0].tag, Comment)
self.assertEquals(a[0].text, 'foo')
+ # ElementTree < 1.3 adds whitespace around comments
def test_comment_text(self):
Element = self.etree.Element
SubElement = self.etree.SubElement
Comment = self.etree.Comment
+ tostring = self.etree.tostring
a = Element('a')
a.append(Comment('foo'))
self.assertEquals(a[0].text, 'foo')
+ self.assertEquals(
+ _bytes('<a><!--foo--></a>'),
+ tostring(a))
+
a[0].text = "TEST"
self.assertEquals(a[0].text, 'TEST')
+
+ self.assertEquals(
+ _bytes('<a><!--TEST--></a>'),
+ tostring(a))
+ # ElementTree < 1.3 adds whitespace around comments
def test_comment_whitespace(self):
Element = self.etree.Element
SubElement = self.etree.SubElement
Comment = self.etree.Comment
+ tostring = self.etree.tostring
a = Element('a')
a.append(Comment(' foo '))
self.assertEquals(a[0].text, ' foo ')
+ self.assertEquals(
+ _bytes('<a><!-- foo --></a>'),
+ tostring(a))
def test_comment_nonsense(self):
Comment = self.etree.Comment
c = Comment('foo')
self.assertEquals({}, c.attrib)
- self.assertEquals([], c.keys())
- self.assertEquals([], c.items())
+ self.assertEquals([], list(c.keys()))
+ self.assertEquals([], list(c.items()))
self.assertEquals(None, c.get('hoi'))
self.assertEquals(0, len(c))
# should not iterate
for i in c:
pass
- # ElementTree < 1.3 adds whitespace around comments
- def test_comment_text(self):
- Element = self.etree.Element
- Comment = self.etree.Comment
- tostring = self.etree.tostring
-
- a = Element('a')
- a.append(Comment('foo'))
- self.assertEquals(
- '<a><!--foo--></a>',
- tostring(a))
-
- a[0].text = "TEST"
- self.assertEquals(
- '<a><!--TEST--></a>',
- tostring(a))
-
- # ElementTree < 1.3 adds whitespace around comments
- def test_comment_whitespace(self):
- Element = self.etree.Element
- Comment = self.etree.Comment
- tostring = self.etree.tostring
-
- a = Element('a')
- a.append(Comment(' foo '))
- self.assertEquals(
- '<a><!-- foo --></a>',
- tostring(a))
-
def test_pi(self):
# lxml.etree separates target and text
Element = self.etree.Element
@@ -1113,7 +1099,7 @@
a = Element('a')
a.append(ProcessingInstruction('foo', 'some more text'))
self.assertEquals(a[0].tag, ProcessingInstruction)
- self.assertXML("<a><?foo some more text?></a>",
+ self.assertXML(_bytes("<a><?foo some more text?></a>"),
a)
def test_processinginstruction(self):
@@ -1125,15 +1111,15 @@
a = Element('a')
a.append(ProcessingInstruction('foo', 'some more text'))
self.assertEquals(a[0].tag, ProcessingInstruction)
- self.assertXML("<a><?foo some more text?></a>",
+ self.assertXML(_bytes("<a><?foo some more text?></a>"),
a)
def test_pi_nonsense(self):
ProcessingInstruction = self.etree.ProcessingInstruction
pi = ProcessingInstruction('foo')
self.assertEquals({}, pi.attrib)
- self.assertEquals([], pi.keys())
- self.assertEquals([], pi.items())
+ self.assertEquals([], list(pi.keys()))
+ self.assertEquals([], list(pi.items()))
self.assertEquals(None, pi.get('hoi'))
self.assertEquals(0, len(pi))
# should not iterate
@@ -1151,9 +1137,9 @@
self.assertEquals(
c,
a[0])
- self.assertXML('<a><c></c></a>',
+ self.assertXML(_bytes('<a><c></c></a>'),
a)
- self.assertXML('<b></b>',
+ self.assertXML(_bytes('<b></b>'),
b)
def test_setitem2(self):
@@ -1169,9 +1155,9 @@
e = SubElement(d, 'e')
a[i] = d
self.assertXML(
- '<a><d><e></e></d><d><e></e></d><d><e></e></d><d><e></e></d><d><e></e></d></a>',
+ _bytes('<a><d><e></e></d><d><e></e></d><d><e></e></d><d><e></e></d><d><e></e></d></a>'),
a)
- self.assertXML('<c></c>',
+ self.assertXML(_bytes('<c></c>'),
c)
def test_setitem_replace(self):
@@ -1182,7 +1168,7 @@
SubElement(a, 'b')
d = Element('d')
a[0] = d
- self.assertXML('<a><d></d></a>', a)
+ self.assertXML(_bytes('<a><d></d></a>'), a)
def test_setitem_indexerror(self):
Element = self.etree.Element
@@ -1205,7 +1191,7 @@
a[0] = c
self.assertXML(
- '<a><c></c>C2</a>',
+ _bytes('<a><c></c>C2</a>'),
a)
def test_tag_write(self):
@@ -1222,7 +1208,7 @@
a.tag)
self.assertXML(
- '<c><b></b></c>',
+ _bytes('<c><b></b></c>'),
a)
def test_tag_reset_ns(self):
@@ -1240,8 +1226,8 @@
# can't use C14N here!
self.assertEquals('c', b1.tag)
- self.assertEquals('<c', tostring(b1)[:2])
- self.assert_('<c' in tostring(a))
+ self.assertEquals(_bytes('<c'), tostring(b1)[:2])
+ self.assert_(_bytes('<c') in tostring(a))
def test_tag_reset_root_ns(self):
Element = self.etree.Element
@@ -1260,7 +1246,7 @@
# can't use C14N here!
self.assertEquals('c', a.tag)
- self.assertEquals('<c', tostring(a)[:2])
+ self.assertEquals(_bytes('<c'), tostring(a)[:2])
def test_tag_str_subclass(self):
Element = self.etree.Element
@@ -1270,7 +1256,7 @@
a = Element("a")
a.tag = strTest("TAG")
- self.assertXML('<TAG></TAG>',
+ self.assertXML(_bytes('<TAG></TAG>'),
a)
def test_delitem(self):
@@ -1284,23 +1270,23 @@
del a[1]
self.assertXML(
- '<a><b></b><d></d></a>',
+ _bytes('<a><b></b><d></d></a>'),
a)
del a[0]
self.assertXML(
- '<a><d></d></a>',
+ _bytes('<a><d></d></a>'),
a)
del a[0]
self.assertXML(
- '<a></a>',
+ _bytes('<a></a>'),
a)
# move deleted element into other tree afterwards
other = Element('other')
other.append(c)
self.assertXML(
- '<other><c></c></other>',
+ _bytes('<other><c></c></other>'),
other)
def test_del_insert(self):
@@ -1315,24 +1301,24 @@
el = a[0]
self.assertXML(
- '<a><b><bs></bs></b><c><cs></cs></c></a>',
+ _bytes('<a><b><bs></bs></b><c><cs></cs></c></a>'),
a)
- self.assertXML('<b><bs></bs></b>', b)
- self.assertXML('<c><cs></cs></c>', c)
+ self.assertXML(_bytes('<b><bs></bs></b>'), b)
+ self.assertXML(_bytes('<c><cs></cs></c>'), c)
del a[0]
self.assertXML(
- '<a><c><cs></cs></c></a>',
+ _bytes('<a><c><cs></cs></c></a>'),
a)
- self.assertXML('<b><bs></bs></b>', b)
- self.assertXML('<c><cs></cs></c>', c)
+ self.assertXML(_bytes('<b><bs></bs></b>'), b)
+ self.assertXML(_bytes('<c><cs></cs></c>'), c)
a.insert(0, el)
self.assertXML(
- '<a><b><bs></bs></b><c><cs></cs></c></a>',
+ _bytes('<a><b><bs></bs></b><c><cs></cs></c></a>'),
a)
- self.assertXML('<b><bs></bs></b>', b)
- self.assertXML('<c><cs></cs></c>', c)
+ self.assertXML(_bytes('<b><bs></bs></b>'), b)
+ self.assertXML(_bytes('<c><cs></cs></c>'), c)
def test_del_setitem(self):
Element = self.etree.Element
@@ -1348,10 +1334,10 @@
del a[0]
a[0] = el
self.assertXML(
- '<a><b><bs></bs></b></a>',
+ _bytes('<a><b><bs></bs></b></a>'),
a)
- self.assertXML('<b><bs></bs></b>', b)
- self.assertXML('<c><cs></cs></c>', c)
+ self.assertXML(_bytes('<b><bs></bs></b>'), b)
+ self.assertXML(_bytes('<c><cs></cs></c>'), c)
def test_del_setslice(self):
Element = self.etree.Element
@@ -1367,14 +1353,14 @@
del a[0]
a[0:0] = [el]
self.assertXML(
- '<a><b><bs></bs></b><c><cs></cs></c></a>',
+ _bytes('<a><b><bs></bs></b><c><cs></cs></c></a>'),
a)
- self.assertXML('<b><bs></bs></b>', b)
- self.assertXML('<c><cs></cs></c>', c)
+ self.assertXML(_bytes('<b><bs></bs></b>'), b)
+ self.assertXML(_bytes('<c><cs></cs></c>'), c)
def test_replace_slice_tail(self):
XML = self.etree.XML
- a = XML('<a><b></b>B2<c></c>C2</a>')
+ a = XML(_bytes('<a><b></b>B2<c></c>C2</a>'))
b, c = a
a[:] = []
@@ -1384,12 +1370,12 @@
def test_delitem_tail(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<a><b></b>B2<c></c>C2</a>')
+ f = BytesIO('<a><b></b>B2<c></c>C2</a>')
doc = ElementTree(file=f)
a = doc.getroot()
del a[0]
self.assertXML(
- '<a><c></c>C2</a>',
+ _bytes('<a><c></c>C2</a>'),
a)
def test_clear(self):
@@ -1421,19 +1407,19 @@
self.assertEquals(None, a.get('hoi'))
self.assertEquals('a', a.tag)
self.assertEquals(0, len(a))
- self.assertXML('<a></a>',
+ self.assertXML(_bytes('<a></a>'),
a)
- self.assertXML('<b><c></c></b>',
+ self.assertXML(_bytes('<b><c></c></b>'),
b)
def test_clear_tail(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<a><b></b>B2<c></c>C2</a>')
+ f = BytesIO('<a><b></b>B2<c></c>C2</a>')
doc = ElementTree(file=f)
a = doc.getroot()
a.clear()
self.assertXML(
- '<a></a>',
+ _bytes('<a></a>'),
a)
def test_insert(self):
@@ -1451,7 +1437,7 @@
a[0])
self.assertXML(
- '<a><d></d><b></b><c></c></a>',
+ _bytes('<a><d></d><b></b><c></c></a>'),
a)
e = Element('e')
@@ -1460,7 +1446,7 @@
e,
a[2])
self.assertXML(
- '<a><d></d><b></b><e></e><c></c></a>',
+ _bytes('<a><d></d><b></b><e></e><c></c></a>'),
a)
def test_insert_beyond_index(self):
@@ -1476,7 +1462,7 @@
c,
a[1])
self.assertXML(
- '<a><b></b><c></c></a>',
+ _bytes('<a><b></b><c></c></a>'),
a)
def test_insert_negative(self):
@@ -1493,7 +1479,7 @@
d,
a[-2])
self.assertXML(
- '<a><b></b><d></d><c></c></a>',
+ _bytes('<a><b></b><d></d><c></c></a>'),
a)
def test_insert_tail(self):
@@ -1508,7 +1494,7 @@
a.insert(0, c)
self.assertXML(
- '<a><c></c>C2<b></b></a>',
+ _bytes('<a><c></c>C2<b></b></a>'),
a)
def test_remove(self):
@@ -1524,7 +1510,7 @@
c,
a[0])
self.assertXML(
- '<a><c></c></a>',
+ _bytes('<a><c></c></a>'),
a)
def test_remove_ns(self):
@@ -1537,10 +1523,10 @@
a.remove(b)
self.assertXML(
- '<ns0:a xmlns:ns0="http://test"><ns0:c></ns0:c></ns0:a>',
+ _bytes('<ns0:a xmlns:ns0="http://test"><ns0:c></ns0:c></ns0:a>'),
a)
self.assertXML(
- '<ns0:b xmlns:ns0="http://test"></ns0:b>',
+ _bytes('<ns0:b xmlns:ns0="http://test"></ns0:b>'),
b)
def test_remove_nonexisting(self):
@@ -1563,7 +1549,7 @@
b.tail = 'b2'
a.remove(b)
self.assertXML(
- '<a></a>',
+ _bytes('<a></a>'),
a)
self.assertEquals('b2', b.tail)
@@ -1577,7 +1563,7 @@
d = SubElement(b, 'd')
e = SubElement(c, 'e')
self.assertXML(
- '<a><b><d></d></b><c><e></e></c></a>',
+ _bytes('<a><b><d></d></b><c><e></e></c></a>'),
a)
self.assertEquals(
[b, c],
@@ -1595,7 +1581,7 @@
a = Element('a')
b = a.makeelement('c', {'hoi':'dag'})
self.assertXML(
- '<c hoi="dag"></c>',
+ _bytes('<c hoi="dag"></c>'),
b)
def test_iter(self):
@@ -1882,7 +1868,7 @@
def test_getslice_text(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<a><b>B</b>B1<c>C</c>C1</a>')
+ f = BytesIO('<a><b>B</b>B1<c>C</c>C1</a>')
doc = ElementTree(file=f)
a = doc.getroot()
b = a[0]
@@ -1918,7 +1904,7 @@
new,
a[1])
self.assertXML(
- '<a><b></b><new></new><c></c></a>',
+ _bytes('<a><b></b><new></new><c></c></a>'),
a)
def test_delslice(self):
@@ -2013,17 +1999,17 @@
def test_delslice_child_tail(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<a><b></b>B2<c></c>C2<d></d>D2<e></e>E2</a>')
+ f = BytesIO('<a><b></b>B2<c></c>C2<d></d>D2<e></e>E2</a>')
doc = ElementTree(file=f)
a = doc.getroot()
del a[1:3]
self.assertXML(
- '<a><b></b>B2<e></e>E2</a>',
+ _bytes('<a><b></b>B2<e></e>E2</a>'),
a)
def test_delslice_tail(self):
XML = self.etree.XML
- a = XML('<a><b></b>B2<c></c>C2</a>')
+ a = XML(_bytes('<a><b></b>B2<c></c>C2</a>'))
b, c = a
del a[:]
@@ -2220,7 +2206,7 @@
def test_setslice_tail(self):
ElementTree = self.etree.ElementTree
Element = self.etree.Element
- f = StringIO('<a><b></b>B2<c></c>C2<d></d>D2<e></e>E2</a>')
+ f = BytesIO('<a><b></b>B2<c></c>C2<d></d>D2<e></e>E2</a>')
doc = ElementTree(file=f)
a = doc.getroot()
x = Element('x')
@@ -2231,7 +2217,7 @@
z.tail = 'Z2'
a[1:3] = [x, y, z]
self.assertXML(
- '<a><b></b>B2<x></x>X2<y></y>Y2<z></z>Z2<e></e>E2</a>',
+ _bytes('<a><b></b>B2<x></x>X2<y></y>Y2<z></z>Z2<e></e>E2</a>'),
a)
def test_setslice_negative(self):
@@ -2348,7 +2334,7 @@
def test_ns_access(self):
ElementTree = self.etree.ElementTree
ns = 'http://xml.infrae.com/1'
- f = StringIO('<x:a xmlns:x="%s"><x:b></x:b></x:a>' % ns)
+ f = BytesIO('<x:a xmlns:x="%s"><x:b></x:b></x:a>' % ns)
t = ElementTree(file=f)
a = t.getroot()
self.assertEquals('{%s}a' % ns,
@@ -2360,7 +2346,7 @@
ElementTree = self.etree.ElementTree
ns = 'http://xml.infrae.com/1'
ns2 = 'http://xml.infrae.com/2'
- f = StringIO('<x:a xmlns:x="%s" xmlns:y="%s"><x:b></x:b><y:b></y:b></x:a>' % (ns, ns2))
+ f = BytesIO('<x:a xmlns:x="%s" xmlns:y="%s"><x:b></x:b><y:b></y:b></x:a>' % (ns, ns2))
t = ElementTree(file=f)
a = t.getroot()
self.assertEquals('{%s}a' % ns,
@@ -2398,7 +2384,7 @@
ns = 'http://xml.infrae.com/1'
ns2 = 'http://xml.infrae.com/2'
- f = StringIO('<a xmlns="%s" xmlns:x="%s"><x:b></x:b><b></b></a>' % (ns, ns2))
+ f = BytesIO('<a xmlns="%s" xmlns:x="%s"><x:b></x:b><b></b></a>' % (ns, ns2))
t = ElementTree(file=f)
a = t.getroot()
@@ -2424,17 +2410,17 @@
a.get('{%s}bar' % ns2))
try:
self.assertXML(
- '<a xmlns:ns0="%s" xmlns:ns1="%s" ns0:foo="Foo" ns1:bar="Bar"></a>' % (ns, ns2),
+ _bytes('<a xmlns:ns0="%s" xmlns:ns1="%s" ns0:foo="Foo" ns1:bar="Bar"></a>' % (ns, ns2)),
a)
except AssertionError:
self.assertXML(
- '<a xmlns:ns0="%s" xmlns:ns1="%s" ns1:foo="Foo" ns0:bar="Bar"></a>' % (ns2, ns),
+ _bytes('<a xmlns:ns0="%s" xmlns:ns1="%s" ns1:foo="Foo" ns0:bar="Bar"></a>' % (ns2, ns)),
a)
def test_ns_move(self):
Element = self.etree.Element
one = self.etree.fromstring(
- '<foo><bar xmlns:ns="http://a.b.c"><ns:baz/></bar></foo>')
+ _bytes('<foo><bar xmlns:ns="http://a.b.c"><ns:baz/></bar></foo>'))
baz = one[0][0]
two = Element('root')
@@ -2447,33 +2433,33 @@
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>')
+ _bytes('<foo><bar xmlns:ns="http://a.b.c"><ns:baz/></bar></foo>'))
baz = root[0][0]
- nsdecl = re.findall("xmlns(?::[a-z0-9]+)?=[\"']([^\"']+)[\"']",
+ nsdecl = re.findall(_bytes("xmlns(?::[a-z0-9]+)?=[\"']([^\"']+)[\"']"),
tostring(baz))
- self.assertEquals(["http://a.b.c"], nsdecl)
+ self.assertEquals([_bytes("http://a.b.c")], nsdecl)
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>')
+ _bytes('<foo><bar xmlns="http://a.b.c"><baz/></bar></foo>'))
baz = root[0][0]
- nsdecl = re.findall("xmlns(?::[a-z0-9]+)?=[\"']([^\"']+)[\"']",
+ nsdecl = re.findall(_bytes("xmlns(?::[a-z0-9]+)?=[\"']([^\"']+)[\"']"),
tostring(baz))
- self.assertEquals(["http://a.b.c"], nsdecl)
+ self.assertEquals([_bytes("http://a.b.c")], nsdecl)
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>')
+ _bytes('<foo xmlns:ns="http://a.b.c"><bar><ns:baz/></bar></foo>'))
baz = root[0][0]
- nsdecl = re.findall("xmlns(?::[a-z0-9]+)?=[\"']([^\"']+)[\"']",
+ nsdecl = re.findall(_bytes("xmlns(?::[a-z0-9]+)?=[\"']([^\"']+)[\"']"),
tostring(baz))
- self.assertEquals(["http://a.b.c"], nsdecl)
+ self.assertEquals([_bytes("http://a.b.c")], nsdecl)
def test_ns_decl_tostring_element(self):
Element = self.etree.Element
@@ -2483,10 +2469,10 @@
bar = SubElement(root, "{http://a.b.c}bar")
baz = SubElement(bar, "{http://a.b.c}baz")
- nsdecl = re.findall("xmlns(?::[a-z0-9]+)?=[\"']([^\"']+)[\"']",
+ nsdecl = re.findall(_bytes("xmlns(?::[a-z0-9]+)?=[\"']([^\"']+)[\"']"),
self.etree.tostring(baz))
- self.assertEquals(["http://a.b.c"], nsdecl)
+ self.assertEquals([_bytes("http://a.b.c")], nsdecl)
def test_attribute_xmlns_move(self):
Element = self.etree.Element
@@ -2503,8 +2489,8 @@
root.append(subelement)
self.assertEquals(1, len(subelement.attrib))
self.assertEquals(
- {"{http://www.w3.org/XML/1998/namespace}id" : "foo"}.items(),
- subelement.attrib.items())
+ list({"{http://www.w3.org/XML/1998/namespace}id" : "foo"}.items()),
+ list(subelement.attrib.items()))
self.assertEquals(
"foo",
subelement.get("{http://www.w3.org/XML/1998/namespace}id"))
@@ -2515,10 +2501,10 @@
ns_href = "http://a.b.c"
one = parse(
- StringIO('<foo><bar xmlns:ns="%s"><ns:baz/></bar></foo>' % ns_href))
+ BytesIO('<foo><bar xmlns:ns="%s"><ns:baz/></bar></foo>' % ns_href))
baz = one.getroot()[0][0]
- parsed = parse(StringIO( tostring(baz) )).getroot()
+ parsed = parse(BytesIO( tostring(baz) )).getroot()
self.assertEquals('{%s}baz' % ns_href, parsed.tag)
def test_tostring(self):
@@ -2530,7 +2516,7 @@
b = SubElement(a, 'b')
c = SubElement(a, 'c')
- self.assertEquals('<a><b></b><c></c></a>',
+ self.assertEquals(_bytes('<a><b></b><c></c></a>'),
canonicalize(tostring(a)))
def test_tostring_element(self):
@@ -2542,9 +2528,9 @@
b = SubElement(a, 'b')
c = SubElement(a, 'c')
d = SubElement(c, 'd')
- self.assertEquals('<b></b>',
+ self.assertEquals(_bytes('<b></b>'),
canonicalize(tostring(b)))
- self.assertEquals('<c><d></d></c>',
+ self.assertEquals(_bytes('<c><d></d></c>'),
canonicalize(tostring(c)))
def test_tostring_element_tail(self):
@@ -2558,8 +2544,8 @@
d = SubElement(c, 'd')
b.tail = 'Foo'
- self.assert_(tostring(b) == '<b/>Foo' or
- tostring(b) == '<b />Foo')
+ self.assert_(tostring(b) == _bytes('<b/>Foo') or
+ tostring(b) == _bytes('<b />Foo'))
def test_tostring_method_html(self):
tostring = self.etree.tostring
@@ -2572,7 +2558,7 @@
p.text = "html"
SubElement(p, 'br').tail = "test"
- self.assertEquals('<html><body><p>html<br>test</p></body></html>',
+ self.assertEquals(_bytes('<html><body><p>html<br>test</p></body></html>'),
tostring(html, method="html"))
def test_tostring_method_text(self):
@@ -2589,12 +2575,12 @@
c = SubElement(a, 'c')
c.text = "C"
- self.assertEquals('ABTAILCtail',
+ self.assertEquals(_bytes('ABTAILCtail'),
tostring(a, method="text"))
def test_iterparse(self):
iterparse = self.etree.iterparse
- f = StringIO('<a><b></b><c/></a>')
+ f = BytesIO('<a><b></b><c/></a>')
iterator = iterparse(f)
self.assertEquals(None,
@@ -2618,7 +2604,7 @@
def test_iterparse_start(self):
iterparse = self.etree.iterparse
- f = StringIO('<a><b></b><c/></a>')
+ f = BytesIO('<a><b></b><c/></a>')
iterator = iterparse(f, events=('start',))
events = list(iterator)
@@ -2629,7 +2615,7 @@
def test_iterparse_start_end(self):
iterparse = self.etree.iterparse
- f = StringIO('<a><b></b><c/></a>')
+ f = BytesIO('<a><b></b><c/></a>')
iterator = iterparse(f, events=('start','end'))
events = list(iterator)
@@ -2641,7 +2627,7 @@
def test_iterparse_clear(self):
iterparse = self.etree.iterparse
- f = StringIO('<a><b></b><c/></a>')
+ f = BytesIO('<a><b></b><c/></a>')
iterator = iterparse(f)
for event, elem in iterator:
@@ -2654,7 +2640,7 @@
def test_iterparse_large(self):
iterparse = self.etree.iterparse
CHILD_COUNT = 12345
- f = StringIO('<a>%s</a>' % ('<b>test</b>'*CHILD_COUNT))
+ f = BytesIO('<a>%s</a>' % ('<b>test</b>'*CHILD_COUNT))
i = 0
for key in iterparse(f):
@@ -2664,7 +2650,7 @@
def test_iterparse_attrib_ns(self):
iterparse = self.etree.iterparse
- f = StringIO('<a xmlns="ns1"><b><c xmlns="ns2"/></b></a>')
+ f = BytesIO('<a xmlns="ns1"><b><c xmlns="ns2"/></b></a>')
attr_name = '{testns}bla'
events = []
@@ -2690,7 +2676,7 @@
def test_iterparse_getiterator(self):
iterparse = self.etree.iterparse
- f = StringIO('<a><b><d/></b><c/></a>')
+ f = BytesIO('<a><b><d/></b><c/></a>')
counts = []
for event, elem in iterparse(f):
@@ -2701,7 +2687,7 @@
def test_iterparse_move_elements(self):
iterparse = self.etree.iterparse
- f = StringIO('<a><b><d/></b><c/></a>')
+ f = BytesIO('<a><b><d/></b><c/></a>')
for event, node in etree.iterparse(f): pass
@@ -2714,12 +2700,12 @@
def test_iterparse_cdata(self):
tostring = self.etree.tostring
- f = StringIO('<root><![CDATA[test]]></root>')
+ f = BytesIO('<root><![CDATA[test]]></root>')
context = self.etree.iterparse(f)
content = [ el.text for event,el in context ]
self.assertEquals(['test'], content)
- self.assertEquals('<root>test</root>',
+ self.assertEquals(_bytes('<root>test</root>'),
tostring(context.root))
def test_parse_file(self):
@@ -2727,7 +2713,7 @@
# from file
tree = parse(fileInTestDir('test.xml'))
self.assertXML(
- '<a><b></b></a>',
+ _bytes('<a><b></b></a>'),
tree.getroot())
def test_parse_file_nonexistent(self):
@@ -2741,60 +2727,59 @@
def test_parse_error(self):
# ET < 1.3 raises ExpatError
parse = self.etree.parse
- f = StringIO('<a><b></c></b></a>')
+ f = BytesIO('<a><b></c></b></a>')
self.assertRaises(SyntaxError, parse, f)
f.close()
def test_parse_error_from_file(self):
parse = self.etree.parse
# from file
- f = open(fileInTestDir('test_broken.xml'), 'r')
+ f = open(fileInTestDir('test_broken.xml'), 'rb')
self.assertRaises(SyntaxError, parse, f)
f.close()
def test_parse_file_object(self):
parse = self.etree.parse
# from file object
- f = open(fileInTestDir('test.xml'), 'r')
+ f = open(fileInTestDir('test.xml'), 'rb')
tree = parse(f)
f.close()
self.assertXML(
- '<a><b></b></a>',
+ _bytes('<a><b></b></a>'),
tree.getroot())
def test_parse_stringio(self):
parse = self.etree.parse
- # from StringIO
- f = StringIO('<a><b></b></a>')
+ f = BytesIO('<a><b></b></a>')
tree = parse(f)
f.close()
self.assertXML(
- '<a><b></b></a>',
+ _bytes('<a><b></b></a>'),
tree.getroot()
)
def test_parse_cdata(self):
tostring = self.etree.tostring
- root = self.etree.XML('<root><![CDATA[test]]></root>')
+ root = self.etree.XML(_bytes('<root><![CDATA[test]]></root>'))
self.assertEquals('test', root.text)
- self.assertEquals('<root>test</root>',
+ self.assertEquals(_bytes('<root>test</root>'),
tostring(root))
def test_parse_with_encoding(self):
# this can fail in libxml2 <= 2.6.22
parse = self.etree.parse
- tree = parse(StringIO('<?xml version="1.0" encoding="ascii"?><html/>'))
- self.assertXML('<html></html>',
+ tree = parse(BytesIO('<?xml version="1.0" encoding="ascii"?><html/>'))
+ self.assertXML(_bytes('<html></html>'),
tree.getroot())
def test_encoding(self):
Element = self.etree.Element
a = Element('a')
- a.text = unicode_literal('Søk på nettet')
+ a.text = _str('Søk på nettet')
self.assertXML(
- unicode_literal('<a>Søk på nettet</a>').encode('UTF-8'),
+ _str('<a>Søk på nettet</a>').encode('UTF-8'),
a, 'utf-8')
def test_encoding_exact(self):
@@ -2802,30 +2787,30 @@
Element = self.etree.Element
a = Element('a')
- a.text = unicode_literal('Søk på nettet')
+ a.text = _str('Søk på nettet')
- f = StringIO()
+ f = BytesIO()
tree = ElementTree(element=a)
tree.write(f, encoding='utf-8')
- self.assertEquals(unicode_literal('<a>Søk på nettet</a>').encode('UTF-8'),
- f.getvalue().replace('\n',''))
+ self.assertEquals(_str('<a>Søk på nettet</a>').encode('UTF-8'),
+ f.getvalue().replace(_bytes('\n'),_bytes('')))
def test_parse_file_encoding(self):
parse = self.etree.parse
# from file
tree = parse(fileInTestDir('test-string.xml'))
self.assertXML(
- unicode_literal('<a>Søk på nettet</a>').encode('UTF-8'),
+ _str('<a>Søk på nettet</a>').encode('UTF-8'),
tree.getroot(), 'UTF-8')
def test_parse_file_object_encoding(self):
parse = self.etree.parse
# from file object
- f = open(fileInTestDir('test-string.xml'), 'r')
+ f = open(fileInTestDir('test-string.xml'), 'rb')
tree = parse(f)
f.close()
self.assertXML(
- unicode_literal('<a>Søk på nettet</a>').encode('UTF-8'),
+ _str('<a>Søk på nettet</a>').encode('UTF-8'),
tree.getroot(), 'UTF-8')
def test_encoding_8bit_latin1(self):
@@ -2833,29 +2818,29 @@
Element = self.etree.Element
a = Element('a')
- a.text = unicode_literal('Søk på nettet')
+ a.text = _str('Søk på nettet')
- f = StringIO()
+ f = BytesIO()
tree = ElementTree(element=a)
tree.write(f, encoding='iso-8859-1')
result = f.getvalue()
- declaration = "<?xml version=\'1.0\' encoding=\'iso-8859-1\'?>"
- self.assertEncodingDeclaration(result,'iso-8859-1')
- result = result.split('?>', 1)[-1].replace('\n','')
- self.assertEquals(unicode_literal('<a>Søk på nettet</a>').encode('iso-8859-1'),
+ declaration = _bytes("<?xml version=\'1.0\' encoding=\'iso-8859-1\'?>")
+ self.assertEncodingDeclaration(result, _bytes('iso-8859-1'))
+ result = result.split(_bytes('?>'), 1)[-1].replace(_bytes('\n'),_bytes(''))
+ self.assertEquals(_str('<a>Søk på nettet</a>').encode('iso-8859-1'),
result)
def test_parse_encoding_8bit_explicit(self):
XMLParser = self.etree.XMLParser
- text = unicode_literal('Søk på nettet')
- xml_latin1 = (unicode_literal('<a>%s</a>') % text).encode('iso-8859-1')
+ text = _str('Søk på nettet')
+ xml_latin1 = (_str('<a>%s</a>') % text).encode('iso-8859-1')
self.assertRaises(self.etree.ParseError,
self.etree.parse,
- StringIO(xml_latin1))
+ BytesIO(xml_latin1))
- tree = self.etree.parse(StringIO(xml_latin1),
+ tree = self.etree.parse(BytesIO(xml_latin1),
XMLParser(encoding="iso-8859-1"))
a = tree.getroot()
self.assertEquals(a.text, text)
@@ -2863,16 +2848,16 @@
def test_parse_encoding_8bit_override(self):
XMLParser = self.etree.XMLParser
- text = unicode_literal('Søk på nettet')
- wrong_declaration = "<?xml version='1.0' encoding='UTF-8'?>"
- xml_latin1 = (unicode_literal('%s<a>%s</a>') % (wrong_declaration, text)
+ text = _str('Søk på nettet')
+ wrong_declaration = _str("<?xml version='1.0' encoding='UTF-8'?>")
+ xml_latin1 = (_str('%s<a>%s</a>') % (wrong_declaration, text)
).encode('iso-8859-1')
self.assertRaises(self.etree.ParseError,
self.etree.parse,
- StringIO(xml_latin1))
+ BytesIO(xml_latin1))
- tree = self.etree.parse(StringIO(xml_latin1),
+ tree = self.etree.parse(BytesIO(xml_latin1),
XMLParser(encoding="iso-8859-1"))
a = tree.getroot()
self.assertEquals(a.text, text)
@@ -2880,8 +2865,8 @@
def _test_wrong_unicode_encoding(self):
# raise error on wrong encoding declaration in unicode strings
XML = self.etree.XML
- test_utf = (unicode_literal('<?xml version="1.0" encoding="iso-8859-1"?>') +
- unicode_literal('<a>Søk på nettet</a>'))
+ test_utf = (_str('<?xml version="1.0" encoding="iso-8859-1"?>') +
+ _str('<a>Søk på nettet</a>'))
self.assertRaises(SyntaxError, XML, test_utf)
def test_encoding_write_default_encoding(self):
@@ -2889,14 +2874,14 @@
Element = self.etree.Element
a = Element('a')
- a.text = unicode_literal('Søk på nettet')
+ a.text = _str('Søk på nettet')
- f = StringIO()
+ f = BytesIO()
tree = ElementTree(element=a)
tree.write(f)
- data = f.getvalue().replace('\n','')
+ data = f.getvalue().replace(_bytes('\n'),_bytes(''))
self.assertEquals(
- unicode_literal('<a>Søk på nettet</a>').encode('ASCII', 'xmlcharrefreplace'),
+ _str('<a>Søk på nettet</a>').encode('ASCII', 'xmlcharrefreplace'),
data)
def test_encoding_tostring(self):
@@ -2904,8 +2889,8 @@
tostring = self.etree.tostring
a = Element('a')
- a.text = unicode_literal('Søk på nettet')
- self.assertEquals(unicode_literal('<a>Søk på nettet</a>').encode('UTF-8'),
+ a.text = _str('Søk på nettet')
+ self.assertEquals(_str('<a>Søk på nettet</a>').encode('UTF-8'),
tostring(a, encoding='utf-8'))
def test_encoding_tostring_unknown(self):
@@ -2913,7 +2898,7 @@
tostring = self.etree.tostring
a = Element('a')
- a.text = unicode_literal('Søk på nettet')
+ a.text = _str('Søk på nettet')
self.assertRaises(LookupError, tostring, a,
encoding='Invalid Encoding')
@@ -2924,8 +2909,8 @@
a = Element('a')
b = SubElement(a, 'b')
- b.text = unicode_literal('Søk på nettet')
- self.assertEquals(unicode_literal('<b>Søk på nettet</b>').encode('UTF-8'),
+ b.text = _str('Søk på nettet')
+ self.assertEquals(_str('<b>Søk på nettet</b>').encode('UTF-8'),
tostring(b, encoding='utf-8'))
def test_encoding_tostring_sub_tail(self):
@@ -2935,9 +2920,9 @@
a = Element('a')
b = SubElement(a, 'b')
- b.text = unicode_literal('Søk på nettet')
- b.tail = unicode_literal('Søk')
- self.assertEquals(unicode_literal('<b>Søk på nettet</b>Søk').encode('UTF-8'),
+ b.text = _str('Søk på nettet')
+ b.tail = _str('Søk')
+ self.assertEquals(_str('<b>Søk på nettet</b>Søk').encode('UTF-8'),
tostring(b, encoding='utf-8'))
def test_encoding_tostring_default_encoding(self):
@@ -2946,9 +2931,9 @@
tostring = self.etree.tostring
a = Element('a')
- a.text = unicode_literal('Søk på nettet')
+ a.text = _str('Søk på nettet')
- expected = '<a>Søk på nettet</a>'
+ expected = _bytes('<a>Søk på nettet</a>')
self.assertEquals(
expected,
tostring(a))
@@ -2960,36 +2945,36 @@
a = Element('a')
b = SubElement(a, 'b')
- b.text = unicode_literal('Søk på nettet')
+ b.text = _str('Søk på nettet')
- expected = '<b>Søk på nettet</b>'
+ expected = _bytes('<b>Søk på nettet</b>')
self.assertEquals(
expected,
tostring(b))
def test_encoding_8bit_xml(self):
- utext = unicode_literal('Søk på nettet')
- uxml = unicode_literal('<p>%s</p>') % utext
- prologue = '<?xml version="1.0" encoding="iso-8859-1" ?>'
+ utext = _str('Søk på nettet')
+ uxml = _str('<p>%s</p>') % utext
+ prologue = _bytes('<?xml version="1.0" encoding="iso-8859-1" ?>')
isoxml = prologue + uxml.encode('iso-8859-1')
tree = self.etree.XML(isoxml)
self.assertEquals(utext, tree.text)
def test_encoding_utf8_bom(self):
- utext = unicode_literal('Søk på nettet')
- uxml = (unicode_literal('<?xml version="1.0" encoding="UTF-8"?>') +
- unicode_literal('<p>%s</p>') % utext)
- bom = '\xEF\xBB\xBF'
+ utext = _str('Søk på nettet')
+ uxml = (_str('<?xml version="1.0" encoding="UTF-8"?>') +
+ _str('<p>%s</p>') % utext)
+ bom = _bytes('\xEF\xBB\xBF')
xml = bom + uxml.encode("utf-8")
tree = etree.XML(xml)
self.assertEquals(utext, tree.text)
def test_encoding_8bit_parse_stringio(self):
- utext = unicode_literal('Søk på nettet')
- uxml = unicode_literal('<p>%s</p>') % utext
- prologue = '<?xml version="1.0" encoding="iso-8859-1" ?>'
+ utext = _str('Søk på nettet')
+ uxml = _str('<p>%s</p>') % utext
+ prologue = _bytes('<?xml version="1.0" encoding="iso-8859-1" ?>')
isoxml = prologue + uxml.encode('iso-8859-1')
- el = self.etree.parse(StringIO(isoxml)).getroot()
+ el = self.etree.parse(BytesIO(isoxml)).getroot()
self.assertEquals(utext, el.text)
def test_deepcopy_elementtree(self):
@@ -3063,9 +3048,9 @@
self.assertEquals('BarText', b.text)
def test_deepcopy_namespaces(self):
- root = self.etree.XML('''<doc xmlns="dns" xmlns:t="tns">
+ root = self.etree.XML(_bytes('''<doc xmlns="dns" xmlns:t="tns">
<parent><node t:foo="bar" /></parent>
- </doc>''')
+ </doc>'''))
self.assertEquals(
root[0][0].get('{tns}foo'),
copy.deepcopy(root[0])[0].get('{tns}foo') )
@@ -3083,10 +3068,10 @@
a.append( Element('C') )
b.append( Element('X') )
- self.assertEquals('<a><C/></a>',
- tostring(a).replace(' ', ''))
- self.assertEquals('<a><X/></a>',
- tostring(b).replace(' ', ''))
+ self.assertEquals(_bytes('<a><C/></a>'),
+ tostring(a).replace(_bytes(' '), _bytes('')))
+ self.assertEquals(_bytes('<a><X/></a>'),
+ tostring(b).replace(_bytes(' '), _bytes('')))
def test_deepcopy_comment(self):
# previously caused a crash
@@ -3151,16 +3136,16 @@
b = etree.SubElement(a, 'b')
t = etree.ElementTree(a)
- self.assertEquals(self._rootstring(t), '<a><b/></a>')
+ self.assertEquals(self._rootstring(t), _bytes('<a><b/></a>'))
t1 = etree.ElementTree(a)
- self.assertEquals(self._rootstring(t1), '<a><b/></a>')
- self.assertEquals(self._rootstring(t), '<a><b/></a>')
+ self.assertEquals(self._rootstring(t1), _bytes('<a><b/></a>'))
+ self.assertEquals(self._rootstring(t), _bytes('<a><b/></a>'))
t2 = etree.ElementTree(b)
- self.assertEquals(self._rootstring(t2), '<b/>')
- self.assertEquals(self._rootstring(t1), '<a><b/></a>')
- self.assertEquals(self._rootstring(t), '<a><b/></a>')
+ self.assertEquals(self._rootstring(t2), _bytes('<b/>'))
+ self.assertEquals(self._rootstring(t1), _bytes('<a><b/></a>'))
+ self.assertEquals(self._rootstring(t), _bytes('<a><b/></a>'))
def test_qname(self):
etree = self.etree
@@ -3209,7 +3194,7 @@
a.set(qname, qname)
self.assertXML(
- '<ns0:a xmlns:ns0="http://myns" ns0:a="ns0:a"></ns0:a>',
+ _bytes('<ns0:a xmlns:ns0="http://myns" ns0:a="ns0:a"></ns0:a>'),
a)
def test_qname_attribute_resolve_new(self):
@@ -3219,7 +3204,7 @@
a.set('a', qname)
self.assertXML(
- '<a xmlns:ns0="http://myns" a="ns0:a"></a>',
+ _bytes('<a xmlns:ns0="http://myns" a="ns0:a"></a>'),
a)
def test_qname_attrib_resolve(self):
@@ -3229,7 +3214,7 @@
a.attrib[qname] = qname
self.assertXML(
- '<ns0:a xmlns:ns0="http://myns" ns0:a="ns0:a"></ns0:a>',
+ _bytes('<ns0:a xmlns:ns0="http://myns" ns0:a="ns0:a"></ns0:a>'),
a)
def test_parser_version(self):
@@ -3330,7 +3315,7 @@
class Target(object):
def start(self, tag, attrib):
events.append("start-" + tag)
- for name, value in attrib.iteritems():
+ for name, value in attrib.items():
assertEquals(tag + name, value)
def end(self, tag):
events.append("end-" + tag)
@@ -3476,7 +3461,7 @@
"""
data = self.etree.tostring(element, encoding=encoding)
if encoding != 'us-ascii':
- data = unicode(data, encoding)
+ data = data.decode(encoding)
return canonicalize(data)
def _writeElementFile(self, element, encoding='us-ascii'):
@@ -3496,13 +3481,13 @@
os.close(handle)
os.remove(filename)
if encoding != 'us-ascii':
- data = unicode(data, encoding)
+ data = data.decode(encoding)
return canonicalize(data)
def assertXML(self, expected, element, encoding='us-ascii'):
"""Writes element out and checks whether it is expected.
- Does this two ways; once using StringIO, once using a real file.
+ Does this two ways; once using BytesIO, once using a real file.
"""
self.assertEquals(expected, self._writeElement(element, encoding))
self.assertEquals(expected, self._writeElementFile(element, encoding))
@@ -3515,7 +3500,8 @@
self.assertEquals(result_encoding.upper(), encoding.upper())
def _rootstring(self, tree):
- return self.etree.tostring(tree.getroot()).replace(' ', '').replace('\n', '')
+ return self.etree.tostring(tree.getroot()).replace(
+ _bytes(' '), _bytes('')).replace(_bytes('\n'), _bytes(''))
def _check_element_tree(self, tree):
self._check_element(tree.getroot())
@@ -3543,6 +3529,7 @@
def _check_mapping(self, mapping):
len(mapping)
keys = mapping.keys()
+ values = mapping.values()
items = mapping.items()
for key in keys:
item = mapping[key]
@@ -3573,4 +3560,4 @@
return suite
if __name__ == '__main__':
- print ('to test use test.py %s' % __file__)
+ print('to test use test.py %s' % __file__)
Modified: lxml/trunk/src/lxml/tests/test_errors.py
==============================================================================
--- lxml/trunk/src/lxml/tests/test_errors.py (original)
+++ lxml/trunk/src/lxml/tests/test_errors.py Tue May 20 00:02:14 2008
@@ -43,4 +43,4 @@
return suite
if __name__ == '__main__':
- print 'to test use test.py %s' % __file__
+ print('to test use test.py %s' % __file__)
Modified: lxml/trunk/src/lxml/tests/test_etree.py
==============================================================================
--- lxml/trunk/src/lxml/tests/test_etree.py (original)
+++ lxml/trunk/src/lxml/tests/test_etree.py Tue May 20 00:02:14 2008
@@ -7,30 +7,31 @@
test_elementtree
"""
+import os.path, unittest, copy, sys, operator
-import unittest, copy, sys, operator
+this_dir = os.path.dirname(__file__)
+if this_dir not in sys.path:
+ sys.path.insert(0, this_dir) # needed for Py3
-from common_imports import etree, StringIO, HelperTestCase, fileInTestDir
+from common_imports import etree, StringIO, BytesIO, HelperTestCase, fileInTestDir
from common_imports import SillyFileLike, canonicalize, doctest
+from common_imports import sorted, _str, _bytes
-print
-print "TESTED VERSION:", etree.__version__
-print " Python: ", sys.version_info
-print " lxml.etree: ", etree.LXML_VERSION
-print " libxml used: ", etree.LIBXML_VERSION
-print " libxml compiled: ", etree.LIBXML_COMPILED_VERSION
-print " libxslt used: ", etree.LIBXSLT_VERSION
-print " libxslt compiled: ", etree.LIBXSLT_COMPILED_VERSION
-print
+print("")
+print("TESTED VERSION: %s" % etree.__version__)
+print(" Python: " + repr(sys.version_info))
+print(" lxml.etree: " + repr(etree.LXML_VERSION))
+print(" libxml used: " + repr(etree.LIBXML_VERSION))
+print(" libxml compiled: " + repr(etree.LIBXML_COMPILED_VERSION))
+print(" libxslt used: " + repr(etree.LIBXSLT_VERSION))
+print(" libxslt compiled: " + repr(etree.LIBXSLT_COMPILED_VERSION))
+print("")
try:
- sorted
+ _unicode = unicode
except NameError:
- # Python 2.3
- def sorted(seq):
- seq = list(seq)
- seq.sort()
- return seq
+ # Python 3
+ _unicode = str
class ETreeOnlyTestCase(HelperTestCase):
"""Tests only for etree, not ElementTree"""
@@ -198,7 +199,7 @@
def test_pi_parse(self):
XML = self.etree.XML
- root = XML("<test><?mypi my test ?></test>")
+ root = XML(_bytes("<test><?mypi my test ?></test>"))
self.assertEquals(root[0].target, "mypi")
self.assertEquals(root[0].text, "my test ")
@@ -228,11 +229,11 @@
tostring = self.etree.tostring
XMLParser = self.etree.XMLParser
- xml = '<a><!--A--><b><!-- B --><c/></b><!--C--></a>'
+ xml = _bytes('<a><!--A--><b><!-- B --><c/></b><!--C--></a>')
parser = XMLParser(remove_comments=True)
root = fromstring(xml, parser)
self.assertEquals(
- '<a><b><c/></b></a>',
+ _bytes('<a><b><c/></b></a>'),
tostring(root))
def test_parse_remove_pis(self):
@@ -240,9 +241,9 @@
tostring = self.etree.tostring
XMLParser = self.etree.XMLParser
- xml = '<?test?><a><?A?><b><?B?><c/></b><?C?></a><?tail?>'
+ xml = _bytes('<?test?><a><?A?><b><?B?><c/></b><?C?></a><?tail?>')
- f = StringIO(xml)
+ f = BytesIO(xml)
tree = parse(f)
self.assertEquals(
xml,
@@ -251,7 +252,7 @@
parser = XMLParser(remove_pis=True)
tree = parse(f, parser)
self.assertEquals(
- '<a><b><c/></b></a>',
+ _bytes('<a><b><c/></b></a>'),
tostring(tree))
def test_parse_parser_type_error(self):
@@ -261,13 +262,13 @@
def test_parse_error_logging(self):
parse = self.etree.parse
- # from StringIO
- f = StringIO('<a><b></c></b></a>')
+ f = BytesIO('<a><b></c></b></a>')
self.etree.clear_error_log()
try:
parse(f)
logs = None
- except SyntaxError, e:
+ except SyntaxError:
+ e = sys.exc_info()[1]
logs = e.error_log
f.close()
self.assert_([ log for log in logs
@@ -286,12 +287,12 @@
iterparse = self.etree.iterparse
tostring = self.etree.tostring
- f = StringIO('<a><!--A--><b><!-- B --><c/></b><!--C--></a>')
+ f = BytesIO('<a><!--A--><b><!-- B --><c/></b><!--C--></a>')
events = list(iterparse(f))
root = events[-1][1]
self.assertEquals(3, len(events))
self.assertEquals(
- '<a><!--A--><b><!-- B --><c/></b><!--C--></a>',
+ _bytes('<a><!--A--><b><!-- B --><c/></b><!--C--></a>'),
tostring(root))
def test_iterparse_comments(self):
@@ -305,14 +306,14 @@
else:
return el.tag
- f = StringIO('<a><!--A--><b><!-- B --><c/></b><!--C--></a>')
+ f = BytesIO('<a><!--A--><b><!-- B --><c/></b><!--C--></a>')
events = list(iterparse(f, events=('end', 'comment')))
root = events[-1][1]
self.assertEquals(6, len(events))
self.assertEquals(['A', ' B ', 'c', 'b', 'C', 'a'],
[ name(*item) for item in events ])
self.assertEquals(
- '<a><!--A--><b><!-- B --><c/></b><!--C--></a>',
+ _bytes('<a><!--A--><b><!-- B --><c/></b><!--C--></a>'),
tostring(root))
def test_iterparse_pis(self):
@@ -327,7 +328,7 @@
else:
return el.tag
- f = StringIO('<?pia a?><a><?pib b?><b><?pic c?><c/></b><?pid d?></a><?pie e?>')
+ f = BytesIO('<?pia a?><a><?pib b?><b><?pic c?><c/></b><?pid d?></a><?pie e?>')
events = list(iterparse(f, events=('end', 'pi')))
root = events[-2][1]
self.assertEquals(8, len(events))
@@ -335,14 +336,14 @@
('pid','d'), 'a', ('pie','e')],
[ name(*item) for item in events ])
self.assertEquals(
- '<?pia a?><a><?pib b?><b><?pic c?><c/></b><?pid d?></a><?pie e?>',
+ _bytes('<?pia a?><a><?pib b?><b><?pic c?><c/></b><?pid d?></a><?pie e?>'),
tostring(ElementTree(root)))
def test_iterparse_remove_comments(self):
iterparse = self.etree.iterparse
tostring = self.etree.tostring
- f = StringIO('<a><!--A--><b><!-- B --><c/></b><!--C--></a>')
+ f = BytesIO('<a><!--A--><b><!-- B --><c/></b><!--C--></a>')
events = list(iterparse(f, remove_comments=True,
events=('end', 'comment')))
root = events[-1][1]
@@ -350,18 +351,18 @@
self.assertEquals(['c', 'b', 'a'],
[ el.tag for (event, el) in events ])
self.assertEquals(
- '<a><b><c/></b></a>',
+ _bytes('<a><b><c/></b></a>'),
tostring(root))
def test_iterparse_broken(self):
iterparse = self.etree.iterparse
- f = StringIO('<a><b><c/></a>')
+ f = BytesIO('<a><b><c/></a>')
# ET raises ExpatError, lxml raises XMLSyntaxError
self.assertRaises(self.etree.XMLSyntaxError, list, iterparse(f))
def test_iterparse_strip(self):
iterparse = self.etree.iterparse
- f = StringIO("""
+ f = BytesIO("""
<a> \n \n <b> b test </b> \n
\n\t <c> \n </c> </a> \n """)
@@ -374,7 +375,7 @@
def test_iterparse_tag(self):
iterparse = self.etree.iterparse
- f = StringIO('<a><b><d/></b><c/></a>')
+ f = BytesIO('<a><b><d/></b><c/></a>')
iterator = iterparse(f, tag="b", events=('start', 'end'))
events = list(iterator)
@@ -385,7 +386,7 @@
def test_iterparse_tag_all(self):
iterparse = self.etree.iterparse
- f = StringIO('<a><b><d/></b><c/></a>')
+ f = BytesIO('<a><b><d/></b><c/></a>')
iterator = iterparse(f, tag="*", events=('start', 'end'))
events = list(iterator)
@@ -394,21 +395,21 @@
len(events))
def test_iterparse_encoding_error(self):
- text = u'Søk på nettet'
+ text = _str('Søk på nettet')
wrong_declaration = "<?xml version='1.0' encoding='UTF-8'?>"
- xml_latin1 = (u'%s<a>%s</a>' % (wrong_declaration, text)
+ xml_latin1 = (_str('%s<a>%s</a>') % (wrong_declaration, text)
).encode('iso-8859-1')
self.assertRaises(self.etree.ParseError,
- list, self.etree.iterparse(StringIO(xml_latin1)))
+ list, self.etree.iterparse(BytesIO(xml_latin1)))
def test_iterparse_encoding_8bit_override(self):
- text = u'Søk på nettet'
+ text = _str('Søk på nettet', encoding="UTF-8")
wrong_declaration = "<?xml version='1.0' encoding='UTF-8'?>"
- xml_latin1 = (u'%s<a>%s</a>' % (wrong_declaration, text)
+ xml_latin1 = (_str('%s<a>%s</a>') % (wrong_declaration, text)
).encode('iso-8859-1')
- iterator = self.etree.iterparse(StringIO(xml_latin1),
+ iterator = self.etree.iterparse(BytesIO(xml_latin1),
encoding="iso-8859-1")
self.assertEquals(1, len(list(iterator)))
@@ -417,12 +418,12 @@
def test_iterparse_keep_cdata(self):
tostring = self.etree.tostring
- f = StringIO('<root><![CDATA[test]]></root>')
+ f = BytesIO('<root><![CDATA[test]]></root>')
context = self.etree.iterparse(f, strip_cdata=False)
content = [ el.text for event,el in context ]
self.assertEquals(['test'], content)
- self.assertEquals('<root><![CDATA[test]]></root>',
+ self.assertEquals(_bytes('<root><![CDATA[test]]></root>'),
tostring(context.root))
def test_parser_encoding_unknown(self):
@@ -445,7 +446,7 @@
parser = self.etree.XMLParser(target=Target())
- parser.feed('<!--a--><root>A<!--b--><sub/><!--c-->B</root><!--d-->')
+ parser.feed(_bytes('<!--a--><root>A<!--b--><sub/><!--c-->B</root><!--d-->'))
done = parser.close()
self.assertEquals("DONE", done)
@@ -470,7 +471,7 @@
parser = self.etree.XMLParser(target=Target())
- parser.feed('<?test a?><root>A<?test b?>B</root><?test c?>')
+ parser.feed(_bytes('<?test a?><root>A<?test b?>B</root><?test c?>'))
done = parser.close()
self.assertEquals("DONE", done)
@@ -493,7 +494,7 @@
parser = self.etree.XMLParser(target=Target(),
strip_cdata=False)
- parser.feed('<root>A<a><![CDATA[ca]]></a>B</root>')
+ parser.feed(_bytes('<root>A<a><![CDATA[ca]]></a>B</root>'))
done = parser.close()
self.assertEquals("DONE", done)
@@ -503,7 +504,7 @@
def test_iterwalk_tag(self):
iterwalk = self.etree.iterwalk
- root = self.etree.XML('<a><b><d/></b><c/></a>')
+ root = self.etree.XML(_bytes('<a><b><d/></b><c/></a>'))
iterator = iterwalk(root, tag="b", events=('start', 'end'))
events = list(iterator)
@@ -513,7 +514,7 @@
def test_iterwalk_tag_all(self):
iterwalk = self.etree.iterwalk
- root = self.etree.XML('<a><b><d/></b><c/></a>')
+ root = self.etree.XML(_bytes('<a><b><d/></b><c/></a>'))
iterator = iterwalk(root, tag="*", events=('start', 'end'))
events = list(iterator)
@@ -523,7 +524,7 @@
def test_iterwalk(self):
iterwalk = self.etree.iterwalk
- root = self.etree.XML('<a><b></b><c/></a>')
+ root = self.etree.XML(_bytes('<a><b></b><c/></a>'))
events = list(iterwalk(root))
self.assertEquals(
@@ -532,7 +533,7 @@
def test_iterwalk_start(self):
iterwalk = self.etree.iterwalk
- root = self.etree.XML('<a><b></b><c/></a>')
+ root = self.etree.XML(_bytes('<a><b></b><c/></a>'))
iterator = iterwalk(root, events=('start',))
events = list(iterator)
@@ -542,7 +543,7 @@
def test_iterwalk_start_end(self):
iterwalk = self.etree.iterwalk
- root = self.etree.XML('<a><b></b><c/></a>')
+ root = self.etree.XML(_bytes('<a><b></b><c/></a>'))
iterator = iterwalk(root, events=('start','end'))
events = list(iterator)
@@ -553,7 +554,7 @@
def test_iterwalk_clear(self):
iterwalk = self.etree.iterwalk
- root = self.etree.XML('<a><b></b><c/></a>')
+ root = self.etree.XML(_bytes('<a><b></b><c/></a>'))
iterator = iterwalk(root)
for event, elem in iterator:
@@ -564,7 +565,7 @@
def test_iterwalk_attrib_ns(self):
iterwalk = self.etree.iterwalk
- root = self.etree.XML('<a xmlns="ns1"><b><c xmlns="ns2"/></b></a>')
+ root = self.etree.XML(_bytes('<a xmlns="ns1"><b><c xmlns="ns2"/></b></a>'))
attr_name = '{testns}bla'
events = []
@@ -589,7 +590,7 @@
def test_iterwalk_getiterator(self):
iterwalk = self.etree.iterwalk
- root = self.etree.XML('<a><b><d/></b><c/></a>')
+ root = self.etree.XML(_bytes('<a><b><d/></b><c/></a>'))
counts = []
for event, elem in iterwalk(root):
@@ -602,18 +603,18 @@
parse = self.etree.parse
parser = self.etree.XMLParser(dtd_validation=True)
assertEqual = self.assertEqual
- test_url = u"__nosuch.dtd"
+ test_url = _str("__nosuch.dtd")
class MyResolver(self.etree.Resolver):
def resolve(self, url, id, context):
assertEqual(url, test_url)
return self.resolve_string(
- u'''<!ENTITY myentity "%s">
- <!ELEMENT doc ANY>''' % url, context)
+ _str('''<!ENTITY myentity "%s">
+ <!ELEMENT doc ANY>''') % url, context)
parser.resolvers.add(MyResolver())
- xml = u'<!DOCTYPE doc SYSTEM "%s"><doc>&myentity;</doc>' % test_url
+ xml = _str('<!DOCTYPE doc SYSTEM "%s"><doc>&myentity;</doc>') % test_url
tree = parse(StringIO(xml), parser)
root = tree.getroot()
self.assertEquals(root.text, test_url)
@@ -622,7 +623,7 @@
parse = self.etree.parse
parser = self.etree.XMLParser(attribute_defaults=True)
assertEqual = self.assertEqual
- test_url = u"__nosuch.dtd"
+ test_url = _str("__nosuch.dtd")
class MyResolver(self.etree.Resolver):
def resolve(self, url, id, context):
@@ -632,7 +633,7 @@
parser.resolvers.add(MyResolver())
- xml = u'<!DOCTYPE a SYSTEM "%s"><a><b/></a>' % test_url
+ xml = _str('<!DOCTYPE a SYSTEM "%s"><a><b/></a>') % test_url
tree = parse(StringIO(xml), parser)
root = tree.getroot()
self.assertEquals(
@@ -644,7 +645,7 @@
parse = self.etree.parse
parser = self.etree.XMLParser(load_dtd=True)
assertEqual = self.assertEqual
- test_url = u"__nosuch.dtd"
+ test_url = _str("__nosuch.dtd")
class check(object):
resolved = False
@@ -657,14 +658,13 @@
parser.resolvers.add(MyResolver())
- xml = u'<!DOCTYPE doc SYSTEM "%s"><doc>&myentity;</doc>' % test_url
+ xml = _str('<!DOCTYPE doc SYSTEM "%s"><doc>&myentity;</doc>') % test_url
self.assertRaises(etree.XMLSyntaxError, parse, StringIO(xml), parser)
self.assert_(check.resolved)
def test_resolve_error(self):
parse = self.etree.parse
parser = self.etree.XMLParser(dtd_validation=True)
- test_url = u"__nosuch.dtd"
class _LocalException(Exception):
pass
@@ -675,8 +675,8 @@
parser.resolvers.add(MyResolver())
- xml = u'<!DOCTYPE doc SYSTEM "test"><doc>&myentity;</doc>'
- self.assertRaises(_LocalException, parse, StringIO(xml), parser)
+ xml = '<!DOCTYPE doc SYSTEM "test"><doc>&myentity;</doc>'
+ self.assertRaises(_LocalException, parse, BytesIO(xml), parser)
if etree.LIBXML_VERSION > (2,6,20):
def test_entity_parse(self):
@@ -686,14 +686,14 @@
Entity = self.etree.Entity
xml = '<!DOCTYPE doc SYSTEM "test"><doc>&myentity;</doc>'
- tree = parse(StringIO(xml), parser)
+ tree = parse(BytesIO(xml), parser)
root = tree.getroot()
self.assertEquals(root[0].tag, Entity)
self.assertEquals(root[0].text, "&myentity;")
self.assertEquals(root[0].tail, None)
self.assertEquals(root[0].name, "myentity")
- self.assertEquals('<doc>&myentity;</doc>',
+ self.assertEquals(_bytes('<doc>&myentity;</doc>'),
tostring(root))
def test_entity_append(self):
@@ -709,7 +709,7 @@
self.assertEquals(root[0].tail, None)
self.assertEquals(root[0].name, "test")
- self.assertEquals('<root>&test;</root>',
+ self.assertEquals(_bytes('<root>&test;</root>'),
tostring(root))
def test_entity_values(self):
@@ -737,7 +737,7 @@
self.assertEquals('test',
root.text)
- self.assertEquals('<root><![CDATA[test]]></root>',
+ self.assertEquals(_bytes('<root><![CDATA[test]]></root>'),
tostring(root))
def test_cdata_type(self):
@@ -748,7 +748,7 @@
root.text = CDATA("test")
self.assertEquals('test', root.text)
- root.text = CDATA(u"test")
+ root.text = CDATA(_str("test"))
self.assertEquals('test', root.text)
self.assertRaises(TypeError, CDATA, 1)
@@ -770,10 +770,10 @@
def test_cdata_parser(self):
tostring = self.etree.tostring
parser = self.etree.XMLParser(strip_cdata=False)
- root = self.etree.XML('<root><![CDATA[test]]></root>', parser)
+ root = self.etree.XML(_bytes('<root><![CDATA[test]]></root>'), parser)
self.assertEquals('test', root.text)
- self.assertEquals('<root><![CDATA[test]]></root>',
+ self.assertEquals(_bytes('<root><![CDATA[test]]></root>'),
tostring(root))
# TypeError in etree, AssertionError in ElementTree;
@@ -839,10 +839,10 @@
pi = PI('TARGET', 'TEXT')
pi.tail = "TAIL"
- self.assertEquals('<root><a></a></root>',
+ self.assertEquals(_bytes('<root><a></a></root>'),
self._writeElement(root))
root[0].addprevious(pi)
- self.assertEquals('<root><?TARGET TEXT?>TAIL<a></a></root>',
+ self.assertEquals(_bytes('<root><?TARGET TEXT?>TAIL<a></a></root>'),
self._writeElement(root))
def test_addprevious_root_pi(self):
@@ -852,10 +852,10 @@
pi = PI('TARGET', 'TEXT')
pi.tail = "TAIL"
- self.assertEquals('<root></root>',
+ self.assertEquals(_bytes('<root></root>'),
self._writeElement(root))
root.addprevious(pi)
- self.assertEquals('<?TARGET TEXT?>\n<root></root>',
+ self.assertEquals(_bytes('<?TARGET TEXT?>\n<root></root>'),
self._writeElement(root))
def test_addnext_pi(self):
@@ -867,10 +867,10 @@
pi = PI('TARGET', 'TEXT')
pi.tail = "TAIL"
- self.assertEquals('<root><a></a></root>',
+ self.assertEquals(_bytes('<root><a></a></root>'),
self._writeElement(root))
root[0].addnext(pi)
- self.assertEquals('<root><a></a><?TARGET TEXT?>TAIL</root>',
+ self.assertEquals(_bytes('<root><a></a><?TARGET TEXT?>TAIL</root>'),
self._writeElement(root))
def test_addnext_root_pi(self):
@@ -880,10 +880,10 @@
pi = PI('TARGET', 'TEXT')
pi.tail = "TAIL"
- self.assertEquals('<root></root>',
+ self.assertEquals(_bytes('<root></root>'),
self._writeElement(root))
root.addnext(pi)
- self.assertEquals('<root></root>\n<?TARGET TEXT?>',
+ self.assertEquals(_bytes('<root></root>\n<?TARGET TEXT?>'),
self._writeElement(root))
def test_addnext_comment(self):
@@ -895,10 +895,10 @@
comment = Comment('TEXT ')
comment.tail = "TAIL"
- self.assertEquals('<root><a></a></root>',
+ self.assertEquals(_bytes('<root><a></a></root>'),
self._writeElement(root))
root[0].addnext(comment)
- self.assertEquals('<root><a></a><!--TEXT -->TAIL</root>',
+ self.assertEquals(_bytes('<root><a></a><!--TEXT -->TAIL</root>'),
self._writeElement(root))
def test_addnext_root_comment(self):
@@ -908,10 +908,10 @@
comment = Comment('TEXT ')
comment.tail = "TAIL"
- self.assertEquals('<root></root>',
+ self.assertEquals(_bytes('<root></root>'),
self._writeElement(root))
root.addnext(comment)
- self.assertEquals('<root></root>\n<!--TEXT -->',
+ self.assertEquals(_bytes('<root></root>\n<!--TEXT -->'),
self._writeElement(root))
def test_addprevious_comment(self):
@@ -923,10 +923,10 @@
comment = Comment('TEXT ')
comment.tail = "TAIL"
- self.assertEquals('<root><a></a></root>',
+ self.assertEquals(_bytes('<root><a></a></root>'),
self._writeElement(root))
root[0].addprevious(comment)
- self.assertEquals('<root><!--TEXT -->TAIL<a></a></root>',
+ self.assertEquals(_bytes('<root><!--TEXT -->TAIL<a></a></root>'),
self._writeElement(root))
def test_addprevious_root_comment(self):
@@ -936,17 +936,17 @@
comment = Comment('TEXT ')
comment.tail = "TAIL"
- self.assertEquals('<root></root>',
+ self.assertEquals(_bytes('<root></root>'),
self._writeElement(root))
root.addprevious(comment)
- self.assertEquals('<!--TEXT -->\n<root></root>',
+ self.assertEquals(_bytes('<!--TEXT -->\n<root></root>'),
self._writeElement(root))
# ET's Elements have items() and key(), but not values()
def test_attribute_values(self):
XML = self.etree.XML
- root = XML('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>')
+ root = XML(_bytes('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>'))
values = root.values()
values.sort()
self.assertEquals(['Alpha', 'Beta', 'Gamma'], values)
@@ -959,7 +959,7 @@
a = Element('a')
a.append(Comment())
self.assertEquals(
- '<a><!----></a>',
+ _bytes('<a><!----></a>'),
self._writeElement(a))
# ElementTree ignores comments
@@ -967,8 +967,8 @@
ElementTree = self.etree.ElementTree
tostring = self.etree.tostring
- xml = '<a><b/><!----><c/></a>'
- f = StringIO(xml)
+ xml = _bytes('<a><b/><!----><c/></a>')
+ f = BytesIO(xml)
doc = ElementTree(file=f)
a = doc.getroot()
self.assertEquals(
@@ -982,7 +982,7 @@
def test_comment_no_proxy_yet(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<a><b></b><!-- hoi --><c></c></a>')
+ f = BytesIO('<a><b></b><!-- hoi --><c></c></a>')
doc = ElementTree(file=f)
a = doc.getroot()
self.assertEquals(
@@ -1008,7 +1008,7 @@
def test_prefix(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<a xmlns:foo="http://www.infrae.com/ns/1"><foo:b/></a>')
+ f = BytesIO('<a xmlns:foo="http://www.infrae.com/ns/1"><foo:b/></a>')
doc = ElementTree(file=f)
a = doc.getroot()
self.assertEquals(
@@ -1021,7 +1021,7 @@
def test_prefix_default_ns(self):
ElementTree = self.etree.ElementTree
- f = StringIO('<a xmlns="http://www.infrae.com/ns/1"><b/></a>')
+ f = BytesIO('<a xmlns="http://www.infrae.com/ns/1"><b/></a>')
doc = ElementTree(file=f)
a = doc.getroot()
self.assertEquals(
@@ -1055,7 +1055,7 @@
def test_iterchildren(self):
XML = self.etree.XML
- root = XML('<doc><one/><two>Two</two>Hm<three/></doc>')
+ root = XML(_bytes('<doc><one/><two>Two</two>Hm<three/></doc>'))
result = []
for el in root.iterchildren():
result.append(el.tag)
@@ -1064,7 +1064,7 @@
def test_iterchildren_reversed(self):
XML = self.etree.XML
- root = XML('<doc><one/><two>Two</two>Hm<three/></doc>')
+ root = XML(_bytes('<doc><one/><two>Two</two>Hm<three/></doc>'))
result = []
for el in root.iterchildren(reversed=True):
result.append(el.tag)
@@ -1073,7 +1073,7 @@
def test_iterchildren_tag(self):
XML = self.etree.XML
- root = XML('<doc><one/><two>Two</two>Hm<two>Bla</two></doc>')
+ root = XML(_bytes('<doc><one/><two>Two</two>Hm<two>Bla</two></doc>'))
result = []
for el in root.iterchildren(tag='two'):
result.append(el.text)
@@ -1082,7 +1082,7 @@
def test_iterchildren_tag_reversed(self):
XML = self.etree.XML
- root = XML('<doc><one/><two>Two</two>Hm<two>Bla</two></doc>')
+ root = XML(_bytes('<doc><one/><two>Two</two>Hm<two>Bla</two></doc>'))
result = []
for el in root.iterchildren(reversed=True, tag='two'):
result.append(el.text)
@@ -1103,8 +1103,8 @@
[a],
list(b.iterancestors()))
self.assertEquals(
- a,
- c.iterancestors().next())
+ [a],
+ list(c.iterancestors()))
self.assertEquals(
[b, a],
list(d.iterancestors()))
@@ -1227,9 +1227,6 @@
[c],
list(b.itersiblings()))
self.assertEquals(
- c,
- b.itersiblings().next())
- self.assertEquals(
[],
list(c.itersiblings()))
self.assertEquals(
@@ -1263,7 +1260,7 @@
def test_parseid(self):
parseid = self.etree.parseid
XML = self.etree.XML
- xml_text = '''
+ xml_text = _bytes('''
<!DOCTYPE document [
<!ELEMENT document (h1,p)*>
<!ELEMENT h1 (#PCDATA)>
@@ -1278,9 +1275,9 @@
<p xml:id="xmlid">XML:ID paragraph.</p>
<p someid="warn1" class="warning">...</p>
</document>
- '''
+ ''')
- tree, dic = parseid(StringIO(xml_text))
+ tree, dic = parseid(BytesIO(xml_text))
root = tree.getroot()
root2 = XML(xml_text)
self.assertEquals(self._writeElement(root),
@@ -1298,7 +1295,7 @@
def test_XMLDTDID(self):
XMLDTDID = self.etree.XMLDTDID
XML = self.etree.XML
- xml_text = '''
+ xml_text = _bytes('''
<!DOCTYPE document [
<!ELEMENT document (h1,p)*>
<!ELEMENT h1 (#PCDATA)>
@@ -1313,7 +1310,7 @@
<p xml:id="xmlid">XML:ID paragraph.</p>
<p someid="warn1" class="warning">...</p>
</document>
- '''
+ ''')
root, dic = XMLDTDID(xml_text)
root2 = XML(xml_text)
@@ -1332,14 +1329,14 @@
def test_XMLDTDID_empty(self):
XMLDTDID = self.etree.XMLDTDID
XML = self.etree.XML
- xml_text = '''
+ xml_text = _bytes('''
<document>
<h1 myid="chapter1">...</h1>
<p id="note1" class="note">...</p>
<p>Regular paragraph.</p>
<p someid="warn1" class="warning">...</p>
</document>
- '''
+ ''')
root, dic = XMLDTDID(xml_text)
root2 = XML(xml_text)
@@ -1349,21 +1346,23 @@
self._checkIDDict(dic, expected)
def _checkIDDict(self, dic, expected):
- self.assertEquals(dic, expected)
self.assertEquals(len(dic),
len(expected))
self.assertEquals(sorted(dic.items()),
sorted(expected.items()))
- self.assertEquals(sorted(dic.iteritems()),
- sorted(expected.iteritems()))
+ if sys.version_info < (3,):
+ self.assertEquals(sorted(dic.iteritems()),
+ sorted(expected.iteritems()))
self.assertEquals(sorted(dic.keys()),
sorted(expected.keys()))
- self.assertEquals(sorted(dic.iterkeys()),
- sorted(expected.iterkeys()))
- self.assertEquals(sorted(dic.values()),
- sorted(expected.values()))
- self.assertEquals(sorted(dic.itervalues()),
- sorted(expected.itervalues()))
+ if sys.version_info < (3,):
+ self.assertEquals(sorted(dic.iterkeys()),
+ sorted(expected.iterkeys()))
+ if sys.version_info < (3,):
+ self.assertEquals(sorted(dic.values()),
+ sorted(expected.values()))
+ self.assertEquals(sorted(dic.itervalues()),
+ sorted(expected.itervalues()))
def test_namespaces(self):
etree = self.etree
@@ -1374,7 +1373,7 @@
'foo',
e.prefix)
self.assertEquals(
- '<foo:bar xmlns:foo="http://ns.infrae.com/foo"></foo:bar>',
+ _bytes('<foo:bar xmlns:foo="http://ns.infrae.com/foo"></foo:bar>'),
self._writeElement(e))
def test_namespaces_default(self):
@@ -1389,7 +1388,7 @@
'{http://ns.infrae.com/foo}bar',
e.tag)
self.assertEquals(
- '<bar xmlns="http://ns.infrae.com/foo"></bar>',
+ _bytes('<bar xmlns="http://ns.infrae.com/foo"></bar>'),
self._writeElement(e))
def test_namespaces_default_and_attr(self):
@@ -1400,7 +1399,7 @@
e = etree.Element('{http://ns.infrae.com/foo}bar', nsmap=r)
e.set('{http://ns.infrae.com/hoi}test', 'value')
self.assertEquals(
- '<bar xmlns="http://ns.infrae.com/foo" xmlns:hoi="http://ns.infrae.com/hoi" hoi:test="value"></bar>',
+ _bytes('<bar xmlns="http://ns.infrae.com/foo" xmlns:hoi="http://ns.infrae.com/hoi" hoi:test="value"></bar>'),
self._writeElement(e))
def test_namespaces_elementtree(self):
@@ -1411,7 +1410,7 @@
tree = etree.ElementTree(element=e)
etree.SubElement(e, '{http://ns.infrae.com/hoi}x')
self.assertEquals(
- '<z xmlns="http://ns.infrae.com/foo" xmlns:hoi="http://ns.infrae.com/hoi"><hoi:x></hoi:x></z>',
+ _bytes('<z xmlns="http://ns.infrae.com/foo" xmlns:hoi="http://ns.infrae.com/hoi"><hoi:x></hoi:x></z>'),
self._writeElement(e))
def test_namespaces_default_copy_element(self):
@@ -1461,17 +1460,17 @@
def test_namespaces_reuse_after_move(self):
ns_href = "http://a.b.c"
one = self.etree.fromstring(
- '<foo><bar xmlns:ns="%s"><ns:baz/></bar></foo>' % ns_href)
+ _bytes('<foo><bar xmlns:ns="%s"><ns:baz/></bar></foo>' % ns_href))
baz = one[0][0]
two = self.etree.fromstring(
- '<root xmlns:ns="%s"/>' % ns_href)
+ _bytes('<root xmlns:ns="%s"/>' % ns_href))
two.append(baz)
del one # make sure the source document is deallocated
self.assertEquals('{%s}baz' % ns_href, baz.tag)
self.assertEquals(
- '<root xmlns:ns="%s"><ns:baz/></root>' % ns_href,
+ _bytes('<root xmlns:ns="%s"><ns:baz/></root>' % ns_href),
self.etree.tostring(two))
def test_element_nsmap(self):
@@ -1593,14 +1592,14 @@
XML = self.etree.XML
ElementTree = self.etree.ElementTree
QName = self.etree.QName
- tree = ElementTree(XML('<a><b><c/></b><b/><c><b/></c></a>'))
+ tree = ElementTree(XML(_bytes('<a><b><c/></b><b/><c><b/></c></a>')))
self.assertEquals(tree.find(QName("c")), tree.getroot()[2])
def test_elementtree_findall_qname(self):
XML = self.etree.XML
ElementTree = self.etree.ElementTree
QName = self.etree.QName
- tree = ElementTree(XML('<a><b><c/></b><b/><c><b/></c></a>'))
+ tree = ElementTree(XML(_bytes('<a><b><c/></b><b/><c><b/></c></a>')))
self.assertEquals(len(list(tree.findall(QName("c")))), 1)
def test_elementtree_findall_ns_qname(self):
@@ -1608,13 +1607,13 @@
ElementTree = self.etree.ElementTree
QName = self.etree.QName
tree = ElementTree(XML(
- '<a xmlns:x="X" xmlns:y="Y"><x:b><c/></x:b><b/><c><x:b/><b/></c><b/></a>'))
+ _bytes('<a xmlns:x="X" xmlns:y="Y"><x:b><c/></x:b><b/><c><x:b/><b/></c><b/></a>')))
self.assertEquals(len(list(tree.findall(QName("b")))), 2)
self.assertEquals(len(list(tree.findall(QName("X", "b")))), 1)
def test_findall_ns(self):
XML = self.etree.XML
- root = XML('<a xmlns:x="X" xmlns:y="Y"><x:b><c/></x:b><b/><c><x:b/><b/></c><b/></a>')
+ root = XML(_bytes('<a xmlns:x="X" xmlns:y="Y"><x:b><c/></x:b><b/><c><x:b/><b/></c><b/></a>'))
self.assertEquals(len(root.findall(".//{X}b")), 2)
self.assertEquals(len(root.findall(".//{X}*")), 2)
self.assertEquals(len(root.findall(".//b")), 3)
@@ -1779,7 +1778,7 @@
try:
slice
except NameError:
- print "slice() not found"
+ print("slice() not found")
return
a = Element('a')
@@ -1802,12 +1801,12 @@
def test_sourceline_XML(self):
XML = self.etree.XML
- root = XML('''<?xml version="1.0"?>
+ root = XML(_bytes('''<?xml version="1.0"?>
<root><test>
<bla/></test>
</root>
- ''')
+ '''))
self.assertEquals(
[2, 2, 4],
@@ -1852,13 +1851,13 @@
def test_XML_base_url_docinfo(self):
etree = self.etree
- root = etree.XML("<root/>", base_url="http://no/such/url")
+ root = etree.XML(_bytes("<root/>"), base_url="http://no/such/url")
docinfo = root.getroottree().docinfo
self.assertEquals(docinfo.URL, "http://no/such/url")
def test_XML_set_base_url_docinfo(self):
etree = self.etree
- root = etree.XML("<root/>", base_url="http://no/such/url")
+ root = etree.XML(_bytes("<root/>"), base_url="http://no/such/url")
docinfo = root.getroottree().docinfo
self.assertEquals(docinfo.URL, "http://no/such/url")
docinfo.URL = "https://secret/url"
@@ -1866,7 +1865,7 @@
def test_parse_stringio_base_url(self):
etree = self.etree
- tree = etree.parse(StringIO("<root/>"), base_url="http://no/such/url")
+ tree = etree.parse(BytesIO("<root/>"), base_url="http://no/such/url")
docinfo = tree.docinfo
self.assertEquals(docinfo.URL, "http://no/such/url")
@@ -1879,7 +1878,7 @@
def test_HTML_base_url_docinfo(self):
etree = self.etree
- root = etree.HTML("<html/>", base_url="http://no/such/url")
+ root = etree.HTML(_bytes("<html/>"), base_url="http://no/such/url")
docinfo = root.getroottree().docinfo
self.assertEquals(docinfo.URL, "http://no/such/url")
@@ -1890,9 +1889,9 @@
sys_id = "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype_string = '<!DOCTYPE html PUBLIC "%s" "%s">' % (pub_id, sys_id)
- xml = xml_header + doctype_string + '<html><body></body></html>'
+ xml = _bytes(xml_header + doctype_string + '<html><body></body></html>')
- tree = etree.parse(StringIO(xml))
+ tree = etree.parse(BytesIO(xml))
docinfo = tree.docinfo
self.assertEquals(docinfo.encoding, "ascii")
self.assertEquals(docinfo.xml_version, "1.0")
@@ -1906,9 +1905,9 @@
xml_header = '<?xml version="1.0" encoding="UTF-8"?>'
sys_id = "some.dtd"
doctype_string = '<!DOCTYPE html SYSTEM "%s">' % sys_id
- xml = xml_header + doctype_string + '<html><body></body></html>'
+ xml = _bytes(xml_header + doctype_string + '<html><body></body></html>')
- tree = etree.parse(StringIO(xml))
+ tree = etree.parse(BytesIO(xml))
docinfo = tree.docinfo
se