# xml.etree test for cElementTree
import doctest
import sys
from test import support
from xml.etree import cElementTree as ET
SAMPLE_XML = """
  text
  
  
"""
SAMPLE_XML_NS = """
  text
  
  
"""
def sanity():
    """
    Import sanity.
    >>> from xml.etree import cElementTree
    """
def check_method(method):
    if not hasattr(method, '__call__'):
        print(method, "not callable")
def serialize(ET, elem):
    import io
    file = io.StringIO()
    tree = ET.ElementTree(elem)
    tree.write(file)
    return file.getvalue()
def summarize(elem):
    return elem.tag
def summarize_list(seq):
    return list(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
    ''
    >>> subelement = ET.Element("subtag")
    >>> element.append(subelement)
    >>> serialize(ET, element) #  2
    ''
    >>> element.insert(0, subelement)
    >>> serialize(ET, element) # 3
    ''
    >>> element.remove(subelement)
    >>> serialize(ET, element) # 4
    ''
    >>> element.remove(subelement)
    >>> serialize(ET, element) # 5
    ''
    >>> element.remove(subelement)
    Traceback (most recent call last):
    ValueError: list.remove(x): x not in list
    >>> serialize(ET, element) # 6
    ''
    """
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("text")
    >>> ET.ElementTree(element).write(sys.stdout)
    text
    >>> element = ET.fromstring("text")
    >>> ET.ElementTree(element).write(sys.stdout)
    text
    >>> print(ET.tostring(element))
    text
    >>> print(repr(ET.tostring(element, "ascii")))
    b"\ntext"
    >>> _, ids = ET.XMLID("text")
    >>> len(ids)
    0
    >>> _, ids = ET.XMLID("text")
    >>> len(ids)
    1
    >>> ids["body"].tag
    'body'
    """
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(
        "" % encoding
        )
def bug_1534630():
    """
    >>> bob = ET.TreeBuilder()
    >>> e = bob.data("data")
    >>> e = bob.start("tag", {})
    >>> e = bob.end("tag")
    >>> e = bob.close()
    >>> serialize(ET, e)
    ''
    """
def test_main():
    from test import test_xml_etree_c
    support.run_doctest(test_xml_etree_c, verbosity=True)
if __name__ == '__main__':
    test_main()