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

Contents of /branches/WIP-pyshapelib-bramz/test/test_load.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_load.py
File MIME type: text/x-python
File size: 14793 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 loading a thuban session from a file
10 """
11
12 __version__ = "$Revision$"
13 # $Source$
14 # $Id$
15
16 import os
17 import unittest
18
19 import support
20 support.initthuban()
21
22 from Thuban.Model.load import load_session, parse_color
23 from Thuban.Model.session import Session
24 from Thuban.Model.map import Map
25 from Thuban.Model.layer import Layer
26 from Thuban.Model.proj import Projection
27 from Thuban.Model.color import Color
28
29 from Thuban.Model.table import FIELDTYPE_INT, FIELDTYPE_DOUBLE, FIELDTYPE_STRING
30
31 from Thuban.Model.classification import ClassGroupProperties, ClassGroupRange,\
32 ClassGroupSingleton, ClassGroupDefault
33
34 def filenames_equal(name1, name2):
35 """Return true if the filenames name1 and name2 are equal.
36
37 On systems where it is available, simply use os.path.samefile,
38 otherwise return whether the normalized versions of the filenames
39 according to os.path.normpath are equal.
40 """
41 if hasattr(os.path, "samefile"):
42 return os.path.samefile(name1, name2)
43 return os.path.normpath(name1) == os.path.normpath(name2)
44
45
46 contents_single_map = '''\
47 <?xml version="1.0" encoding="UTF-8"?>
48 <!DOCTYPE session SYSTEM "thuban.dtd">
49 <session title="single map&amp;layer">
50 <map title="Test Map">
51 <projection>
52 <parameter value="zone=26"/>
53 <parameter value="proj=utm"/>
54 <parameter value="ellps=clrk66"/>
55 </projection>
56 <layer title="My Layer" stroke_width="1" fill="None"
57 filename="../../Data/iceland/political.shp"
58 stroke="#000000"/>
59 </map>
60 </session>
61 '''
62
63 contents_classified_map_v0_2 = '''\
64 <?xml version="1.0" encoding="UTF-8"?>
65 <!DOCTYPE session SYSTEM "thuban.dtd">
66 <session title="single map&amp;layer">
67 <map title="Test Map">
68 <projection>
69 <parameter value="zone=26"/>
70 <parameter value="proj=utm"/>
71 <parameter value="ellps=clrk66"/>
72 </projection>
73 <layer title="My Layer" stroke_width="1" fill="None"
74 filename="../../Data/iceland/political.shp"
75 stroke="#000000">
76 <classification field="POPYREG" field_type="string">
77 <clnull>
78 <cldata stroke="#000000" stroke_width="1" fill="None"/>
79 </clnull>
80 <clpoint value="1">
81 <cldata stroke="#000000" stroke_width="2" fill="None"/>
82 </clpoint>
83 <clpoint value="1">
84 <cldata stroke="#000000" stroke_width="10" fill="None"/>
85 </clpoint>
86 </classification>
87 </layer>
88 <layer title="My Layer 2" stroke_width="1" fill="None"
89 filename="../../Data/iceland/political.shp"
90 stroke="#000000">
91 <classification field="AREA" field_type="double">
92 <clnull>
93 <cldata stroke="#000000" stroke_width="2" fill="None"/>
94 </clnull>
95 <clrange min="0" max="1">
96 <cldata stroke="#111111" stroke_width="1" fill="None"/>
97 </clrange>
98 <clpoint value=".5">
99 <cldata stroke="#000000" stroke_width="1" fill="#111111"/>
100 </clpoint>
101 <clrange min="-1" max="0">
102 <cldata stroke="#000000" stroke_width="1" fill="None"/>
103 </clrange>
104 <clpoint value="-.5">
105 <cldata stroke="#000000" stroke_width="1" fill="None"/>
106 </clpoint>
107 </classification>
108 </layer>
109 </map>
110 </session>
111 '''
112
113 contents_test_labels = '''\
114 <?xml version="1.0" encoding="UTF-8"?>
115 <!DOCTYPE session SYSTEM "thuban.dtd">
116 <session title="single map&amp;layer">
117 <map title="Test Map">
118 <projection>
119 <parameter value="zone=26"/>
120 <parameter value="proj=utm"/>
121 <parameter value="ellps=clrk66"/>
122 </projection>
123 <layer title="My Layer" stroke_width="1" fill="None"
124 filename="../../Data/iceland/political.shp"
125 stroke="#000000">
126 <classification field="POPYREG" field_type="string">
127 <clnull label="hallo">
128 <cldata stroke="#000000" stroke_width="1" fill="None"/>
129 </clnull>
130 <clpoint label="welt" value="1">
131 <cldata stroke="#000000" stroke_width="2" fill="None"/>
132 </clpoint>
133 </classification>
134 </layer>
135 </map>
136 </session>
137 '''
138
139 contents_test_layer_projection = '''\
140 <?xml version="1.0" encoding="UTF-8"?>
141 <!DOCTYPE session SYSTEM "thuban.dtd">
142 <session title="single map&amp;layer">
143 <map title="Test Map">
144 <projection>
145 <parameter value="zone=26"/>
146 <parameter value="proj=utm"/>
147 <parameter value="ellps=clrk66"/>
148 </projection>
149 <layer title="My Layer" stroke_width="1" fill="None"
150 filename="../../Data/iceland/political.shp"
151 stroke="#000000">
152 <projection name="hello">
153 <parameter value="zone=13"/>
154 <parameter value="proj=tmerc"/>
155 <parameter value="ellps=clrk66"/>
156 </projection>
157 <classification field="POPYREG" field_type="string">
158 <clnull label="hallo">
159 <cldata stroke="#000000" stroke_width="1" fill="None"/>
160 </clnull>
161 <clpoint label="welt" value="1">
162 <cldata stroke="#000000" stroke_width="2" fill="None"/>
163 </clpoint>
164 </classification>
165 </layer>
166 <layer title="My Layer" stroke_width="1" fill="None"
167 filename="../../Data/iceland/political.shp"
168 stroke="#000000">
169 <projection>
170 <parameter value="proj=lcc"/>
171 <parameter value="ellps=clrk66"/>
172 </projection>
173 </layer>
174 </map>
175 </session>
176 '''
177
178 contents_test_visible = '''\
179 <?xml version="1.0" encoding="UTF-8"?>
180 <!DOCTYPE session SYSTEM "thuban.dtd">
181 <session title="single map&amp;layer">
182 <map title="Test Map">
183 <projection>
184 <parameter value="zone=26"/>
185 <parameter value="proj=utm"/>
186 <parameter value="ellps=clrk66"/>
187 </projection>
188 <layer title="My Layer" stroke_width="1" fill="None"
189 filename="../../Data/iceland/political.shp"
190 stroke="#000000" visible="false">
191 </layer>
192 </map>
193 </session>
194 '''
195
196 contents_test_rasterlayer = '''\
197 <?xml version="1.0" encoding="UTF-8"?>
198 <!DOCTYPE session SYSTEM "thuban.dtd">
199 <session title="single map&amp;layer">
200 <map title="Test Map">
201 <rasterlayer title="My RasterLayer"
202 filename="../../Data/iceland/island.tif"
203 visible="false">
204 </rasterlayer>
205 </map>
206 </session>
207 '''
208
209 class LoadSessionTest(unittest.TestCase, support.FileTestMixin):
210
211 def setUp(self):
212 """Create the test files"""
213 file = open(self.temp_file_name("load_singlelayer.thuban"), "w")
214 file.write(contents_single_map)
215 file.close()
216
217 file = open(self.temp_file_name("load_classified_v0_2.thuban"), "w")
218 file.write(contents_classified_map_v0_2)
219 file.close()
220
221 file = open(self.temp_file_name("load_labels.thuban"), "w")
222 file.write(contents_test_labels)
223 file.close()
224
225 file = open(self.temp_file_name("load_layerproj.thuban"), "w")
226 file.write(contents_test_layer_projection)
227 file.close()
228
229 file = open(self.temp_file_name("load_visible.thuban"), "w")
230 file.write(contents_test_visible)
231 file.close()
232
233 file = open(self.temp_file_name("load_rasterlayer.thuban"), "w")
234 file.write(contents_test_rasterlayer)
235 file.close()
236
237 self.session = None
238
239 def tearDown(self):
240 if self.session is not None:
241 self.session.Destroy()
242 self.session = None
243
244 def testSingleLayer(self):
245 """Load a session with a single map with a single layer"""
246 eq = self.assertEquals
247 session = load_session(self.temp_file_name("load_singlelayer.thuban"))
248 self.session = session
249
250 # Check the title
251 eq(session.Title(), "single map&layer")
252
253 # the session has one map.
254 maps = session.Maps()
255 eq(len(maps), 1)
256
257 # Check the map's attributes
258 map = maps[0]
259 eq(map.Title(), "Test Map")
260
261 # the map has a single layer
262 layers = map.Layers()
263 eq(len(layers), 1)
264
265 # Check the layer attributes
266 layer = layers[0]
267 eq(layer.Title(), "My Layer")
268 self.failUnless(filenames_equal(layer.filename,
269 os.path.join(self.temp_dir(),
270 os.pardir, os.pardir,
271 "Data", "iceland",
272 "political.shp")))
273 eq(layer.GetClassification().GetDefaultFill(), Color.Transparent)
274 eq(layer.GetClassification().GetDefaultLineColor().hex(), "#000000")
275 eq(layer.Visible(), True)
276
277 self.session.Destroy()
278 self.session = None
279
280 def testLayerVisibility(self):
281 """Test that the visible flag is correctly loaded for a layer."""
282
283 eq = self.assertEquals
284 session = load_session(self.temp_file_name("load_visible.thuban"))
285 self.session = session
286 maps = session.Maps()
287 eq(len(maps), 1)
288 map = maps[0]
289 layers = map.Layers()
290 eq(len(layers), 1)
291 layer = layers[0]
292
293 eq(layer.Visible(), False)
294
295 def testClassification(self):
296 """Load a session with a map and classified layers."""
297
298 session = load_session(self.temp_file_name("load_classified_v0_2.thuban"))
299 self.session = session
300
301 map = self.session.Maps()[0] # only one map in the sample
302
303 expected = [("My Layer", 2,
304 [("default", (), "",
305 ("#000000", 1, "None")),
306 ("single", "1", "",
307 ("#000000", 2, "None")),
308 ("single", "1", "",
309 ("#000000", 10, "None"))]),
310 ("My Layer 2", 4,
311 [("default", (), "",
312 ("#000000", 2, "None")),
313 ("range", (0, 1), "",
314 ("#111111", 1, "None")),
315 ("single", .5, "",
316 ("#000000", 1, "#111111")),
317 ("range", (-1, 0), "",
318 ("#000000", 1, "None")),
319 ("single", -.5, "",
320 ("#000000", 1, "None"))])]
321
322 self.TestLayers(map.Layers(), expected)
323
324 def TestLayers(self, layers, expected):
325
326 TITLE = 0
327 NUM_GROUPS = 1
328 CLASSES = 2
329 GROUP_TYPE = 0
330 GROUP_DATA = 1
331 GROUP_LABEL = 2
332 GROUP_PROPS = 3
333
334 eq = self.assertEquals
335
336 eq(len(layers), len(expected))
337
338 for layer, data in zip(layers, expected):
339 eq(layer.Title(), data[TITLE])
340
341 clazz = layer.GetClassification()
342 eq(clazz.GetNumGroups(), data[NUM_GROUPS])
343 eq(clazz.GetNumGroups() + 1, len(data[CLASSES]))
344
345 i = 0
346 for group in clazz:
347
348 props = ClassGroupProperties()
349 props.SetLineColor(
350 parse_color(data[CLASSES][i][GROUP_PROPS][0]))
351 props.SetLineWidth(data[CLASSES][i][GROUP_PROPS][1])
352 props.SetFill(
353 parse_color(data[CLASSES][i][GROUP_PROPS][2]))
354
355 if data[CLASSES][i][GROUP_TYPE] == "default":
356 g = ClassGroupDefault(props, data[CLASSES][i][GROUP_LABEL])
357 elif data[CLASSES][i][GROUP_TYPE] == "range":
358 g = ClassGroupRange(data[CLASSES][i][GROUP_DATA][0],
359 data[CLASSES][i][GROUP_DATA][1],
360 props, data[CLASSES][i][GROUP_LABEL])
361 elif data[CLASSES][i][GROUP_TYPE] == "single":
362 g = ClassGroupSingleton(data[CLASSES][i][GROUP_DATA],
363 props, data[CLASSES][i][GROUP_LABEL])
364
365 eq(group, g)
366
367 i += 1
368
369 def testLabels(self):
370 """Load a session and test for reading the group labels."""
371
372 eq = self.assertEquals
373 session = load_session(self.temp_file_name("load_labels.thuban"))
374 self.session = session
375
376 map = self.session.Maps()[0] # only one map in the sample
377
378 expected = [("My Layer", 1,
379 [("default", (), "hallo",
380 ("#000000", 1, "None")),
381 ("single", "1", "welt",
382 ("#000000", 2, "None"))])]
383
384 self.TestLayers(map.Layers(), expected)
385
386 def testLayerProjection(self):
387 eq = self.assertEquals
388 neq = self.assertNotEqual
389
390 session = load_session(self.temp_file_name("load_layerproj.thuban"))
391 self.session = session
392
393 map = self.session.Maps()[0] # only one map in the sample
394
395 layers = map.Layers() # two layers in the sample
396
397 # test layer with a named projection
398 proj = layers[0].GetProjection()
399 neq(proj, None)
400 eq(proj.GetName(), "hello")
401 eq(proj.GetParameter("proj"), "tmerc")
402 eq(proj.GetParameter("zone"), "13")
403 eq(proj.GetParameter("ellps"), "clrk66")
404
405 # test layer with an unnamed projection
406 proj = layers[1].GetProjection()
407 neq(proj, None)
408 eq(proj.GetName(), "Unknown")
409 eq(proj.GetParameter("proj"), "lcc")
410 eq(proj.GetParameter("ellps"), "clrk66")
411
412 def testRasterLayer(self):
413 eq = self.assertEquals
414 neq = self.assertNotEqual
415
416 session = load_session(self.temp_file_name("load_rasterlayer.thuban"))
417 self.session = session
418
419 map = self.session.Maps()[0] # only one map in the sample
420
421 layer = map.Layers()[0] # one layer in the sample
422
423 eq(layer.Title(), "My RasterLayer")
424 self.failIf(layer.Visible())
425 self.failUnless(filenames_equal(layer.GetImageFilename(),
426 os.path.join(self.temp_dir(),
427 os.pardir, os.pardir,
428 "Data", "iceland",
429 "island.tif")))
430
431 if __name__ == "__main__":
432 unittest.main()
433
434
435

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26