38 |
from Thuban.Model.range import Range |
from Thuban.Model.range import Range |
39 |
|
|
40 |
|
|
|
class SaxEventLister(xml.sax.handler.ContentHandler): |
|
|
|
|
|
def __init__(self): |
|
|
self.eventlist = [] |
|
|
|
|
|
def startElementNS(self, name, qname, attrs): |
|
|
items = attrs.items() |
|
|
items.sort() |
|
|
self.eventlist.append(("start", name, qname, items)) |
|
|
|
|
|
def endElementNS(self, name, qname): |
|
|
self.eventlist.append(("end", name, qname)) |
|
|
|
|
|
|
|
|
def sax_eventlist(data): |
|
|
"""Return a list of SAX event generated for the XML data. |
|
|
""" |
|
|
handler = SaxEventLister() |
|
|
parser = make_parser() |
|
|
parser.setContentHandler(handler) |
|
|
parser.setErrorHandler(ErrorHandler()) |
|
|
parser.setFeature(xml.sax.handler.feature_namespaces, 1) |
|
|
|
|
|
# |
|
|
# see comment at the end of Thuban/Model/load.py |
|
|
# |
|
|
try: |
|
|
parser.setFeature(xml.sax.handler.feature_validation, 0) |
|
|
parser.setFeature(xml.sax.handler.feature_external_ges, 0) |
|
|
parser.setFeature(xml.sax.handler.feature_external_pes, 0) |
|
|
except SAXNotRecognizedException: |
|
|
pass |
|
|
|
|
|
inpsrc = xml.sax.InputSource() |
|
|
inpsrc.setByteStream(StringIO(data)) |
|
|
parser.parse(inpsrc) |
|
|
|
|
|
return handler.eventlist |
|
|
|
|
41 |
class XMLWriterTest(unittest.TestCase): |
class XMLWriterTest(unittest.TestCase): |
42 |
|
|
43 |
def testEncode(self): |
def testEncode(self): |
61 |
xmlsupport.ValidationTest): |
xmlsupport.ValidationTest): |
62 |
|
|
63 |
def compare_xml(self, xml1, xml2): |
def compare_xml(self, xml1, xml2): |
64 |
self.assertEquals(sax_eventlist(xml1), sax_eventlist(xml2)) |
self.assertEquals(xmlsupport.sax_eventlist(xml1), |
65 |
|
xmlsupport.sax_eventlist(xml2)) |
66 |
|
|
67 |
def testEmptySession(self): |
def testEmptySession(self): |
68 |
"""Save an empty session""" |
"""Save an empty session""" |