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

Diff of /branches/WIP-pyshapelib-bramz/test/test_load.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 482 by jonathan, Thu Mar 6 16:47:02 2003 UTC revision 774 by jonathan, Tue Apr 29 14:34:45 2003 UTC
# Line 1  Line 1 
1  # Copyright (c) 2002 by Intevation GmbH  # Copyright (c) 2002, 2003 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
4  #  #
# Line 19  import unittest Line 19  import unittest
19  import support  import support
20  support.initthuban()  support.initthuban()
21    
22  from Thuban.Model.load import load_session  from Thuban.Model.load import load_session, parse_color
23  from Thuban.Model.session import Session  from Thuban.Model.session import Session
24  from Thuban.Model.map import Map  from Thuban.Model.map import Map
25  from Thuban.Model.layer import Layer  from Thuban.Model.layer import Layer
26  from Thuban.Model.proj import Projection  from Thuban.Model.proj import Projection
27  from Thuban.Model.color import Color  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):  def filenames_equal(name1, name2):
35      """Return true if the filenames name1 and name2 are equal.      """Return true if the filenames name1 and name2 are equal.
36    
# Line 55  contents_single_map = '''\ Line 60  contents_single_map = '''\
60  </session>  </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  class LoadSessionTest(unittest.TestCase, support.FileTestMixin):  class LoadSessionTest(unittest.TestCase, support.FileTestMixin):
197    
# Line 63  class LoadSessionTest(unittest.TestCase, Line 200  class LoadSessionTest(unittest.TestCase,
200          file = open(self.temp_file_name("load_singlelayer.thuban"), "w")          file = open(self.temp_file_name("load_singlelayer.thuban"), "w")
201          file.write(contents_single_map)          file.write(contents_single_map)
202          file.close()          file.close()
203    
204            file = open(self.temp_file_name("load_classified_v0_2.thuban"), "w")
205            file.write(contents_classified_map_v0_2)
206            file.close()
207    
208            file = open(self.temp_file_name("load_labels.thuban"), "w")
209            file.write(contents_test_labels)
210            file.close()
211    
212            file = open(self.temp_file_name("load_layerproj.thuban"), "w")
213            file.write(contents_test_layer_projection)
214            file.close()
215    
216            file = open(self.temp_file_name("load_visible.thuban"), "w")
217            file.write(contents_test_visible)
218            file.close()
219    
220          self.session = None          self.session = None
221    
222      def tearDown(self):      def tearDown(self):
223          if self.session is not None:          if self.session is not None:
224              self.session.Destroy()              self.session.Destroy()
225            self.session = None
226    
227      def testSingleLayer(self):      def testSingleLayer(self):
228          """Load a session with a single map with a single layer"""          """Load a session with a single map with a single layer"""
# Line 98  class LoadSessionTest(unittest.TestCase, Line 253  class LoadSessionTest(unittest.TestCase,
253                                                       os.pardir, os.pardir,                                                       os.pardir, os.pardir,
254                                                       "Data", "iceland",                                                       "Data", "iceland",
255                                                       "political.shp")))                                                       "political.shp")))
256          eq(layer.GetClassification().GetDefaultFill(), Color.None)          eq(layer.GetClassification().GetDefaultFill(), Color.Transparent)
257          eq(layer.GetClassification().GetDefaultLineColor().hex(), "#000000")          eq(layer.GetClassification().GetDefaultLineColor().hex(), "#000000")
258            eq(layer.Visible(), True)
259    
260            self.session.Destroy()
261            self.session = None
262    
263        def testLayerVisibility(self):
264            """Test that the visible flag is correctly loaded for a layer."""
265    
266            eq = self.assertEquals
267            session = load_session(self.temp_file_name("load_visible.thuban"))
268            self.session = session
269            maps = session.Maps()
270            eq(len(maps), 1)
271            map = maps[0]
272            layers = map.Layers()
273            eq(len(layers), 1)
274            layer = layers[0]
275    
276            eq(layer.Visible(), False)
277    
278        def testClassification(self):
279            """Load a session with a map and classified layers."""
280    
281            session = load_session(self.temp_file_name("load_classified_v0_2.thuban"))
282            self.session = session
283    
284            map = self.session.Maps()[0] # only one map in the sample
285    
286            expected = [("My Layer", 2,
287                            [("default", (), "",
288                                ("#000000", 1, "None")),
289                             ("single", "1", "",
290                                ("#000000", 2, "None")),
291                             ("single", "1", "",
292                                ("#000000", 10, "None"))]),
293                         ("My Layer 2", 4,
294                             [("default", (), "",
295                                ("#000000", 2, "None")),
296                              ("range", (0, 1), "",
297                                ("#111111", 1, "None")),
298                              ("single", .5, "",
299                                ("#000000", 1, "#111111")),
300                              ("range", (-1, 0), "",
301                                ("#000000", 1, "None")),
302                              ("single", -.5, "",
303                                ("#000000", 1, "None"))])]
304    
305            self.TestLayers(map.Layers(), expected)
306    
307        def TestLayers(self, layers, expected):
308    
309            TITLE = 0
310            NUM_GROUPS = 1
311            CLASSES = 2
312            GROUP_TYPE = 0
313            GROUP_DATA = 1
314            GROUP_LABEL = 2
315            GROUP_PROPS = 3
316    
317            eq = self.assertEquals
318    
319            eq(len(layers), len(expected))
320    
321            for layer, data in zip(layers, expected):
322                eq(layer.Title(), data[TITLE])
323    
324                clazz = layer.GetClassification()
325                eq(clazz.GetNumGroups(), data[NUM_GROUPS])
326                eq(clazz.GetNumGroups() + 1, len(data[CLASSES]))
327    
328                i = 0
329                for group in clazz:
330                    
331                    props = ClassGroupProperties()
332                    props.SetLineColor(
333                        parse_color(data[CLASSES][i][GROUP_PROPS][0]))
334                    props.SetLineWidth(data[CLASSES][i][GROUP_PROPS][1])
335                    props.SetFill(
336                        parse_color(data[CLASSES][i][GROUP_PROPS][2]))
337    
338                    if data[CLASSES][i][GROUP_TYPE] == "default":
339                        g = ClassGroupDefault(props, data[CLASSES][i][GROUP_LABEL])
340                    elif data[CLASSES][i][GROUP_TYPE] == "range":
341                        g = ClassGroupRange(data[CLASSES][i][GROUP_DATA][0],
342                                            data[CLASSES][i][GROUP_DATA][1],
343                                            props, data[CLASSES][i][GROUP_LABEL])
344                    elif data[CLASSES][i][GROUP_TYPE] == "single":
345                        g = ClassGroupSingleton(data[CLASSES][i][GROUP_DATA],
346                                              props, data[CLASSES][i][GROUP_LABEL])
347    
348                    eq(group, g)
349    
350                    i += 1
351    
352        def testLabels(self):
353            """Load a session and test for reading the group labels."""
354    
355            eq = self.assertEquals
356            session = load_session(self.temp_file_name("load_labels.thuban"))
357            self.session = session
358    
359            map = self.session.Maps()[0] # only one map in the sample
360    
361            expected = [("My Layer", 1,
362                            [("default", (), "hallo",
363                                ("#000000", 1, "None")),
364                             ("single", "1", "welt",
365                                ("#000000", 2, "None"))])]
366    
367            self.TestLayers(map.Layers(), expected)
368    
369        def testLayerProjection(self):
370            eq = self.assertEquals
371            neq = self.assertNotEqual
372    
373            session = load_session(self.temp_file_name("load_layerproj.thuban"))
374            self.session = session
375    
376            map = self.session.Maps()[0] # only one map in the sample
377    
378            layers = map.Layers() # two layers in the sample
379    
380            # test layer with a named projection
381            proj = layers[0].GetProjection()
382            neq(proj, None)
383            eq(proj.GetName(), "hello")
384            eq(proj.GetParameter("proj"), "tmerc")
385            eq(proj.GetParameter("zone"), "13")
386            eq(proj.GetParameter("ellps"), "clrk66")
387    
388            # test layer with an unnamed projection
389            proj = layers[1].GetProjection()
390            neq(proj, None)
391            eq(proj.GetName(), "Unknown")
392            eq(proj.GetParameter("proj"), "lcc")
393            eq(proj.GetParameter("ellps"), "clrk66")
394    
395  if __name__ == "__main__":  if __name__ == "__main__":
396      unittest.main()      unittest.main()
397    
398    
399    

Legend:
Removed from v.482  
changed lines
  Added in v.774

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26