Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Add test for sax treeadapter.
  • Loading branch information
ambv authored and gsnedders committed Jun 16, 2013
commit c5cbd409c4b77efac35e0450be1b0711b47cb33c
45 changes: 45 additions & 0 deletions html5lib/tests/support.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import sys
import codecs
import glob
import xml.sax.handler

base_path = os.path.split(__file__)[0]

Expand Down Expand Up @@ -130,3 +131,47 @@ def errorMessage(input, expected, actual):
if sys.version_info.major == 2:
msg = msg.encode("ascii", "backslashreplace")
return msg


class TracingSaxHandler(xml.sax.handler.ContentHandler):
def __init__(self):
xml.sax.handler.ContentHandler.__init__(self)
self.visited = []

def startDocument(self):
self.visited.append('startDocument')

def endDocument(self):
self.visited.append('endDocument')

def startPrefixMapping(self, prefix, uri):
# These are ignored as their order is not guaranteed
pass

def endPrefixMapping(self, prefix):
# These are ignored as their order is not guaranteed
pass

def startElement(self, name, attrs):
self.visited.append(('startElement', name, attrs))

def endElement(self, name):
self.visited.append(('endElement', name))

def startElementNS(self, name, qname, attrs):
self.visited.append(('startElementNS', name, qname, dict(attrs)))

def endElementNS(self, name, qname):
self.visited.append(('endElementNS', name, qname))

def characters(self, content):
self.visited.append(('characters', content))

def ignorableWhitespace(self, whitespace):
self.visited.append(('ignorableWhitespace', whitespace))

def processingInstruction(self, target, data):
self.visited.append(('processingInstruction', target, data))

def skippedEntity(self, name):
self.visited.append(('skippedEntity', name))
40 changes: 40 additions & 0 deletions html5lib/tests/test_treeadapters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from __future__ import absolute_import, division, unicode_literals

from . import support # flake8: noqa

import html5lib
from html5lib.treeadapters import sax
from html5lib.treewalkers import getTreeWalker


def test_to_sax():
handler = support.TracingSaxHandler()
tree = html5lib.parse("""<html xml:lang="en">
<title>Directory Listing</title>
<a href="/"><b/></p>
""", treebuilder="etree")
walker = getTreeWalker("etree")
sax.to_sax(walker(tree), handler)
expected = [
'startDocument',
('startElementNS', ('http://www.w3.org/1999/xhtml', 'html'),
'html', {(None, 'xml:lang'): 'en'}),
('startElementNS', ('http://www.w3.org/1999/xhtml', 'head'), 'head', {}),
('startElementNS', ('http://www.w3.org/1999/xhtml', 'title'), 'title', {}),
('characters', 'Directory Listing'),
('endElementNS', ('http://www.w3.org/1999/xhtml', 'title'), 'title'),
('characters', '\n '),
('endElementNS', ('http://www.w3.org/1999/xhtml', 'head'), 'head'),
('startElementNS', ('http://www.w3.org/1999/xhtml', 'body'), 'body', {}),
('startElementNS', ('http://www.w3.org/1999/xhtml', 'a'), 'a', {(None, 'href'): '/'}),
('startElementNS', ('http://www.w3.org/1999/xhtml', 'b'), 'b', {}),
('startElementNS', ('http://www.w3.org/1999/xhtml', 'p'), 'p', {}),
('endElementNS', ('http://www.w3.org/1999/xhtml', 'p'), 'p'),
('characters', '\n '),
('endElementNS', ('http://www.w3.org/1999/xhtml', 'b'), 'b'),
('endElementNS', ('http://www.w3.org/1999/xhtml', 'a'), 'a'),
('endElementNS', ('http://www.w3.org/1999/xhtml', 'body'), 'body'),
('endElementNS', ('http://www.w3.org/1999/xhtml', 'html'), 'html'),
'endDocument',
]
assert expected == handler.visited