test_minidom.py

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

PY
650
字号
# test for xml.dom.minidomfrom xml.dom.minidom import parse, Node, Document, parseStringfrom xml.dom import HierarchyRequestErrimport xml.parsers.expatimport osimport sysimport tracebackfrom test_support import verboseif __name__ == "__main__":    base = sys.argv[0]else:    base = __file__tstfile = os.path.join(os.path.dirname(base), "test"+os.extsep+"xml")del basedef confirm(test, testname = "Test"):    if not test:        print "Failed " + testname        raise ExceptionNode._debug = 1def testParseFromFile():    from StringIO import StringIO    dom = parse(StringIO(open(tstfile).read()))    dom.unlink()    confirm(isinstance(dom,Document))def testGetElementsByTagName():    dom = parse(tstfile)    confirm(dom.getElementsByTagName("LI") == \            dom.documentElement.getElementsByTagName("LI"))    dom.unlink()def testInsertBefore():    dom = parseString("<doc><foo/></doc>")    root = dom.documentElement    elem = root.childNodes[0]    nelem = dom.createElement("element")    root.insertBefore(nelem, elem)    confirm(len(root.childNodes) == 2            and root.childNodes.length == 2            and root.childNodes[0] is nelem            and root.childNodes.item(0) is nelem            and root.childNodes[1] is elem            and root.childNodes.item(1) is elem            and root.firstChild is nelem            and root.lastChild is elem            and root.toxml() == "<doc><element/><foo/></doc>"            , "testInsertBefore -- node properly placed in tree")    nelem = dom.createElement("element")    root.insertBefore(nelem, None)    confirm(len(root.childNodes) == 3            and root.childNodes.length == 3            and root.childNodes[1] is elem            and root.childNodes.item(1) is elem            and root.childNodes[2] is nelem            and root.childNodes.item(2) is nelem            and root.lastChild is nelem            and nelem.previousSibling is elem            and root.toxml() == "<doc><element/><foo/><element/></doc>"            , "testInsertBefore -- node properly placed in tree")    nelem2 = dom.createElement("bar")    root.insertBefore(nelem2, nelem)    confirm(len(root.childNodes) == 4            and root.childNodes.length == 4            and root.childNodes[2] is nelem2            and root.childNodes.item(2) is nelem2            and root.childNodes[3] is nelem            and root.childNodes.item(3) is nelem            and nelem2.nextSibling is nelem            and nelem.previousSibling is nelem2            and root.toxml() == "<doc><element/><foo/><bar/><element/></doc>"            , "testInsertBefore -- node properly placed in tree")    dom.unlink()def _create_fragment_test_nodes():    dom = parseString("<doc/>")    orig = dom.createTextNode("original")    c1 = dom.createTextNode("foo")    c2 = dom.createTextNode("bar")    c3 = dom.createTextNode("bat")    dom.documentElement.appendChild(orig)    frag = dom.createDocumentFragment()    frag.appendChild(c1)    frag.appendChild(c2)    frag.appendChild(c3)    return dom, orig, c1, c2, c3, fragdef testInsertBeforeFragment():    dom, orig, c1, c2, c3, frag = _create_fragment_test_nodes()    dom.documentElement.insertBefore(frag, None)    confirm(tuple(dom.documentElement.childNodes) == (orig, c1, c2, c3),            "insertBefore(<fragment>, None)")    frag.unlink()    dom.unlink()    #    dom, orig, c1, c2, c3, frag = _create_fragment_test_nodes()    dom.documentElement.insertBefore(frag, orig)    confirm(tuple(dom.documentElement.childNodes) == (c1, c2, c3, orig),            "insertBefore(<fragment>, orig)")    frag.unlink()    dom.unlink()def testAppendChild():    dom = parse(tstfile)    dom.documentElement.appendChild(dom.createComment(u"Hello"))    confirm(dom.documentElement.childNodes[-1].nodeName == "#comment")    confirm(dom.documentElement.childNodes[-1].data == "Hello")    dom.unlink()def testAppendChildFragment():    dom, orig, c1, c2, c3, frag = _create_fragment_test_nodes()    dom.documentElement.appendChild(frag)    confirm(tuple(dom.documentElement.childNodes) == (orig, c1, c2, c3),            "appendChild(<fragment>)")    frag.unlink()    dom.unlink()def testReplaceChildFragment():    dom, orig, c1, c2, c3, frag = _create_fragment_test_nodes()    dom.documentElement.replaceChild(frag, orig)    orig.unlink()    confirm(tuple(dom.documentElement.childNodes) == (c1, c2, c3),            "replaceChild(<fragment>)")    frag.unlink()    dom.unlink()def testLegalChildren():    dom = Document()    elem = dom.createElement('element')    text = dom.createTextNode('text')    try: dom.appendChild(text)    except HierarchyRequestErr: pass    else:        print "dom.appendChild didn't raise HierarchyRequestErr"    dom.appendChild(elem)    try: dom.insertBefore(text, elem)    except HierarchyRequestErr: pass    else:        print "dom.appendChild didn't raise HierarchyRequestErr"    try: dom.replaceChild(text, elem)    except HierarchyRequestErr: pass    else:        print "dom.appendChild didn't raise HierarchyRequestErr"    nodemap = elem.attributes    try: nodemap.setNamedItem(text)    except HierarchyRequestErr: pass    else:        print "NamedNodeMap.setNamedItem didn't raise HierarchyRequestErr"    try: nodemap.setNamedItemNS(text)    except HierarchyRequestErr: pass    else:        print "NamedNodeMap.setNamedItemNS didn't raise HierarchyRequestErr"    elem.appendChild(text)    dom.unlink()def testNamedNodeMapSetItem():    dom = Document()    elem = dom.createElement('element')    attrs = elem.attributes    attrs["foo"] = "bar"    a = attrs.item(0)    confirm(a.ownerDocument is dom,            "NamedNodeMap.__setitem__() sets ownerDocument")    confirm(a.ownerElement is elem,            "NamedNodeMap.__setitem__() sets ownerElement")    confirm(a.value == "bar",            "NamedNodeMap.__setitem__() sets value")    confirm(a.nodeValue == "bar",            "NamedNodeMap.__setitem__() sets nodeValue")    elem.unlink()    dom.unlink()def testNonZero():    dom = parse(tstfile)    confirm(dom)# should not be zero    dom.appendChild(dom.createComment("foo"))    confirm(not dom.childNodes[-1].childNodes)    dom.unlink()def testUnlink():    dom = parse(tstfile)    dom.unlink()def testElement():    dom = Document()    dom.appendChild(dom.createElement("abc"))    confirm(dom.documentElement)    dom.unlink()def testAAA():    dom = parseString("<abc/>")    el = dom.documentElement    el.setAttribute("spam", "jam2")    confirm(el.toxml() == '<abc spam="jam2"/>', "testAAA")    a = el.getAttributeNode("spam")    confirm(a.ownerDocument is dom,            "setAttribute() sets ownerDocument")    confirm(a.ownerElement is dom.documentElement,            "setAttribute() sets ownerElement")    dom.unlink()def testAAB():    dom = parseString("<abc/>")    el = dom.documentElement    el.setAttribute("spam", "jam")    el.setAttribute("spam", "jam2")    confirm(el.toxml() == '<abc spam="jam2"/>', "testAAB")    dom.unlink()def testAddAttr():    dom = Document()    child = dom.appendChild(dom.createElement("abc"))    child.setAttribute("def", "ghi")    confirm(child.getAttribute("def") == "ghi")    confirm(child.attributes["def"].value == "ghi")    child.setAttribute("jkl", "mno")    confirm(child.getAttribute("jkl") == "mno")    confirm(child.attributes["jkl"].value == "mno")    confirm(len(child.attributes) == 2)    child.setAttribute("def", "newval")    confirm(child.getAttribute("def") == "newval")    confirm(child.attributes["def"].value == "newval")    confirm(len(child.attributes) == 2)    dom.unlink()def testDeleteAttr():    dom = Document()    child = dom.appendChild(dom.createElement("abc"))    confirm(len(child.attributes) == 0)    child.setAttribute("def", "ghi")    confirm(len(child.attributes) == 1)    del child.attributes["def"]    confirm(len(child.attributes) == 0)    dom.unlink()def testRemoveAttr():    dom = Document()    child = dom.appendChild(dom.createElement("abc"))    child.setAttribute("def", "ghi")    confirm(len(child.attributes) == 1)    child.removeAttribute("def")    confirm(len(child.attributes) == 0)    dom.unlink()def testRemoveAttrNS():    dom = Document()    child = dom.appendChild(            dom.createElementNS("http://www.python.org", "python:abc"))    child.setAttributeNS("http://www.w3.org", "xmlns:python",                                            "http://www.python.org")    child.setAttributeNS("http://www.python.org", "python:abcattr", "foo")    confirm(len(child.attributes) == 2)    child.removeAttributeNS("http://www.python.org", "abcattr")    confirm(len(child.attributes) == 1)    dom.unlink()def testRemoveAttributeNode():    dom = Document()    child = dom.appendChild(dom.createElement("foo"))    child.setAttribute("spam", "jam")    confirm(len(child.attributes) == 1)    node = child.getAttributeNode("spam")    child.removeAttributeNode(node)    confirm(len(child.attributes) == 0)    dom.unlink()def testChangeAttr():    dom = parseString("<abc/>")    el = dom.documentElement    el.setAttribute("spam", "jam")    confirm(len(el.attributes) == 1)    el.setAttribute("spam", "bam")    confirm(len(el.attributes) == 1)    el.attributes["spam"] = "ham"    confirm(len(el.attributes) == 1)    el.setAttribute("spam2", "bam")    confirm(len(el.attributes) == 2)    el.attributes[ "spam2"] = "bam2"    confirm(len(el.attributes) == 2)    dom.unlink()def testGetAttrList():    passdef testGetAttrValues(): passdef testGetAttrLength(): passdef testGetAttribute(): passdef testGetAttributeNS(): passdef testGetAttributeNode(): passdef testGetElementsByTagNameNS():    d="""<foo xmlns:minidom="http://pyxml.sf.net/minidom">    <minidom:myelem/>    </foo>"""    dom = parseString(d)    elem = dom.getElementsByTagNameNS("http://pyxml.sf.net/minidom","myelem")    confirm(len(elem) == 1)    dom.unlink()def testGetEmptyNodeListFromElementsByTagNameNS(): pass

⌨️ 快捷键说明

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