test_minidom.py

来自「mallet是自然语言处理、机器学习领域的一个开源项目。」· Python 代码 · 共 650 行 · 第 1/2 页

PY
650
字号
def testElementReprAndStr():    dom = Document()    el = dom.appendChild(dom.createElement("abc"))    string1 = repr(el)    string2 = str(el)    confirm(string1 == string2)    dom.unlink()# commented out until Fredrick's fix is checked indef _testElementReprAndStrUnicode():    dom = Document()    el = dom.appendChild(dom.createElement(u"abc"))    string1 = repr(el)    string2 = str(el)    confirm(string1 == string2)    dom.unlink()# commented out until Fredrick's fix is checked indef _testElementReprAndStrUnicodeNS():    dom = Document()    el = dom.appendChild(        dom.createElementNS(u"http://www.slashdot.org", u"slash:abc"))    string1 = repr(el)    string2 = str(el)    confirm(string1 == string2)    confirm(string1.find("slash:abc") != -1)    dom.unlink()def testAttributeRepr():    dom = Document()    el = dom.appendChild(dom.createElement(u"abc"))    node = el.setAttribute("abc", "def")    confirm(str(node) == repr(node))    dom.unlink()def testTextNodeRepr(): passdef testWriteXML():    str = '<?xml version="1.0" ?>\n<a b="c"/>'    dom = parseString(str)    domstr = dom.toxml()    dom.unlink()    confirm(str == domstr)def testProcessingInstruction(): passdef testProcessingInstructionRepr(): passdef testTextRepr(): passdef testWriteText(): passdef testDocumentElement(): passdef testTooManyDocumentElements():    doc = parseString("<doc/>")    elem = doc.createElement("extra")    try:        doc.appendChild(elem)    except HierarchyRequestErr:        pass    else:        print "Failed to catch expected exception when" \              " adding extra document element."    elem.unlink()    doc.unlink()def testCreateElementNS(): passdef testCreateAttributeNS(): passdef testParse(): passdef testParseString(): passdef testComment(): passdef testAttrListItem(): passdef testAttrListItems(): passdef testAttrListItemNS(): passdef testAttrListKeys(): passdef testAttrListKeysNS(): passdef testAttrListValues(): passdef testAttrListLength(): passdef testAttrList__getitem__(): passdef testAttrList__setitem__(): passdef testSetAttrValueandNodeValue(): passdef testParseElement(): passdef testParseAttributes(): passdef testParseElementNamespaces(): passdef testParseAttributeNamespaces(): passdef testParseProcessingInstructions(): passdef testChildNodes(): passdef testFirstChild(): passdef testHasChildNodes(): passdef testCloneElementShallow():    dom, clone = _setupCloneElement(0)    confirm(len(clone.childNodes) == 0            and clone.childNodes.length == 0            and clone.parentNode is None            and clone.toxml() == '<doc attr="value"/>'            , "testCloneElementShallow")    dom.unlink()def testCloneElementDeep():    dom, clone = _setupCloneElement(1)    confirm(len(clone.childNodes) == 1            and clone.childNodes.length == 1            and clone.parentNode is None            and clone.toxml() == '<doc attr="value"><foo/></doc>'            , "testCloneElementDeep")    dom.unlink()def _setupCloneElement(deep):    dom = parseString("<doc attr='value'><foo/></doc>")    root = dom.documentElement    clone = root.cloneNode(deep)    _testCloneElementCopiesAttributes(        root, clone, "testCloneElement" + (deep and "Deep" or "Shallow"))    # mutilate the original so shared data is detected    root.tagName = root.nodeName = "MODIFIED"    root.setAttribute("attr", "NEW VALUE")    root.setAttribute("added", "VALUE")    return dom, clonedef _testCloneElementCopiesAttributes(e1, e2, test):    attrs1 = e1.attributes    attrs2 = e2.attributes    keys1 = attrs1.keys()    keys2 = attrs2.keys()    keys1.sort()    keys2.sort()    confirm(keys1 == keys2, "clone of element has same attribute keys")    for i in range(len(keys1)):        a1 = attrs1.item(i)        a2 = attrs2.item(i)        confirm(a1 is not a2                and a1.value == a2.value                and a1.nodeValue == a2.nodeValue                and a1.namespaceURI == a2.namespaceURI                and a1.localName == a2.localName                , "clone of attribute node has proper attribute values")        confirm(a2.ownerElement is e2,                "clone of attribute node correctly owned")def testCloneDocumentShallow(): passdef testCloneDocumentDeep(): passdef testCloneAttributeShallow(): passdef testCloneAttributeDeep(): passdef testClonePIShallow(): passdef testClonePIDeep(): passdef testNormalize():    doc = parseString("<doc/>")    root = doc.documentElement    root.appendChild(doc.createTextNode("first"))    root.appendChild(doc.createTextNode("second"))    confirm(len(root.childNodes) == 2            and root.childNodes.length == 2, "testNormalize -- preparation")    doc.normalize()    confirm(len(root.childNodes) == 1            and root.childNodes.length == 1            and root.firstChild is root.lastChild            and root.firstChild.data == "firstsecond"            , "testNormalize -- result")    doc.unlink()    doc = parseString("<doc/>")    root = doc.documentElement    root.appendChild(doc.createTextNode(""))    doc.normalize()    confirm(len(root.childNodes) == 0            and root.childNodes.length == 0,            "testNormalize -- single empty node removed")    doc.unlink()def testSiblings():    doc = parseString("<doc><?pi?>text?<elm/></doc>")    root = doc.documentElement    (pi, text, elm) = root.childNodes    confirm(pi.nextSibling is text and            pi.previousSibling is None and            text.nextSibling is elm and            text.previousSibling is pi and            elm.nextSibling is None and            elm.previousSibling is text, "testSiblings")    doc.unlink()def testParents():    doc = parseString("<doc><elm1><elm2/><elm2><elm3/></elm2></elm1></doc>")    root = doc.documentElement    elm1 = root.childNodes[0]    (elm2a, elm2b) = elm1.childNodes    elm3 = elm2b.childNodes[0]    confirm(root.parentNode is doc and            elm1.parentNode is root and            elm2a.parentNode is elm1 and            elm2b.parentNode is elm1 and            elm3.parentNode is elm2b, "testParents")    doc.unlink()def testNodeListItem():    doc = parseString("<doc><e/><e/></doc>")    children = doc.childNodes    docelem = children[0]    confirm(children[0] is children.item(0)            and children.item(1) is None            and docelem.childNodes.item(0) is docelem.childNodes[0]            and docelem.childNodes.item(1) is docelem.childNodes[1]            and docelem.childNodes.item(0).childNodes.item(0) is None,            "test NodeList.item()")    doc.unlink()def testSAX2DOM():    from xml.dom import pulldom    sax2dom = pulldom.SAX2DOM()    sax2dom.startDocument()    sax2dom.startElement("doc", {})    sax2dom.characters("text")    sax2dom.startElement("subelm", {})    sax2dom.characters("text")    sax2dom.endElement("subelm")    sax2dom.characters("text")    sax2dom.endElement("doc")    sax2dom.endDocument()    doc = sax2dom.document    root = doc.documentElement    (text1, elm1, text2) = root.childNodes    text3 = elm1.childNodes[0]    confirm(text1.previousSibling is None and            text1.nextSibling is elm1 and            elm1.previousSibling is text1 and            elm1.nextSibling is text2 and            text2.previousSibling is elm1 and            text2.nextSibling is None and            text3.previousSibling is None and            text3.nextSibling is None, "testSAX2DOM - siblings")    confirm(root.parentNode is doc and            text1.parentNode is root and            elm1.parentNode is root and            text2.parentNode is root and            text3.parentNode is elm1, "testSAX2DOM - parents")    doc.unlink()# --- MAIN PROGRAMnames = globals().keys()names.sort()failed = []try:    Node.allnodesexcept AttributeError:    # We don't actually have the minidom from the standard library,    # but are picking up the PyXML version from site-packages.    def check_allnodes():        passelse:    def check_allnodes():        confirm(len(Node.allnodes) == 0,                "assertion: len(Node.allnodes) == 0")        if len(Node.allnodes):            print "Garbage left over:"            if verbose:                print Node.allnodes.items()[0:10]            else:                # Don't print specific nodes if repeatable results                # are needed                print len(Node.allnodes)        Node.allnodes = {}for name in names:    if name.startswith("test"):        func = globals()[name]        try:            func()            check_allnodes()        except:            failed.append(name)            print "Test Failed: ", name            sys.stdout.flush()            traceback.print_exception(*sys.exc_info())            print `sys.exc_info()[1]`            Node.allnodes = {}if failed:    print "\n\n\n**** Check for failures in these tests:"    for name in failed:        print "  " + name

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?