1
2
3 """
4 Tests for the ElementTree API
5
6 Only test cases that apply equally well to etree and ElementTree
7 belong here. Note that there is a second test module called test_io.py
8 for IO related test cases.
9 """
10
11 import unittest, doctest
12 import os, re, tempfile, copy, operator, gc
13
14 from common_imports import StringIO, etree, ElementTree, cElementTree
15 from common_imports import fileInTestDir, canonicalize, HelperTestCase
16
17 if cElementTree is not None:
18 if tuple([int(n) for n in
19 getattr(cElementTree, "VERSION", "0.0").split(".")]) <= (1,0,7):
20 cElementTree = None
21
22 try:
23 reversed
24 except NameError:
25
27 seq = list(seq)[::-1]
28 return seq
29
31 etree = None
32
34 for i in range(10):
35 e = self.etree.Element('foo')
36 self.assertEquals(e.tag, 'foo')
37 self.assertEquals(e.text, None)
38 self.assertEquals(e.tail, None)
39
52
65
83
85 ElementTree = self.etree.ElementTree
86
87 f = StringIO('<doc>Test<one>One</one></doc>')
88 doc = ElementTree(file=f)
89 root = doc.getroot()
90 self.assertEquals(1, len(root))
91 self.assertEquals('one', root[0].tag)
92 self.assertRaises(IndexError, operator.getitem, root, 1)
93
95 ElementTree = self.etree.ElementTree
96
97 f = StringIO('<doc><one>One</one><two>Two</two>hm<three>Three</three></doc>')
98 doc = ElementTree(file=f)
99 root = doc.getroot()
100 self.assertEquals(3, len(root))
101 self.assertEquals('one', root[0].tag)
102 self.assertEquals('two', root[1].tag)
103 self.assertEquals('three', root[2].tag)
104
106 ElementTree = self.etree.ElementTree
107
108 f = StringIO('<doc>Test</doc>')
109 doc = ElementTree(file=f)
110 root = doc.getroot()
111 self.assertEquals(0, len(root))
112
114 Element = self.etree.Element
115 SubElement = self.etree.SubElement
116 a = Element('a')
117 b = SubElement(a, 'b')
118 c = SubElement(a, 'c')
119 d = SubElement(a, 'd')
120 self.assertEquals(d, a[-1])
121 self.assertEquals(c, a[-2])
122 self.assertEquals(b, a[-3])
123 self.assertRaises(IndexError, operator.getitem, a, -4)
124 a[-1] = e = Element('e')
125 self.assertEquals(e, a[-1])
126 del a[-1]
127 self.assertEquals(2, len(a))
128
138
139 - def test_text(self):
140 ElementTree = self.etree.ElementTree
141
142 f = StringIO('<doc>This is a text</doc>')
143 doc = ElementTree(file=f)
144 root = doc.getroot()
145 self.assertEquals('This is a text', root.text)
146
147 - def test_text_empty(self):
148 ElementTree = self.etree.ElementTree
149
150 f = StringIO('<doc></doc>')
151 doc = ElementTree(file=f)
152 root = doc.getroot()
153 self.assertEquals(None, root.text)
154
155 - def test_text_other(self):
156 ElementTree = self.etree.ElementTree
157
158 f = StringIO('<doc><one>One</one></doc>')
159 doc = ElementTree(file=f)
160 root = doc.getroot()
161 self.assertEquals(None, root.text)
162 self.assertEquals('One', root[0].text)
163
165 ElementTree = self.etree.ElementTree
166
167 f = StringIO('<doc>This is > than a text</doc>')
168 doc = ElementTree(file=f)
169 root = doc.getroot()
170 self.assertEquals('This is > than a text', root.text)
171
173 Element = self.etree.Element
174
175 a = Element("a")
176 a.text = "<>&"
177 self.assertXML('<a><>&</a>',
178 a)
179
181 tostring = self.etree.tostring
182 Element = self.etree.Element
183
184 a = Element("a")
185 a.text = "<>&"
186 self.assertEquals('<a><>&</a>',
187 tostring(a))
188
190 Element = self.etree.Element
191
192 class strTest(str):
193 pass
194
195 a = Element("a")
196 a.text = strTest("text")
197 self.assertXML('<a>text</a>',
198 a)
199
211
218
219 a = Element("a")
220 SubElement(a, "t").tail = strTest("tail")
221 self.assertXML('<a><t></t>tail</a>',
222 a)
223
225
226 XML = self.etree.XML
227
228 root = XML('<doc>This is <i>mixed</i> content.</doc>')
229 self.assertEquals(1, len(root))
230 self.assertEquals('This is ', root.text)
231 self.assertEquals(None, root.tail)
232 self.assertEquals('mixed', root[0].text)
233 self.assertEquals(' content.', root[0].tail)
234
235 del root[0].tail
236
237 self.assertEquals(1, len(root))
238 self.assertEquals('This is ', root.text)
239 self.assertEquals(None, root.tail)
240 self.assertEquals('mixed', root[0].text)
241 self.assertEquals(None, root[0].tail)
242
243 root[0].tail = "TAIL"
244
245 self.assertEquals(1, len(root))
246 self.assertEquals('This is ', root.text)
247 self.assertEquals(None, root.tail)
248 self.assertEquals('mixed', root[0].text)
249 self.assertEquals('TAIL', root[0].tail)
250
260
270
281
283 ElementTree = self.etree.ElementTree
284
285 f = StringIO('<doc one="One" two="Two"/>')
286 doc = ElementTree(file=f)
287 root = doc.getroot()
288 self.assertEquals('One', root.get('one'))
289 self.assertEquals('Two', root.get('two'))
290 self.assertEquals(None, root.get('three'))
291 self.assertEquals('foo', root.get('three', 'foo'))
292
294 XML = self.etree.XML
295
296 root = XML('<doc one="One" two="Two"/>')
297 self.assertEquals('One', root.get('one'))
298 self.assertEquals('Two', root.get('two'))
299 root.attrib.clear()
300 self.assertEquals(None, root.get('one'))
301 self.assertEquals(None, root.get('two'))
302
304 Element = self.etree.Element
305
306 root = Element("root", one="One")
307 root.set("two", "Two")
308 self.assertEquals('One', root.get('one'))
309 self.assertEquals('Two', root.get('two'))
310 root.attrib.clear()
311 self.assertEquals(None, root.get('one'))
312 self.assertEquals(None, root.get('two'))
313
315 Element = self.etree.Element
316 SubElement = self.etree.SubElement
317
318 attribNS = '{http://foo/bar}x'
319
320 parent = Element('parent')
321 parent.set(attribNS, 'a')
322 child = SubElement(parent, 'child')
323 child.set(attribNS, 'b')
324
325 self.assertEquals('a', parent.get(attribNS))
326 self.assertEquals('b', child.get(attribNS))
327
328 parent.clear()
329 self.assertEquals(None, parent.get(attribNS))
330 self.assertEquals('b', child.get(attribNS))
331
333 XML = self.etree.XML
334
335 root = XML('<doc alpha="Alpha" beta="Beta"/>')
336 items = root.attrib.items()
337 items.sort()
338 self.assertEquals(
339 [('alpha', 'Alpha'), ('beta', 'Beta')],
340 items)
341
342 root.attrib.update({'alpha' : 'test', 'gamma' : 'Gamma'})
343
344 items = root.attrib.items()
345 items.sort()
346 self.assertEquals(
347 [('alpha', 'test'), ('beta', 'Beta'), ('gamma', 'Gamma')],
348 items)
349
351 XML = self.etree.XML
352
353 root = XML('<doc alpha="Alpha" beta="Beta"/>')
354 items = root.attrib.items()
355 items.sort()
356 self.assertEquals(
357 [('alpha', 'Alpha'), ('beta', 'Beta')],
358 items)
359
360 root.attrib.update({'alpha' : 'test', 'gamma' : 'Gamma'}.items())
361
362 items = root.attrib.items()
363 items.sort()
364 self.assertEquals(
365 [('alpha', 'test'), ('beta', 'Beta'), ('gamma', 'Gamma')],
366 items)
367
369 XML = self.etree.XML
370
371 root = XML('<doc alpha="Alpha" beta="Beta"/>')
372 items = root.attrib.items()
373 items.sort()
374 self.assertEquals(
375 [('alpha', 'Alpha'), ('beta', 'Beta')],
376 items)
377
378 root.attrib.update({'alpha' : 'test', 'gamma' : 'Gamma'}.iteritems())
379
380 items = root.attrib.items()
381 items.sort()
382 self.assertEquals(
383 [('alpha', 'test'), ('beta', 'Beta'), ('gamma', 'Gamma')],
384 items)
385
387 XML = self.etree.XML
388
389 root = XML('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>')
390 keys = root.attrib.keys()
391 keys.sort()
392 self.assertEquals(['alpha', 'beta', 'gamma'], keys)
393
395 XML = self.etree.XML
396
397 root = XML('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>')
398 keys = root.keys()
399 keys.sort()
400 self.assertEquals(['alpha', 'beta', 'gamma'], keys)
401
403 XML = self.etree.XML
404
405 root = XML('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>')
406 items = root.items()
407 items.sort()
408 self.assertEquals(
409 [('alpha','Alpha'), ('beta','Beta'), ('gamma','Gamma')],
410 items)
411
413 XML = self.etree.XML
414
415 root = XML('<foo bar="Bar" xmlns:ns="http://ns.codespeak.net/test" ns:baz="Baz" />')
416 keys = root.keys()
417 keys.sort()
418 self.assertEquals(['bar', '{http://ns.codespeak.net/test}baz'],
419 keys)
420
422 XML = self.etree.XML
423
424 root = XML('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>')
425 values = root.attrib.values()
426 values.sort()
427 self.assertEquals(['Alpha', 'Beta', 'Gamma'], values)
428
430 XML = self.etree.XML
431
432 root = XML('<foo bar="Bar" xmlns:ns="http://ns.codespeak.net/test" ns:baz="Baz" />')
433 values = root.attrib.values()
434 values.sort()
435 self.assertEquals(
436 ['Bar', 'Baz'], values)
437
439 XML = self.etree.XML
440
441 root = XML('<doc alpha="Alpha" beta="Beta" gamma="Gamma"/>')
442 items = root.attrib.items()
443 items.sort()
444 self.assertEquals([
445 ('alpha', 'Alpha'),
446 ('beta', 'Beta'),
447 ('gamma', 'Gamma'),
448 ],
449 items)
450
452 XML = self.etree.XML
453
454 root = XML('<foo bar="Bar" xmlns:ns="http://ns.codespeak.net/test" ns:baz="Baz" />')
455 items = root.attrib.items()
456 items.sort()
457 self.assertEquals(
458 [('bar', 'Bar'), ('{http://ns.codespeak.net/test}baz', 'Baz')],
459 items)
460
462 XML = self.etree.XML
463
464 expected = "{'{http://ns.codespeak.net/test}baz': 'Baz', 'bar': 'Bar'}"
465 alternative = "{'bar': 'Bar', '{http://ns.codespeak.net/test}baz': 'Baz'}"
466
467 root = XML('<foo bar="Bar" xmlns:ns="http://ns.codespeak.net/test" ns:baz="Baz" />')
468 try:
469 self.assertEquals(expected, str(root.attrib))
470 except AssertionError:
471 self.assertEquals(alternative, str(root.attrib))
472
474 XML = self.etree.XML
475
476 root = XML('<foo bar="Bar" xmlns:ns="http://ns.codespeak.net/test" ns:baz="Baz" />')
477 self.assertEquals(
478 True, root.attrib.has_key('bar'))
479 self.assertEquals(
480 False, root.attrib.has_key('baz'))
481 self.assertEquals(
482 False, root.attrib.has_key('hah'))
483 self.assertEquals(
484 True,
485 root.attrib.has_key('{http://ns.codespeak.net/test}baz'))
486
488 XML = self.etree.XML
489
490 root = XML('<foo bar="Bar" xmlns:ns="http://ns.codespeak.net/test" ns:baz="Baz" />')
491 self.assertEquals(
492 True, 'bar' in root.attrib)
493 self.assertEquals(
494 False, 'baz' in root.attrib)
495 self.assertEquals(
496 False, 'hah' in root.attrib)
497 self.assertEquals(
498 True,
499 '{http://ns.codespeak.net/test}baz' in root.attrib)
500
507
509 XML = self.etree.XML
510
511 root = XML('<doc>This is a text.</doc>')
512 self.assertEquals(0, len(root))
513 self.assertEquals('This is a text.', root.text)
514
516 XMLID = self.etree.XMLID
517 XML = self.etree.XML
518 xml_text = '''
519 <document>
520 <h1 id="chapter1">...</h1>
521 <p id="note1" class="note">...</p>
522 <p>Regular paragraph.</p>
523 <p xml:id="xmlid">XML:ID paragraph.</p>
524 <p id="warn1" class="warning">...</p>
525 </document>
526 '''
527
528 root, dic = XMLID(xml_text)
529 root2 = XML(xml_text)
530 self.assertEquals(self._writeElement(root),
531 self._writeElement(root2))
532 expected = {
533 "chapter1" : root[0],
534 "note1" : root[1],
535 "warn1" : root[4]
536 }
537 self.assertEquals(dic, expected)
538
545
553
560
567
591
593 XML = self.etree.XML
594
595 root = XML('<doc><one/><two>Two</two>Hm<three/></doc>')
596 result = []
597 for el in root:
598 result.append(el.tag)
599 self.assertEquals(['one', 'two', 'three'], result)
600
602 XML = self.etree.XML
603
604 root = XML('<doc></doc>')
605 result = []
606 for el in root:
607 result.append(el.tag)
608 self.assertEquals([], result)
609
611 XML = self.etree.XML
612
613 root = XML('<doc>Text</doc>')
614 result = []
615 for el in root:
616 result.append(el.tag)
617 self.assertEquals([], result)
618
625
627 XML = self.etree.XML
628 root = XML('<doc><one/><two>Two</two>Hm<three/></doc>')
629 result = []
630 for el in reversed(root):
631 result.append(el.tag)
632 self.assertEquals(['three', 'two', 'one'], result)
633
635 XML = self.etree.XML
636
637 root = XML('<doc><one/><two>Two</two>Hm<three/></doc>')
638 result = []
639 add = True
640 for el in root:
641 result.append(el.tag)
642 if add:
643 self.etree.SubElement(root, 'four')
644 add = False
645 self.assertEquals(['one', 'two', 'three', 'four'], result)
646
648 XML = self.etree.XML
649
650 root = XML('<doc><one/><two>Two</two>Hm<three/></doc>')
651 result = []
652 for el in root:
653 result.append(el.tag)
654 del root[-1]
655 self.assertEquals(['one', 'two'], result)
656
658 XML = self.etree.XML
659
660 root = XML('<doc><one/><two/></doc>')
661 result = []
662 for el0 in root:
663 result.append(el0.tag)
664 for el1 in root:
665 result.append(el1.tag)
666 self.assertEquals(['one','one', 'two', 'two', 'one', 'two'], result)
667
669 XML = self.etree.XML
670
671 root = XML('<doc alpha="Alpha" beta="Beta" gamma="Gamma" />')
672 result = []
673 for key in root.attrib:
674 result.append(key)
675 result.sort()
676 self.assertEquals(['alpha', 'beta', 'gamma'], result)
677
679 XML = self.etree.XML
680 root = XML('<a><b><c/></b><b/><c><b/></c></a>')
681 self.assertEquals(len(list(root.findall("c"))), 1)
682 self.assertEquals(len(list(root.findall(".//c"))), 2)
683 self.assertEquals(len(list(root.findall(".//b"))), 3)
684 self.assertEquals(len(list(root.findall(".//b"))[0]), 1)
685 self.assertEquals(len(list(root.findall(".//b"))[1]), 0)
686 self.assertEquals(len(list(root.findall(".//b"))[2]), 0)
687
689 XML = self.etree.XML
690 root = XML('<a xmlns:x="X" xmlns:y="Y"><x:b><c/></x:b><b/><c><x:b/><b/></c><b/></a>')
691 self.assertEquals(len(list(root.findall(".//{X}b"))), 2)
692 self.assertEquals(len(list(root.findall(".//b"))), 3)
693 self.assertEquals(len(list(root.findall("b"))), 2)
694
701
708
710 Element = self.etree.Element
711
712 el = Element('tag', {'{ns1}foo':'Foo', '{ns2}bar':'Bar'})
713 self.assertEquals('Foo', el.attrib['{ns1}foo'])
714 self.assertEquals('Bar', el.attrib['{ns2}bar'])
715
724
733
747
766
768 ElementTree = self.etree.ElementTree
769 Element = self.etree.Element
770 SubElement = self.etree.SubElement
771
772 a = Element('a')
773 a.text = "A"
774 a.tail = "tail"
775 b = SubElement(a, 'b')
776 b.text = "B"
777 b.tail = "TAIL"
778 c = SubElement(a, 'c')
779 c.text = "C"
780
781 tree = ElementTree(element=a)
782 f = StringIO()
783 tree.write(f, method="text")
784 data = f.getvalue()
785
786 self.assertEquals('ABTAILCtail',
787 data)
788
796
797
798
800 Element = self.etree.Element
801
802 element = Element('tag')
803 for i in range(10):
804 element.attrib['key'] = 'value'
805 value = element.attrib['key']
806 self.assertEquals(value, 'value')
807
808
820
843
844 - def test_set_text(self):
845 Element = self.etree.Element
846 SubElement = self.etree.SubElement
847
848 a = Element('a')
849 b = SubElement(a, 'b')
850 a.text = 'hoi'
851 self.assertEquals(
852 'hoi',
853 a.text)
854 self.assertEquals(
855 'b',
856 a[0].tag)
857
858 - def test_set_text2(self):
859 Element = self.etree.Element
860 SubElement = self.etree.SubElement
861
862 a = Element('a')
863 a.text = 'hoi'
864 b = SubElement(a ,'b')
865 self.assertEquals(
866 'hoi',
867 a.text)
868 self.assertEquals(
869 'b',
870 a[0].tag)
871
873 Element = self.etree.Element
874
875 a = Element('a')
876
877 a.text = 'foo'
878 a.text = None
879
880 self.assertEquals(
881 None,
882 a.text)
883 self.assertXML('<a></a>', a)
884
886 Element = self.etree.Element
887
888 a = Element('a')
889 self.assertEquals(None, a.text)
890
891 a.text = ''
892 self.assertEquals('', a.text)
893 self.assertXML('<a></a>', a)
894
909
919
931
941
951
963
972
984
996
1008
1010 ProcessingInstruction = self.etree.ProcessingInstruction
1011 pi = ProcessingInstruction('foo')
1012 self.assertEquals({}, pi.attrib)
1013 self.assertEquals([], pi.keys())
1014 self.assertEquals([], pi.items())
1015 self.assertEquals(None, pi.get('hoi'))
1016 self.assertEquals(0, len(pi))
1017
1018 for i in pi:
1019 pass
1020
1036
1054
1064
1073
1088
1105
1123
1142
1148
1149 a = Element("a")
1150 a.tag = strTest("TAG")
1151 self.assertXML('<TAG></TAG>',
1152 a)
1153
1183
1185 Element = self.etree.Element
1186 SubElement = self.etree.SubElement
1187
1188 a = Element('a')
1189 b = SubElement(a, 'b')
1190 bs = SubElement(b, 'bs')
1191 c = SubElement(a, 'c')
1192 cs = SubElement(c, 'cs')
1193
1194 el = a[0]
1195 self.assertXML(
1196 '<a><b><bs></bs></b><c><cs></cs></c></a>',
1197 a)
1198 self.assertXML('<b><bs></bs></b>', b)
1199 self.assertXML('<c><cs></cs></c>', c)
1200
1201 del a[0]
1202 self.assertXML(
1203 '<a><c><cs></cs></c></a>',
1204 a)
1205 self.assertXML('<b><bs></bs></b>', b)
1206 self.assertXML('<c><cs></cs></c>', c)
1207
1208 a.insert(0, el)
1209 self.assertXML(
1210 '<a><b><bs></bs></b><c><cs></cs></c></a>',
1211 a)
1212 self.assertXML('<b><bs></bs></b>', b)
1213 self.assertXML('<c><cs></cs></c>', c)
1214
1233
1252
1254 XML = self.etree.XML
1255 a = XML('<a><b></b>B2<c></c>C2</a>')
1256 b, c = a
1257
1258 a[:] = []
1259
1260 self.assertEquals("B2", b.tail)
1261 self.assertEquals("C2", c.tail)
1262
1272
1274 Element = self.etree.Element
1275
1276 a = Element('a')
1277 a.text = 'foo'
1278 a.tail = 'bar'
1279 a.set('hoi', 'dag')
1280 a.clear()
1281 self.assertEquals(None, a.text)
1282 self.assertEquals(None, a.tail)
1283 self.assertEquals(None, a.get('hoi'))
1284 self.assertEquals('a', a.tag)
1285
1287 Element = self.etree.Element
1288 SubElement = self.etree.SubElement
1289
1290 a = Element('a')
1291 a.text = 'foo'
1292 a.tail = 'bar'
1293 a.set('hoi', 'dag')
1294 b = SubElement(a, 'b')
1295 c = SubElement(b, 'c')
1296 a.clear()
1297 self.assertEquals(None, a.text)
1298 self.assertEquals(None, a.tail)
1299 self.assertEquals(None, a.get('hoi'))
1300 self.assertEquals('a', a.tag)
1301 self.assertEquals(0, len(a))
1302 self.assertXML('<a></a>',
1303 a)
1304 self.assertXML('<b><c></c></b>',
1305 b)
1306
1316
1343
1359
1376
1391
1407
1423
1434
1447
1469
1478
1480 Element = self.etree.Element
1481 SubElement = self.etree.SubElement
1482
1483 a = Element('a')
1484 b = SubElement(a, 'b')
1485 c = SubElement(a, 'c')
1486 d = SubElement(b, 'd')
1487 e = SubElement(c, 'e')
1488
1489 self.assertEquals(
1490 [a, b, d, c, e],
1491 list(a.iter()))
1492 self.assertEquals(
1493 [d],
1494 list(d.iter()))
1495
1497 Element = self.etree.Element
1498 SubElement = self.etree.SubElement
1499
1500 a = Element('a')
1501 b = SubElement(a, 'b')
1502 c = SubElement(a, 'c')
1503 d = SubElement(b, 'd')
1504 e = SubElement(c, 'e')
1505
1506 self.assertEquals(
1507 [a, b, d, c, e],
1508 list(a.getiterator()))
1509 self.assertEquals(
1510 [d],
1511 list(d.getiterator()))
1512
1532
1553
1567
1592
1594 Element = self.etree.Element
1595 PI = self.etree.ProcessingInstruction
1596 SubElement = self.etree.SubElement
1597
1598 a = Element('a')
1599 b = SubElement(a, 'b')
1600 pi_b = PI("TEST-b")
1601 b.append(pi_b)
1602
1603 self.assertEquals(
1604 [pi_b],
1605 list(a.getiterator(PI)))
1606
1607 pi_a = PI("TEST-a")
1608 a.append(pi_a)
1609
1610 self.assertEquals(
1611 [pi_b, pi_a],
1612 list(a.getiterator(PI)))
1613
1614 self.assertEquals(
1615 [pi_b],
1616 list(b.getiterator(PI)))
1617
1619 Element = self.etree.Element
1620 SubElement = self.etree.SubElement
1621
1622 a = Element('a')
1623 a.text = 'a'
1624 b = SubElement(a, 'b')
1625 b.text = 'b'
1626 b.tail = 'b1'
1627 c = SubElement(a, 'c')
1628 c.text = 'c'
1629 c.tail = 'c1'
1630 d = SubElement(b, 'd')
1631 c.text = 'd'
1632 c.tail = 'd1'
1633 e = SubElement(c, 'e')
1634 e.text = 'e'
1635 e.tail = 'e1'
1636
1637 self.assertEquals(
1638 [a, b, d, c, e],
1639 list(a.getiterator()))
1640
1641
1642
1643
1645 Element = self.etree.Element
1646 SubElement = self.etree.SubElement
1647
1648 a = Element('a')
1649 a.text = 'a'
1650 b = SubElement(a, 'b')
1651 b.text = 'b'
1652 b.tail = 'b1'
1653 c = SubElement(a, 'c')
1654 c.text = 'c'
1655 c.tail = 'c1'
1656 d = SubElement(b, 'd')
1657 c.text = 'd'
1658 c.tail = 'd1'
1659 e = SubElement(c, 'e')
1660 e.text = 'e'
1661 e.tail = 'e1'
1662
1663 self.assertEquals(
1664 [a],
1665 list(a.getiterator('a')))
1666 a2 = SubElement(e, 'a')
1667 self.assertEquals(
1668 [a, a2],
1669 list(a.getiterator('a')))
1670 self.assertEquals(
1671 [a2],
1672 list(e.getiterator('a')))
1673
1683
1685 Element = self.etree.Element
1686 SubElement = self.etree.SubElement
1687
1688 a = Element('a')
1689 b = SubElement(a, 'b')
1690 c = SubElement(a, 'c')
1691 d = SubElement(a, 'd')
1692
1693 self.assertEquals(
1694 [b, c],
1695 a[0:2])
1696 self.assertEquals(
1697 [b, c, d],
1698 a[:])
1699 self.assertEquals(
1700 [b, c, d],
1701 a[:10])
1702 self.assertEquals(
1703 [b],
1704 a[0:1])
1705 self.assertEquals(
1706 [],
1707 a[10:12])
1708
1710 Element = self.etree.Element
1711 SubElement = self.etree.SubElement
1712
1713 a = Element('a')
1714 b = SubElement(a, 'b')
1715 c = SubElement(a, 'c')
1716 d = SubElement(a, 'd')
1717
1718 self.assertEquals(
1719 [d],
1720 a[-1:])
1721 self.assertEquals(
1722 [c, d],
1723 a[-2:])
1724 self.assertEquals(
1725 [c],
1726 a[-2:-1])
1727 self.assertEquals(
1728 [b, c],
1729 a[-3:-1])
1730 self.assertEquals(
1731 [b, c],
1732 a[-3:2])
1733
1735 Element = self.etree.Element
1736 SubElement = self.etree.SubElement
1737
1738 a = Element('a')
1739 b = SubElement(a, 'b')
1740 c = SubElement(a, 'c')
1741 d = SubElement(a, 'd')
1742 e = SubElement(a, 'e')
1743
1744 self.assertEquals(
1745 [e,d,c,b],
1746 a[::-1])
1747 self.assertEquals(
1748 [b,d],
1749 a[::2])
1750 self.assertEquals(
1751 [e,c],
1752 a[::-2])
1753 self.assertEquals(
1754 [d,c],
1755 a[-2:0:-1])
1756 self.assertEquals(
1757 [e],
1758 a[:1:-2])
1759
1761 ElementTree = self.etree.ElementTree
1762
1763 f = StringIO('<a><b>B</b>B1<c>C</c>C1</a>')
1764 doc = ElementTree(file=f)
1765 a = doc.getroot()
1766 b = a[0]
1767 c = a[1]
1768 self.assertEquals(
1769 [b, c],
1770 a[:])
1771 self.assertEquals(
1772 [b],
1773 a[0:1])
1774 self.assertEquals(
1775 [c],
1776 a[1:])
1777
1801
1816
1831
1846
1861
1876
1891
1893 ElementTree = self.etree.ElementTree
1894 f = StringIO('<a><b></b>B2<c></c>C2<d></d>D2<e></e>E2</a>')
1895 doc = ElementTree(file=f)
1896 a = doc.getroot()
1897 del a[1:3]
1898 self.assertXML(
1899 '<a><b></b>B2<e></e>E2</a>',
1900 a)
1901
1903 XML = self.etree.XML
1904 a = XML('<a><b></b>B2<c></c>C2</a>')
1905 b, c = a
1906
1907 del a[:]
1908
1909 self.assertEquals("B2", b.tail)
1910 self.assertEquals("C2", c.tail)
1911
1922
1924 Element = self.etree.Element
1925 SubElement = self.etree.SubElement
1926
1927 a = Element('a')
1928 b = SubElement(a, 'b')
1929 c = SubElement(a, 'c')
1930 d = SubElement(a, 'd')
1931
1932 e = Element('e')
1933 f = Element('f')
1934 g = Element('g')
1935
1936 s = [e, f, g]
1937 a[1:2] = s
1938 self.assertEquals(
1939 [b, e, f, g, d],
1940 list(a))
1941
1959
1975
1990
2005
2007 Element = self.etree.Element
2008 SubElement = self.etree.SubElement
2009
2010 a = Element('{ns}a')
2011 b = SubElement(a, '{ns}b', {'{ns1}a1': 'test'})
2012 c = SubElement(a, '{ns}c', {'{ns2}a2': 'test'})
2013 d = SubElement(a, '{ns}d', {'{ns3}a3': 'test'})
2014
2015 s = [d, c, b]
2016 a[:] = s
2017 self.assertEquals(
2018 [d, c, b],
2019 list(a))
2020 self.assertEquals(
2021 ['{ns}d', '{ns}c', '{ns}b'],
2022 [ child.tag for child in a ])
2023
2024 self.assertEquals(
2025 [['{ns3}a3'], ['{ns2}a2'], ['{ns1}a1']],
2026 [ child.attrib.keys() for child in a ])
2027
2029 Element = self.etree.Element
2030 SubElement = self.etree.SubElement
2031
2032 a = Element('{ns}a')
2033 b = SubElement(a, '{ns1}b', {'{ns}a1': 'test'})
2034 c = SubElement(a, '{ns2}c', {'{ns}a2': 'test'})
2035 d = SubElement(a, '{ns3}d', {'{ns}a3': 'test'})
2036
2037 s = [d, c, b]
2038 a[:] = s
2039 self.assertEquals(
2040 [d, c, b],
2041 list(a))
2042 self.assertEquals(
2043 ['{ns3}d', '{ns2}c', '{ns1}b'],
2044 [ child.tag for child in a ])
2045
2046 self.assertEquals(
2047 [['{ns}a3'], ['{ns}a2'], ['{ns}a1']],
2048 [ child.attrib.keys() for child in a ])
2049
2051 Element = self.etree.Element
2052 SubElement = self.etree.SubElement
2053
2054 a = Element('a')
2055 b = SubElement(a, 'b')
2056 c = SubElement(a, 'c')
2057
2058 e = Element('e')
2059 f = Element('f')
2060 g = Element('g')
2061 h = Element('h')
2062
2063 s = [e, f]
2064 a[99:] = s
2065 self.assertEquals(
2066 [a, b, e, f],
2067 list(a))
2068
2069 s = [g, h]
2070 a[:0] = s
2071 self.assertEquals(
2072 [g, h, a, b, e, f],
2073 list(a))
2074
2097
2114
2131
2148
2150 Element = self.etree.Element
2151 SubElement = self.etree.SubElement
2152
2153 a = Element('a')
2154 b = SubElement(a, 'b')
2155 c = SubElement(a, 'c')
2156 d = SubElement(a, 'd')
2157
2158 e = Element('e')
2159 f = Element('f')
2160 g = Element('g')
2161
2162 s = [e, f, g]
2163 a[3:] = s
2164 self.assertEquals(
2165 [b, c, d, e, f, g],
2166 list(a))
2167
2180
2190
2206
2225
2227 ElementTree = self.etree.ElementTree
2228 ns = 'http://xml.infrae.com/1'
2229 f = StringIO('<x:a xmlns:x="%s"><x:b></x:b></x:a>' % ns)
2230 t = ElementTree(file=f)
2231 a = t.getroot()
2232 self.assertEquals('{%s}a' % ns,
2233 a.tag)
2234 self.assertEquals('{%s}b' % ns,
2235 a[0].tag)
2236
2238 ElementTree = self.etree.ElementTree
2239 ns = 'http://xml.infrae.com/1'
2240 ns2 = 'http://xml.infrae.com/2'
2241 f = StringIO('<x:a xmlns:x="%s" xmlns:y="%s"><x:b></x:b><y:b></y:b></x:a>' % (ns, ns2))
2242 t = ElementTree(file=f)
2243 a = t.getroot()
2244 self.assertEquals('{%s}a' % ns,
2245 a.tag)
2246 self.assertEquals('{%s}b' % ns,
2247 a[0].tag)
2248 self.assertEquals('{%s}b' % ns2,
2249 a[1].tag)
2250
2252 Element = self.etree.Element
2253 SubElement = self.etree.SubElement
2254 ns = 'http://xml.infrae.com/1'
2255 ns2 = 'http://xml.infrae.com/2'
2256 a = Element('{%s}a' % ns)
2257 b = SubElement(a, '{%s}b' % ns2)
2258 c = SubElement(a, '{%s}c' % ns)
2259 self.assertEquals('{%s}a' % ns,
2260 a.tag)
2261 self.assertEquals('{%s}b' % ns2,
2262 b.tag)
2263 self.assertEquals('{%s}c' % ns,
2264 c.tag)
2265 self.assertEquals('{%s}a' % ns,
2266 a.tag)
2267 self.assertEquals('{%s}b' % ns2,
2268 b.tag)
2269 self.assertEquals('{%s}c' % ns,
2270 c.tag)
2271
2289
2291 Element = self.etree.Element
2292 ns = 'http://xml.infrae.com/1'
2293 ns2 = 'http://xml.infrae.com/2'
2294 a = Element('a')
2295 a.set('{%s}foo' % ns, 'Foo')
2296 a.set('{%s}bar' % ns2, 'Bar')
2297 self.assertEquals(
2298 'Foo',
2299 a.get('{%s}foo' % ns))
2300 self.assertEquals(
2301 'Bar',
2302 a.get('{%s}bar' % ns2))
2303 try:
2304 self.assertXML(
2305 '<a xmlns:ns0="%s" xmlns:ns1="%s" ns0:foo="Foo" ns1:bar="Bar"></a>' % (ns, ns2),
2306 a)
2307 except AssertionError:
2308 self.assertXML(
2309 '<a xmlns:ns0="%s" xmlns:ns1="%s" ns1:foo="Foo" ns0:bar="Bar"></a>' % (ns2, ns),
2310 a)
2311
2326
2328 tostring = self.etree.tostring
2329 root = self.etree.XML(
2330 '<foo><bar xmlns:ns="http://a.b.c"><ns:baz/></bar></foo>')
2331 baz = root[0][0]
2332
2333 nsdecl = re.findall("xmlns(?::[a-z0-9]+)?=[\"']([^\"']+)[\"']",
2334 tostring(baz))
2335 self.assertEquals(["http://a.b.c"], nsdecl)
2336
2338 tostring = self.etree.tostring
2339 root = self.etree.XML(
2340 '<foo><bar xmlns="http://a.b.c"><baz/></bar></foo>')
2341 baz = root[0][0]
2342
2343 nsdecl = re.findall("xmlns(?::[a-z0-9]+)?=[\"']([^\"']+)[\"']",
2344 tostring(baz))
2345 self.assertEquals(["http://a.b.c"], nsdecl)
2346
2348 tostring = self.etree.tostring
2349 root = self.etree.XML(
2350 '<foo xmlns:ns="http://a.b.c"><bar><ns:baz/></bar></foo>')
2351 baz = root[0][0]
2352
2353 nsdecl = re.findall("xmlns(?::[a-z0-9]+)?=[\"']([^\"']+)[\"']",
2354 tostring(baz))
2355
2356 self.assertEquals(["http://a.b.c"], nsdecl)
2357
2370