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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 947 - (show annotations)
Tue May 20 15:27:19 2003 UTC (21 years, 9 months ago) by jonathan
Original Path: trunk/thuban/test/test_save.py
File MIME type: text/x-python
File size: 8620 byte(s)
Added tests associated with the raster layer code.

1 # Copyright (c) 2002, 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 Thuban for details.
7
8 """
9 Test saving a thuban session as XML
10 """
11
12 __version__ = "$Revision$"
13 # $Source$
14 # $Id$
15
16 import os
17 import unittest
18 from StringIO import StringIO
19
20 import xml.sax
21 import xml.sax.handler
22 from xml.sax import make_parser, ErrorHandler, SAXNotRecognizedException
23
24 import support
25 support.initthuban()
26
27 from Thuban.Model.save import save_session
28 from Thuban.Model.session import Session
29 from Thuban.Model.map import Map
30 from Thuban.Model.layer import Layer, RasterLayer
31 from Thuban.Model.proj import Projection
32
33
34 class SaxEventLister(xml.sax.handler.ContentHandler):
35
36 def __init__(self):
37 self.eventlist = []
38
39 def startElementNS(self, name, qname, attrs):
40 items = attrs.items()
41 items.sort()
42 self.eventlist.append(("start", name, qname, items))
43
44 def endElementNS(self, name, qname):
45 self.eventlist.append(("end", name, qname))
46
47
48 def sax_eventlist(data):
49 """Return a list of SAX event generated for the XML data.
50 """
51 handler = SaxEventLister()
52 parser = make_parser()
53 parser.setContentHandler(handler)
54 parser.setErrorHandler(ErrorHandler())
55 parser.setFeature(xml.sax.handler.feature_namespaces, 1)
56
57 #
58 # see comment at the end of Thuban/Model/load.py
59 #
60 try:
61 parser.setFeature(xml.sax.handler.feature_validation, 0)
62 parser.setFeature(xml.sax.handler.feature_external_ges, 0)
63 parser.setFeature(xml.sax.handler.feature_external_pes, 0)
64 except SAXNotRecognizedException:
65 pass
66
67 inpsrc = xml.sax.InputSource()
68 inpsrc.setByteStream(StringIO(data))
69 parser.parse(inpsrc)
70
71 return handler.eventlist
72
73 class SaveSessionTest(unittest.TestCase, support.FileTestMixin):
74
75 def compare_xml(self, xml1, xml2):
76 self.assertEquals(sax_eventlist(xml1), sax_eventlist(xml2))
77
78 def testEmptySession(self):
79 """Save an empty session"""
80 session = Session("empty session")
81 filename = self.temp_file_name("save_emptysession.thuban")
82 save_session(session, filename)
83 session.Destroy()
84
85 file = open(filename)
86 written_contents = file.read()
87 file.close()
88 self.compare_xml(written_contents,
89 '<?xml version="1.0" encoding="UTF-8"?>\n'
90 '<!DOCTYPE session SYSTEM "thuban.dtd">\n'
91 '<session title="empty session">\n</session>\n')
92
93 def testSingleLayer(self):
94 """Save a session with a single map with a single layer"""
95 # deliberately put an apersand in the title :)
96 session = Session("single map&layer")
97 proj = Projection(["zone=26", "proj=utm", "ellps=clrk66"])
98 map = Map("Test Map", projection = proj)
99 session.AddMap(map)
100 # use shapefile from the example data
101 shpfile = os.path.join(os.path.dirname(__file__),
102 os.pardir, "Data", "iceland", "political.shp")
103 layer = Layer("My Layer", session.OpenShapefile(shpfile))
104 map.AddLayer(layer)
105
106 filename = self.temp_file_name("save_singlemap.thuban")
107 save_session(session, filename)
108
109 file = open(filename)
110 written_contents = file.read()
111 file.close()
112 expected_template = '''<?xml version="1.0" encoding="UTF-8"?>
113 <!DOCTYPE session SYSTEM "thuban.dtd">
114 <session title="single map&amp;layer">
115 <map title="Test Map">
116 <projection name="Unknown">
117 <parameter value="zone=26"/>
118 <parameter value="proj=utm"/>
119 <parameter value="ellps=clrk66"/>
120 </projection>
121 <layer title="My Layer" filename="%s"
122 fill="None" stroke="#000000" stroke_width="1" visible="%s"/>
123 </map>
124 </session>'''
125
126 expected_contents = expected_template % \
127 (os.path.join("..", "..", "Data", "iceland", "political.shp"),
128 "true")
129
130 #print written_contents
131 #print "********************************************"
132 #print expected_contents
133 self.compare_xml(written_contents, expected_contents)
134
135 layer.SetVisible(False)
136 save_session(session, filename)
137
138 file = open(filename)
139 written_contents = file.read()
140 file.close()
141 expected_contents = expected_template % \
142 (os.path.join("..", "..", "Data", "iceland", "political.shp"),
143 "false")
144
145 #print written_contents
146 #print "********************************************"
147 #print expected_contents
148 self.compare_xml(written_contents, expected_contents)
149
150 session.Destroy()
151
152 def testLayerProjection(self):
153 # deliberately put an apersand in the title :)
154 session = Session("single map&layer")
155 proj = Projection(["zone=26", "proj=utm", "ellps=clrk66"])
156 map = Map("Test Map", projection = proj)
157 session.AddMap(map)
158 # use shapefile from the example data
159 shpfile = os.path.join(os.path.dirname(__file__),
160 os.pardir, "Data", "iceland", "political.shp")
161 layer = Layer("My Layer", session.OpenShapefile(shpfile))
162 proj = Projection(["proj=lcc", "ellps=clrk66"], "Layer Projection")
163 layer.SetProjection(proj)
164 map.AddLayer(layer)
165
166 filename = self.temp_file_name("save_singlemap.thuban")
167 save_session(session, filename)
168 session.Destroy()
169
170 file = open(filename)
171 written_contents = file.read()
172 file.close()
173 expected_contents = '''<?xml version="1.0" encoding="UTF-8"?>
174 <!DOCTYPE session SYSTEM "thuban.dtd">
175 <session title="single map&amp;layer">
176 <map title="Test Map">
177 <projection name="Unknown">
178 <parameter value="zone=26"/>
179 <parameter value="proj=utm"/>
180 <parameter value="ellps=clrk66"/>
181 </projection>
182 <layer title="My Layer" filename="%s"
183 fill="None" stroke="#000000" stroke_width="1" visible="true">
184 <projection name="Layer Projection">
185 <parameter value="proj=lcc"/>
186 <parameter value="ellps=clrk66"/>
187 </projection>
188 </layer>
189 </map>
190 </session>''' % os.path.join("..", "..", "Data", "iceland",
191 "political.shp")
192 #print written_contents
193 #print "********************************************"
194 #print expected_contents
195 self.compare_xml(written_contents, expected_contents)
196
197
198 def testRasterLayer(self):
199 # deliberately put an apersand in the title :)
200 session = Session("single map&layer")
201 map = Map("Test Map")
202 session.AddMap(map)
203 # use shapefile from the example data
204 imgfile = os.path.join(os.path.dirname(__file__),
205 os.pardir, "Data", "iceland", "island.tif")
206 layer = RasterLayer("My RasterLayer", imgfile)
207 map.AddLayer(layer)
208
209 filename = self.temp_file_name("save_singlemap.thuban")
210 save_session(session, filename)
211 session.Destroy()
212
213 file = open(filename)
214 written_contents = file.read()
215 file.close()
216 expected_contents = '''<?xml version="1.0" encoding="UTF-8"?>
217 <!DOCTYPE session SYSTEM "thuban.dtd">
218 <session title="single map&amp;layer">
219 <map title="Test Map">
220 <rasterlayer title="My RasterLayer" filename="%s"
221 visible="true">
222 </rasterlayer>
223 </map>
224 </session>''' % os.path.join(os.path.dirname(__file__),
225 os.pardir, "Data", "iceland",
226 "island.tif")
227 #print written_contents
228 #print "********************************************"
229 #print expected_contents
230 self.compare_xml(written_contents, expected_contents)
231
232
233 if __name__ == "__main__":
234 # Fake the __file__ global because it's needed by a test
235 import sys
236 __file__ = sys.argv[0]
237 support.run_tests()

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26