8000 Fix for issue 33: Exception when cloning document · awesome-python/html5lib-python@8bccf2c · GitHub
[go: up one dir, main page]

Skip to content

Commit 8bccf2c

Browse files
committed
Fix for issue 33: Exception when cloning document
--HG-- extra : convert_revision : svn%3Aacbfec75-9323-0410-a652-858a13e371e0/trunk%40567
1 parent cdd3b44 commit 8bccf2c

File tree

2 files changed

+44
-8
lines changed

2 files changed

+44
-8
lines changed

src/treebuilders/dom.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,11 @@ def hilite(self, encoding):
8080
setattr(self.dom, 'hilite', method)
8181
return self
8282

83-
def doctypeClass(self,name):
83+
def insertDoctype(self, name):
8484
domimpl = minidom.getDOMImplementation()
85-
return NodeBuilder(domimpl.createDocumentType(name,None,None))
85+
doctype = domimpl.createDocumentType(name,None,None)
86+
self.document.appendChild(NodeBuilder(doctype))
87+
doctype.ownerDocument = self.dom
8688

8789
def elementClass(self, name):
8890
return NodeBuilder(self.dom.createElement(name))
@@ -126,8 +128,8 @@ def serializeElement(element, indent=0):
126128
if element.nodeType == Node.DOCUMENT_TYPE_NODE:
127129
rv.append("|%s<!DOCTYPE %s>"%(' '*indent, element.name))
128130
elif element.nodeType == Node.DOCUMENT_NODE:
129-
rv.append("#document")
130-
elif element.nodeType == Node.DOCUMENT_FRAGMENT_NODE:
131+
rv.append("#document")
132+
elif element.nodeType == Node.DOCUMENT_FRAGMENT_NODE:
131133
rv.append("#document-fragment")
132134
elif element.nodeType == Node.COMMENT_NODE:
133135
rv.append("|%s<!-- %s -->"%(' '*indent, element.nodeValue))
@@ -215,10 +217,10 @@ def dom2sax(node, handler, nsmap={'xml':XML_NAMESPACE}):
215217
elif node.nodeType == Node.DOCUMENT_NODE:
216218
handler.startDocument()
217219
for child in node.childNodes: dom2sax(child, handler, nsmap)
218-
handler.endDocument()
219-
220-
elif node.nodeType == Node.DOCUMENT_FRAGMENT_NODE:
221-
for child in node.childNodes: dom2sax(child, handler, nsmap)
220+
handler.endDocument()
221+
222+
elif node.nodeType == Node.DOCUMENT_FRAGMENT_NODE:
223+
for child in node.childNodes: dom2sax(child, handler, nsmap)
222224

223225
else:
224226
# ATTRIBUTE_NODE

tests/test_parser2.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#RELEASE remove
2+
if __name__ == '__main__':
3+
import os, sys
4+
os.chdir(os.path.split(os.path.abspath(__file__))[0])
5+
sys.path.insert(0, os.path.abspath(os.path.join(os.pardir, "src")))
6+
7+
import html5parser
8+
from treebuilders import dom
9+
#END RELEASE
10+
11+
#RELEASE add
12+
#from html5lib import html5parser
13+
#from html5lib.treebuilders import dom
14+
#END RELEASE
15+
16+
import unittest
17+
18+
# tests that aren't autogenerated from text files
19+
class MoreParserTests(unittest.TestCase):
20+
21+
def test_assertDoctypeCloneable(self):
22+
parser = html5parser.HTMLParser(tree=dom.TreeBuilder)
23+
doc = parser.parse('<!DOCTYPE HTML>')
24+
self.assert_(doc.cloneNode(True))
25+
26+
def buildTestSuite():
27+
return unittest.defaultTestLoader.loadTestsFromName(__name__)
28+
29+
def main():
30+
buildTestSuite()
31+
unittest.main()
32+
33+
if __name__ == '__main__':
34+
main()

0 commit comments

Comments
 (0)
0