/[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 292 by bh, Fri Aug 30 09:44:12 2002 UTC revision 746 by jonathan, Fri Apr 25 10:27:05 2003 UTC
# 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
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.
# Line 54  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  class LoadSessionTest(unittest.TestCase, support.FileTestMixin):  class LoadSessionTest(unittest.TestCase, support.FileTestMixin):
179    
# Line 62  class LoadSessionTest(unittest.TestCase, Line 182  class LoadSessionTest(unittest.TestCase,
182          file = open(self.temp_file_name("load_singlelayer.thuban"), "w")          file = open(self.temp_file_name("load_singlelayer.thuban"), "w")
183          file.write(contents_single_map)          file.write(contents_single_map)
184          file.close()          file.close()
185    
186            file = open(self.temp_file_name("load_classified_v0_2.thuban"), "w")
187            file.write(contents_classified_map_v0_2)
188            file.close()
189    
190            file = open(self.temp_file_name("load_labels.thuban"), "w")
191            file.write(contents_test_labels)
192            file.close()
193    
194            file = open(self.temp_file_name("load_layerproj.thuban"), "w")
195            file.write(contents_test_layer_projection)
196            file.close()
197    
198          self.session = None          self.session = None
199    
200      def tearDown(self):      def tearDown(self):
# Line 97  class LoadSessionTest(unittest.TestCase, Line 230  class LoadSessionTest(unittest.TestCase,
230                                                       os.pardir, os.pardir,                                                       os.pardir, os.pardir,
231                                                       "Data", "iceland",                                                       "Data", "iceland",
232                                                       "political.shp")))                                                       "political.shp")))
233          eq(layer.fill, None)          eq(layer.GetClassification().GetDefaultFill(), Color.Transparent)
234          eq(layer.stroke.hex(), "#000000")          eq(layer.GetClassification().GetDefaultLineColor().hex(), "#000000")
235    
236            self.session.Destroy()
237            self.session = None
238    
239        def testClassification(self):
240            """Load a session with a map and classified layers."""
241    
242            session = load_session(self.temp_file_name("load_classified_v0_2.thuban"))
243            self.session = session
244    
245            map = self.session.Maps()[0] # only one map in the sample
246    
247            expected = [("My Layer", 2,
248                            [("default", (), "",
249                                ("#000000", 1, "None")),
250                             ("single", "1", "",
251                                ("#000000", 2, "None")),
252                             ("single", "1", "",
253                                ("#000000", 10, "None"))]),
254                         ("My Layer 2", 4,
255                             [("default", (), "",
256                                ("#000000", 2, "None")),
257                              ("range", (0, 1), "",
258                                ("#111111", 1, "None")),
259                              ("single", .5, "",
260                                ("#000000", 1, "#111111")),
261                              ("range", (-1, 0), "",
262                                ("#000000", 1, "None")),
263                              ("single", -.5, "",
264                                ("#000000", 1, "None"))])]
265    
266            self.TestLayers(map.Layers(), expected)
267    
268        def TestLayers(self, layers, expected):
269    
270            TITLE = 0
271            NUM_GROUPS = 1
272            CLASSES = 2
273            GROUP_TYPE = 0
274            GROUP_DATA = 1
275            GROUP_LABEL = 2
276            GROUP_PROPS = 3
277    
278            eq = self.assertEquals
279    
280            eq(len(layers), len(expected))
281    
282            for layer, data in zip(layers, expected):
283                eq(layer.Title(), data[TITLE])
284    
285                clazz = layer.GetClassification()
286                eq(clazz.GetNumGroups(), data[NUM_GROUPS])
287                eq(clazz.GetNumGroups() + 1, len(data[CLASSES]))
288    
289                i = 0
290                for group in clazz:
291                    
292                    props = ClassGroupProperties()
293                    props.SetLineColor(
294                        parse_color(data[CLASSES][i][GROUP_PROPS][0]))
295                    props.SetLineWidth(data[CLASSES][i][GROUP_PROPS][1])
296                    props.SetFill(
297                        parse_color(data[CLASSES][i][GROUP_PROPS][2]))
298    
299                    if data[CLASSES][i][GROUP_TYPE] == "default":
300                        g = ClassGroupDefault(props, data[CLASSES][i][GROUP_LABEL])
301                    elif data[CLASSES][i][GROUP_TYPE] == "range":
302                        g = ClassGroupRange(data[CLASSES][i][GROUP_DATA][0],
303                                            data[CLASSES][i][GROUP_DATA][1],
304                                            props, data[CLASSES][i][GROUP_LABEL])
305                    elif data[CLASSES][i][GROUP_TYPE] == "single":
306                        g = ClassGroupSingleton(data[CLASSES][i][GROUP_DATA],
307                                              props, data[CLASSES][i][GROUP_LABEL])
308    
309                    eq(group, g)
310    
311                    i += 1
312    
313        def testLabels(self):
314            """Load a session and test for reading the group labels."""
315    
316            eq = self.assertEquals
317            session = load_session(self.temp_file_name("load_labels.thuban"))
318            self.session = session
319    
320            map = self.session.Maps()[0] # only one map in the sample
321    
322            expected = [("My Layer", 1,
323                            [("default", (), "hallo",
324                                ("#000000", 1, "None")),
325                             ("single", "1", "welt",
326                                ("#000000", 2, "None"))])]
327    
328            self.TestLayers(map.Layers(), expected)
329    
330        def testLayerProjection(self):
331            eq = self.assertEquals
332            neq = self.assertNotEqual
333    
334            session = load_session(self.temp_file_name("load_layerproj.thuban"))
335            self.session = session
336    
337            map = self.session.Maps()[0] # only one map in the sample
338    
339            layers = map.Layers() # two layers in the sample
340    
341            # test layer with a named projection
342            proj = layers[0].GetProjection()
343            neq(proj, None)
344            eq(proj.GetName(), "hello")
345            eq(proj.GetParameter("proj"), "tmerc")
346            eq(proj.GetParameter("zone"), "13")
347            eq(proj.GetParameter("ellps"), "clrk66")
348    
349            # test layer with an unnamed projection
350            proj = layers[1].GetProjection()
351            neq(proj, None)
352            eq(proj.GetName(), "Unknown")
353            eq(proj.GetParameter("proj"), "lcc")
354            eq(proj.GetParameter("ellps"), "clrk66")
355    
356  if __name__ == "__main__":  if __name__ == "__main__":
357      unittest.main()      unittest.main()
358    
359    
360    

Legend:
Removed from v.292  
changed lines
  Added in v.746

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26