/[thuban]/branches/WIP-pyshapelib-bramz/test/xmlsupport.py
ViewVC logotype

Contents of /branches/WIP-pyshapelib-bramz/test/xmlsupport.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1257 - (show annotations)
Fri Jun 20 12:22:25 2003 UTC (21 years, 8 months ago) by bh
Original Path: trunk/thuban/test/xmlsupport.py
File MIME type: text/x-python
File size: 3469 byte(s)
* test/test_load.py (LoadSessionTest.check_format): New helper
method to make sure the test files we load might have been written
by the current thuban version.
(ClassificationTest.TestLayers, TestSingleLayer.test)
(TestLayerVisibility.test, TestClassification.test)
(TestLabels.test, TestLayerProjection.test, TestRasterLayer.test):
Add check_format() calls and fix the thuban data to match the data
that would be written by saving the session loaded from it.

* test/xmlsupport.py (SaxEventLister, sax_eventlist): Copies of
the same class and function in test_save.

* test/test_xmlsupport.py (TestEventList): New. test cases for
sax_eventlist

1 # Copyright (C) 2003 by Intevation GmbH
2 # Authors:
3 # Bernhard Herzog <[email protected]>
4 #
5 # This program is free software under the GPL (>=v2)
6 # Read the file COPYING coming with the software for details.
7
8 """XML support code for the test cases"""
9
10 import sys
11 import os
12 from StringIO import StringIO
13 import xml.sax
14 import xml.sax.handler
15 from xml.sax import make_parser, ErrorHandler, SAXNotRecognizedException
16
17 import support
18
19 try:
20 import pyRXP
21 except ImportError:
22 pyRXP = None
23
24 class ValidationTest:
25
26 """Mix-in class for tests that want to check for validity of XML data"""
27
28 # If true, at least one test case tried to validate XML data but
29 # couldn't because PyRXP is not available
30 validation_attempt_ignored = False
31
32 def validate_data(self, data):
33 """Validate the XML data"""
34 if pyRXP is not None:
35 parser = pyRXP.Parser()
36 try:
37 parser.parse(data, eoCB = self.rxp_eo_cb)
38 except pyRXP.error, val:
39 raise AssertionError, str(val), sys.exc_info()[2]
40 else:
41 ValidationTest.validation_attempt_ignored = True
42
43 def rxp_eo_cb(self, filename):
44 """Resolve an eternal entity
45
46 In the Thuban test cases the only external entities that have to
47 be resolved are the DTDs which now live in the resource
48 directory. So, interpret any filename relative to that
49 directory.
50 """
51 return os.path.join(support.resource_dir(), "XML", filename)
52
53
54 #
55 # Classes and functions to convert XML to a normalized list
56 # representation for comparisons
57 #
58
59 class SaxEventLister(xml.sax.handler.ContentHandler):
60
61 """Create a normalized list representation containing the SAX events
62 """
63
64 def __init__(self):
65 self.eventlist = []
66
67 def startElementNS(self, name, qname, attrs):
68 items = attrs.items()
69 items.sort()
70 self.eventlist.append(("start", name, qname, items))
71
72 def endElementNS(self, name, qname):
73 self.eventlist.append(("end", name, qname))
74
75
76 def sax_eventlist(data = None, filename = None):
77 """Return a list of SAX event generated for a given XML source
78
79 The xml source may either be a string with the actual XML, in which
80 case it should be given as the keyword argument data or the name of
81 an xml file given as the keyword argument filename
82 """
83 if filename is not None:
84 data = open(filename).read()
85 handler = SaxEventLister()
86 parser = make_parser()
87 parser.setContentHandler(handler)
88 parser.setErrorHandler(ErrorHandler())
89 parser.setFeature(xml.sax.handler.feature_namespaces, 1)
90
91 #
92 # see comment at the end of Thuban/Model/load.py
93 #
94 try:
95 parser.setFeature(xml.sax.handler.feature_validation, 0)
96 parser.setFeature(xml.sax.handler.feature_external_ges, 0)
97 parser.setFeature(xml.sax.handler.feature_external_pes, 0)
98 except SAXNotRecognizedException:
99 pass
100
101 inpsrc = xml.sax.InputSource()
102 inpsrc.setByteStream(StringIO(data))
103 parser.parse(inpsrc)
104
105 return handler.eventlist
106
107
108 def print_summary_message():
109 """Print a summary message about validation tests
110
111 Currently simply print a message about pyRXP not being available if
112 a test case's attempt to validate XML was ignored because of that.
113 """
114 if ValidationTest.validation_attempt_ignored:
115 print "XML validation attempts ignored because pyRXP is not available"

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26