| 
									
										
										
										
											2006-07-29 16:56:15 +00:00
										 |  |  | # xml.etree test for cElementTree | 
					
						
							| 
									
										
										
										
											2005-12-15 18:41:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | import doctest, sys | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from test import test_support | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-29 16:56:15 +00:00
										 |  |  | from xml.etree import cElementTree as ET | 
					
						
							| 
									
										
										
										
											2005-12-16 22:07:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-12-15 18:41:22 +00:00
										 |  |  | SAMPLE_XML = """
 | 
					
						
							|  |  |  | <body> | 
					
						
							|  |  |  |   <tag>text</tag> | 
					
						
							|  |  |  |   <tag /> | 
					
						
							|  |  |  |   <section> | 
					
						
							|  |  |  |     <tag>subtext</tag> | 
					
						
							|  |  |  |   </section> | 
					
						
							|  |  |  | </body> | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SAMPLE_XML_NS = """
 | 
					
						
							|  |  |  | <body xmlns="http://effbot.org/ns"> | 
					
						
							|  |  |  |   <tag>text</tag> | 
					
						
							|  |  |  |   <tag /> | 
					
						
							|  |  |  |   <section> | 
					
						
							|  |  |  |     <tag>subtext</tag> | 
					
						
							|  |  |  |   </section> | 
					
						
							|  |  |  | </body> | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def sanity(): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Import sanity. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-07-29 16:56:15 +00:00
										 |  |  |     >>> from xml.etree import cElementTree | 
					
						
							| 
									
										
										
										
											2005-12-15 18:41:22 +00:00
										 |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def check_method(method): | 
					
						
							|  |  |  |     if not callable(method): | 
					
						
							|  |  |  |         print method, "not callable" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def serialize(ET, elem, encoding=None): | 
					
						
							|  |  |  |     import StringIO | 
					
						
							|  |  |  |     file = StringIO.StringIO() | 
					
						
							|  |  |  |     tree = ET.ElementTree(elem) | 
					
						
							|  |  |  |     if encoding: | 
					
						
							|  |  |  |         tree.write(file, encoding) | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         tree.write(file) | 
					
						
							|  |  |  |     return file.getvalue() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def summarize(elem): | 
					
						
							|  |  |  |     return elem.tag | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def summarize_list(seq): | 
					
						
							|  |  |  |     return map(summarize, seq) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def interface(): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Test element tree interface. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     >>> element = ET.Element("tag", key="value") | 
					
						
							|  |  |  |     >>> tree = ET.ElementTree(element) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Make sure all standard element methods exist. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     >>> check_method(element.append) | 
					
						
							|  |  |  |     >>> check_method(element.insert) | 
					
						
							|  |  |  |     >>> check_method(element.remove) | 
					
						
							|  |  |  |     >>> check_method(element.getchildren) | 
					
						
							|  |  |  |     >>> check_method(element.find) | 
					
						
							|  |  |  |     >>> check_method(element.findall) | 
					
						
							|  |  |  |     >>> check_method(element.findtext) | 
					
						
							|  |  |  |     >>> check_method(element.clear) | 
					
						
							|  |  |  |     >>> check_method(element.get) | 
					
						
							|  |  |  |     >>> check_method(element.set) | 
					
						
							|  |  |  |     >>> check_method(element.keys) | 
					
						
							|  |  |  |     >>> check_method(element.items) | 
					
						
							|  |  |  |     >>> check_method(element.getiterator) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Basic method sanity checks. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     >>> serialize(ET, element) # 1 | 
					
						
							|  |  |  |     '<tag key="value" />' | 
					
						
							|  |  |  |     >>> subelement = ET.Element("subtag") | 
					
						
							|  |  |  |     >>> element.append(subelement) | 
					
						
							|  |  |  |     >>> serialize(ET, element) #  2 | 
					
						
							|  |  |  |     '<tag key="value"><subtag /></tag>' | 
					
						
							|  |  |  |     >>> element.insert(0, subelement) | 
					
						
							|  |  |  |     >>> serialize(ET, element) # 3 | 
					
						
							|  |  |  |     '<tag key="value"><subtag /><subtag /></tag>' | 
					
						
							|  |  |  |     >>> element.remove(subelement) | 
					
						
							|  |  |  |     >>> serialize(ET, element) # 4 | 
					
						
							|  |  |  |     '<tag key="value"><subtag /></tag>' | 
					
						
							|  |  |  |     >>> element.remove(subelement) | 
					
						
							|  |  |  |     >>> serialize(ET, element) # 5 | 
					
						
							|  |  |  |     '<tag key="value" />' | 
					
						
							|  |  |  |     >>> element.remove(subelement) | 
					
						
							|  |  |  |     Traceback (most recent call last): | 
					
						
							|  |  |  |     ValueError: list.remove(x): x not in list | 
					
						
							|  |  |  |     >>> serialize(ET, element) # 6 | 
					
						
							|  |  |  |     '<tag key="value" />' | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def find(): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Test find methods (including xpath syntax). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     >>> elem = ET.XML(SAMPLE_XML) | 
					
						
							|  |  |  |     >>> elem.find("tag").tag | 
					
						
							|  |  |  |     'tag' | 
					
						
							|  |  |  |     >>> ET.ElementTree(elem).find("tag").tag | 
					
						
							|  |  |  |     'tag' | 
					
						
							|  |  |  |     >>> elem.find("section/tag").tag | 
					
						
							|  |  |  |     'tag' | 
					
						
							|  |  |  |     >>> ET.ElementTree(elem).find("section/tag").tag | 
					
						
							|  |  |  |     'tag' | 
					
						
							|  |  |  |     >>> elem.findtext("tag") | 
					
						
							|  |  |  |     'text' | 
					
						
							|  |  |  |     >>> elem.findtext("tog") | 
					
						
							|  |  |  |     >>> elem.findtext("tog", "default") | 
					
						
							|  |  |  |     'default' | 
					
						
							|  |  |  |     >>> ET.ElementTree(elem).findtext("tag") | 
					
						
							|  |  |  |     'text' | 
					
						
							|  |  |  |     >>> elem.findtext("section/tag") | 
					
						
							|  |  |  |     'subtext' | 
					
						
							|  |  |  |     >>> ET.ElementTree(elem).findtext("section/tag") | 
					
						
							|  |  |  |     'subtext' | 
					
						
							|  |  |  |     >>> summarize_list(elem.findall("tag")) | 
					
						
							|  |  |  |     ['tag', 'tag'] | 
					
						
							|  |  |  |     >>> summarize_list(elem.findall("*")) | 
					
						
							|  |  |  |     ['tag', 'tag', 'section'] | 
					
						
							|  |  |  |     >>> summarize_list(elem.findall(".//tag")) | 
					
						
							|  |  |  |     ['tag', 'tag', 'tag'] | 
					
						
							|  |  |  |     >>> summarize_list(elem.findall("section/tag")) | 
					
						
							|  |  |  |     ['tag'] | 
					
						
							|  |  |  |     >>> summarize_list(elem.findall("section//tag")) | 
					
						
							|  |  |  |     ['tag'] | 
					
						
							|  |  |  |     >>> summarize_list(elem.findall("section/*")) | 
					
						
							|  |  |  |     ['tag'] | 
					
						
							|  |  |  |     >>> summarize_list(elem.findall("section//*")) | 
					
						
							|  |  |  |     ['tag'] | 
					
						
							|  |  |  |     >>> summarize_list(elem.findall("section/.//*")) | 
					
						
							|  |  |  |     ['tag'] | 
					
						
							|  |  |  |     >>> summarize_list(elem.findall("*/*")) | 
					
						
							|  |  |  |     ['tag'] | 
					
						
							|  |  |  |     >>> summarize_list(elem.findall("*//*")) | 
					
						
							|  |  |  |     ['tag'] | 
					
						
							|  |  |  |     >>> summarize_list(elem.findall("*/tag")) | 
					
						
							|  |  |  |     ['tag'] | 
					
						
							|  |  |  |     >>> summarize_list(elem.findall("*/./tag")) | 
					
						
							|  |  |  |     ['tag'] | 
					
						
							|  |  |  |     >>> summarize_list(elem.findall("./tag")) | 
					
						
							|  |  |  |     ['tag', 'tag'] | 
					
						
							|  |  |  |     >>> summarize_list(elem.findall(".//tag")) | 
					
						
							|  |  |  |     ['tag', 'tag', 'tag'] | 
					
						
							|  |  |  |     >>> summarize_list(elem.findall("././tag")) | 
					
						
							|  |  |  |     ['tag', 'tag'] | 
					
						
							|  |  |  |     >>> summarize_list(ET.ElementTree(elem).findall("/tag")) | 
					
						
							|  |  |  |     ['tag', 'tag'] | 
					
						
							|  |  |  |     >>> summarize_list(ET.ElementTree(elem).findall("./tag")) | 
					
						
							|  |  |  |     ['tag', 'tag'] | 
					
						
							|  |  |  |     >>> elem = ET.XML(SAMPLE_XML_NS) | 
					
						
							|  |  |  |     >>> summarize_list(elem.findall("tag")) | 
					
						
							|  |  |  |     [] | 
					
						
							|  |  |  |     >>> summarize_list(elem.findall("{http://effbot.org/ns}tag")) | 
					
						
							|  |  |  |     ['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag'] | 
					
						
							|  |  |  |     >>> summarize_list(elem.findall(".//{http://effbot.org/ns}tag")) | 
					
						
							|  |  |  |     ['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag'] | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def parseliteral(): | 
					
						
							|  |  |  |     r"""
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     >>> element = ET.XML("<html><body>text</body></html>") | 
					
						
							|  |  |  |     >>> ET.ElementTree(element).write(sys.stdout) | 
					
						
							|  |  |  |     <html><body>text</body></html> | 
					
						
							|  |  |  |     >>> element = ET.fromstring("<html><body>text</body></html>") | 
					
						
							|  |  |  |     >>> ET.ElementTree(element).write(sys.stdout) | 
					
						
							|  |  |  |     <html><body>text</body></html> | 
					
						
							|  |  |  |     >>> print ET.tostring(element) | 
					
						
							|  |  |  |     <html><body>text</body></html> | 
					
						
							|  |  |  |     >>> print ET.tostring(element, "ascii") | 
					
						
							|  |  |  |     <?xml version='1.0' encoding='ascii'?> | 
					
						
							|  |  |  |     <html><body>text</body></html> | 
					
						
							|  |  |  |     >>> _, ids = ET.XMLID("<html><body>text</body></html>") | 
					
						
							|  |  |  |     >>> len(ids) | 
					
						
							|  |  |  |     0 | 
					
						
							|  |  |  |     >>> _, ids = ET.XMLID("<html><body id='body'>text</body></html>") | 
					
						
							|  |  |  |     >>> len(ids) | 
					
						
							|  |  |  |     1 | 
					
						
							|  |  |  |     >>> ids["body"].tag | 
					
						
							|  |  |  |     'body' | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-12-16 22:07:17 +00:00
										 |  |  | def check_encoding(encoding): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     >>> check_encoding("ascii") | 
					
						
							|  |  |  |     >>> check_encoding("us-ascii") | 
					
						
							|  |  |  |     >>> check_encoding("iso-8859-1") | 
					
						
							|  |  |  |     >>> check_encoding("iso-8859-15") | 
					
						
							|  |  |  |     >>> check_encoding("cp437") | 
					
						
							|  |  |  |     >>> check_encoding("mac-roman") | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     ET.XML( | 
					
						
							|  |  |  |         "<?xml version='1.0' encoding='%s'?><xml />" % encoding | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-12-15 18:41:22 +00:00
										 |  |  | def test_main(): | 
					
						
							|  |  |  |     from test import test_xml_etree_c | 
					
						
							|  |  |  |     test_support.run_doctest(test_xml_etree_c, verbosity=True) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     test_main() |