[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/CaptainCodeman/html5lib-python/python3-old/tests/test_sax.py [Back]  [Original]

import support
import StringIO
import xml.sax
import new
import unittest

PREFERRED_XML_PARSERS = ["drv_libxml2"]

from html5lib.treebuilders import dom
from html5lib.liberalxmlparser import *

class SAXLogger: 
  def __init__(self):
    self.log = []
  def setDocumentLocator(self, locator):
    pass
  def startElement(self, name, attrs):
    self.log.append(['startElement', name, dict(attrs.items())])
  def startElementNS(self, name, qname, attrs):
    if qname is None:
      qname = name[1]
    self.log.append(['startElementNS', name, qname, dict(attrs.items())])
  def endElementNS(self, name, qname):
    if qname is None:
      qname = name[1]
    self.log.append(['endElementNS', name, qname])
  def __getattr__(self, name):
    def function(self, *args): self.log.append([name]+list(args))
    return new.instancemethod(function, self, SAXLogger)

class SAXTest(unittest.TestCase):
  def DOMParse(self, input):
    return XMLParser(tree=dom.TreeBuilder).parse(input)

  def setNS(self, saxparser):
    import xml.dom
    saxparser.setFeature(xml.sax.handler.feature_namespaces, 1)
    return {'xml':xml.dom.XML_NAMESPACE}

  def saxdiff(self, input):
    domhandler = SAXLogger()

    saxhandler = SAXLogger()
    saxparser = xml.sax.make_parser(PREFERRED_XML_PARSERS)

    dom.dom2sax(self.DOMParse(input), domhandler, self.setNS(saxparser))

    saxparser.setContentHandler(saxhandler)
    source = xml.sax.xmlreader.InputSource()
    source.setByteStream(StringIO.StringIO(input))
    saxparser.parse(source)

    for i in range(0,len(saxhandler.log)):
      if i > len(domhandler.log):
        self.assertEqual(saxhandler.log[i:], domhandler.log[i:])
      elif saxhandler.log[i] != domhandler.log[i]:
        self.assertEqual(saxhandler.log[i], domhandler.log[i])
    else:
      self.assertEquals(saxhandler.log, domhandler.log)

  def test_nodes(self):
    self.saxdiff(''x' +
      '')

  def test_xmllang(self):
    self.saxdiff(''
      "foo")

  def test_ns(self):
    self.saxdiff(
'' +
'XLINK' +
'' +
  '' +
    '' +
      '' +
        '' +
        '' +
      '' +
      '' +
      '' +
      '' +
    '' +
    '' +
      '' +
      '' +
      '' +

      '' +
      '' +
      '' +
    '' +
  '' +
'')

# Repeat tests without namespace support
class nonamespaceTest(SAXTest):
  def setNS(self, saxparser):
    return None

# Redundantly rerun all tests using the "real" minidom parser, just to be
# sure that the output is consistent
class minidomTest(SAXTest):
  def DOMParse(self, input):
    return xml.dom.minidom.parseString(input)

def buildTestSuite():
  return unittest.defaultTestLoader.loadTestsFromName(__name__)

def main():
    buildTestSuite()
    unittest.main()

if __name__ == '__main__':
    main()

Web Proxy Viewer  |  New URL  |  Original Page