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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1356 - (show annotations)
Wed Jul 2 09:37:59 2003 UTC (21 years, 8 months ago) by jonathan
Original Path: trunk/thuban/test/test_classification.py
File MIME type: text/x-python
File size: 10383 byte(s)
Fix tests of ClassGroupRange so that they use the new signature.

1 # Copyright (c) 2002, 2003 by Intevation GmbH
2 # Authors:
3 # Jonathan Coles <[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 the Classification class
10 """
11
12 __version__ = "$Revision$"
13 # $Source$
14 # $Id$
15
16 from __future__ import nested_scopes
17
18 import unittest
19
20 import support
21 support.initthuban()
22
23 import os
24 from Thuban.Model.color import Color, Transparent, Black
25 from Thuban.Model.table import FIELDTYPE_INT, FIELDTYPE_STRING, FIELDTYPE_DOUBLE
26 from Thuban.Model.classification import \
27 Classification, ClassGroup, \
28 ClassGroupDefault, ClassGroupSingleton, ClassGroupRange,\
29 ClassGroupProperties
30
31 from Thuban.Model.session import Session
32 from Thuban.Model.layer import Layer
33 from Thuban.Model.range import Range
34
35 import copy
36
37
38 class TestClassification(unittest.TestCase):
39
40 def test_ClassGroupProperties(self):
41 """Test ClassGroupProperties"""
42
43 props = ClassGroupProperties()
44 self.assertEqual(props.GetLineColor(), Black)
45 self.assertEqual(props.GetLineWidth(), 1)
46 self.assertEqual(props.GetFill(), Transparent)
47
48 red = Color(1, 0, 0)
49 props.SetLineColor(red)
50 self.assertEqual(props.GetLineColor(), red)
51
52 blue = Color(0, 0, 1)
53 props.SetLineColor(blue)
54 self.assertEqual(props.GetLineColor(), blue)
55
56 props.SetLineWidth(10)
57 self.assertEqual(props.GetLineWidth(), 10)
58
59 self.assertRaises(ValueError, props.SetLineWidth, -10)
60 self.assertEqual(props.GetLineWidth(), 10)
61
62 newProps1 = ClassGroupProperties()
63 newProps2 = ClassGroupProperties()
64 self.assertNotEqual(newProps1, props)
65 self.assertEqual(newProps1, newProps2)
66
67 def test_ClassGroup(self):
68 """Test ClassGroup"""
69
70 # test constructor with no label
71 group = ClassGroup()
72 self.assertEqual(group.GetLabel(), "")
73
74 # test constructor with label
75 group = ClassGroup("hallo")
76 self.assertEqual(group.GetLabel(), "hallo")
77
78 # test SetLabel()/GetLabel()
79 group = ClassGroup("welt")
80 group.SetLabel("hallo")
81 self.assertEqual(group.GetLabel(), "hallo")
82
83 group.SetLabel("")
84 self.assertEqual(group.GetLabel(), "")
85
86 # test Matches
87 # Matches() is a virtual function...can't test it here
88 #
89 #self.assertEqual(group.Matches(None), False)
90 #self.assertEqual(group.Matches(1), False)
91 #self.assertEqual(group.Matches("hallo"), False)
92 #self.assertEqual(group.Matches([]), False)
93
94 # test GetProperties...also a virtual function
95 #self.assertEqual(group.GetProperties(), None)
96
97 def test_ClassGroupDefault(self):
98 """Test ClassGroupDefault"""
99
100 defProps = ClassGroupProperties()
101
102 newProps = ClassGroupProperties()
103 newProps.SetLineColor(Color(.25, .5, .75))
104 newProps.SetLineWidth(5)
105 newProps.SetFill(Color(.12, .24, .36))
106
107 # test constructor
108
109 group = ClassGroupDefault(newProps)
110 self.assertEqual(group.GetProperties(), newProps)
111
112 group = ClassGroupDefault(newProps, "hallo")
113 self.assertEqual(group.GetProperties(), newProps)
114 self.assertEqual(group.GetLabel(), "hallo")
115
116 # test empty constructor
117 group = ClassGroupDefault()
118 props = group.GetProperties()
119
120 self.assertEqual(group.GetLabel(), "")
121 self.assertEqual(defProps, props)
122
123 # test Matches()
124 self.assertEqual(group.Matches(None), True)
125 self.assertEqual(group.Matches(1), True)
126 self.assertEqual(group.Matches("hallo"), True)
127 self.assertEqual(group.Matches([]), True)
128
129 # test SetProperties()/GetProperties()
130 group.SetProperties(newProps)
131 self.assertEqual(group.GetProperties(), newProps)
132
133 # test copy
134 groupCopy = copy.copy(group)
135 self.assertEqual(group, groupCopy)
136
137 def test_ClassGroupRange(self):
138 """Test ClassGroupRange"""
139
140 defProps = ClassGroupProperties()
141 newProps = ClassGroupProperties()
142 newProps.SetLineColor(Color(.25, .5, .75))
143 newProps.SetLineWidth(5)
144 newProps.SetFill(Color(.12, .24, .36))
145
146 # test empty constructor
147 group = ClassGroupRange()
148
149 self.assertEqual(group.GetMin(), 0)
150 self.assertEqual(group.GetMax(), 1)
151 self.assertEqual(group.GetProperties(), defProps)
152 self.assertEqual(group.GetLabel(), "")
153
154 # test SetMax()
155 self.assertRaises(ValueError, group.SetMax, 0)
156 self.assertRaises(ValueError, group.SetMax, -1)
157 self.assertEquals(group.GetMax(), 1)
158 group.SetMax(2)
159 self.assertEquals(group.GetMax(), 2)
160
161 # test SetMin()
162 self.assertRaises(ValueError, group.SetMin, 2)
163 self.assertRaises(ValueError, group.SetMin, 3)
164 self.assertEquals(group.GetMin(), 0)
165 group.SetMin(-5)
166 self.assertEquals(group.GetMin(), -5)
167
168 # test SetProperties()/GetProperties()
169 group.SetProperties(newProps)
170 self.assertEqual(group.GetProperties(), newProps)
171
172 # test SetRange()
173 self.assertRaises(ValueError, group.SetRange, (1, 0))
174 group.SetRange(Range("]-oo;6]"))
175 self.assertEqual(group.GetRange(), "]-oo;6]")
176 group.SetRange((-5, 5))
177 self.assertEqual(group.GetRange(), "[-5;5[")
178
179 # test Matches()
180 self.assertEqual(group.Matches(-6), False)
181 self.assertEqual(group.Matches(-5), True)
182 self.assertEqual(group.Matches(0), True)
183 self.assertEqual(group.Matches(4), True)
184 self.assertEqual(group.Matches(5), False)
185
186 # test copy
187 groupCopy = copy.copy(group)
188 self.assertEqual(group, groupCopy)
189
190 def test_ClassGroupSingleton(self):
191 """Test ClassGroupSingleton"""
192
193 defProps = ClassGroupProperties()
194 newProps = ClassGroupProperties()
195 newProps.SetLineColor(Color(.25, .5, .75))
196 newProps.SetLineWidth(5)
197 newProps.SetFill(Color(.12, .24, .36))
198
199 # test empty constructor
200 group = ClassGroupSingleton()
201
202 self.assertEqual(group.GetValue(), 0)
203 self.assertEqual(group.GetProperties(), defProps)
204 self.assertEqual(group.GetLabel(), "")
205
206 # test SetProperties()/GetProperties()
207 group.SetProperties(newProps)
208 self.assertEqual(group.GetProperties(), newProps)
209
210 # test SetValue()
211 group.SetValue(5)
212 self.assertEqual(group.GetValue(), 5)
213
214 # test Matches()
215 self.assertEqual(group.Matches(0), False)
216 self.assertEqual(group.Matches(5), True)
217
218 group.SetValue("5")
219 self.assertNotEqual(group.GetValue(), 5)
220
221 # test Matches()
222 self.assertEqual(group.Matches(5), False)
223 self.assertEqual(group.Matches("5"), True)
224
225 group.SetValue("hallo")
226 self.assertEqual(group.GetValue(), "hallo")
227
228 # test Matches()
229 self.assertEqual(group.Matches("HALLO"), False)
230 self.assertEqual(group.Matches("hallo"), True)
231
232 # test copy
233 groupCopy = copy.copy(group)
234 self.assertEqual(group, groupCopy)
235
236
237 def test_ClassIterator(self):
238 """Test ClassIterator"""
239
240 groups = [ClassGroupSingleton(5), ClassGroupSingleton(5),
241 ClassGroupRange((-3, 3)), ClassGroupSingleton(-5),
242 ClassGroupDefault()]
243
244 clazz = Classification()
245
246 for g in groups:
247 clazz.AppendGroup(g)
248
249 def convert(clazz):
250 if isinstance(clazz, ClassGroupDefault): return 0
251 if isinstance(clazz, ClassGroupSingleton): return 1
252 if isinstance(clazz, ClassGroupRange): return 2
253
254 list = []
255 for g in clazz:
256 list.append(convert(g))
257
258 self.assertEquals(list, [0, 1, 1, 2, 1, 0])
259
260 def test_classification(self):
261 """Test Classification"""
262
263 defProps = ClassGroupProperties()
264 red = Color(1, 0, 0)
265 green = Color(0, 1, 0)
266 blue = Color(0, 0, 1)
267
268 session = Session("Test session")
269 filename = os.path.join("..", "Data", "iceland", "political.dbf")
270 layer = Layer("asdf", session.OpenShapefile(filename))
271
272 #
273 # init with no params
274 #
275 c = Classification()
276 self.assertEqual(c.GetField(), None)
277 self.assertEqual(c.GetFieldType(), None)
278 self.assertEqual(c.FindGroup(-1), c.GetDefaultGroup())
279
280 c.SetDefaultLineColor(red)
281 self.assertEqual(c.GetDefaultLineColor(), red)
282 self.assertEqual(c.GetDefaultFill(), Transparent)
283
284 c.SetDefaultFill(green)
285 self.assertEqual(c.GetDefaultFill(), green)
286 self.assertEqual(c.GetDefaultLineColor(), red)
287
288 c.SetFieldInfo("hallo", FIELDTYPE_STRING)
289 self.assertEqual(c.GetField(), "hallo")
290 self.assertEqual(c.GetFieldType(), FIELDTYPE_STRING)
291
292 # should raise an exception because 'hallo' doesn't
293 # exist in the table
294 self.assertRaises(ValueError, c._set_layer, layer)
295
296 c.SetFieldInfo("AREA", None)
297 layer.SetClassification(c)
298 self.assertEqual(c.GetLayer(), layer)
299 self.assertEqual(c.GetField(), "AREA")
300 self.assertEqual(c.GetFieldType(), FIELDTYPE_DOUBLE)
301
302 c.SetFieldInfo(None, None)
303 self.assertEquals(c.GetFieldType(), None)
304 self.assertEquals(c.FindGroup(5), c.GetDefaultGroup())
305
306 c.SetFieldInfo("AREA", None)
307 s = ClassGroupSingleton(5)
308 c.AppendGroup(s)
309 self.assertEquals(c.FindGroup(5), s)
310 self.assertEquals(c.FindGroup(0), c.GetDefaultGroup())
311
312 r = ClassGroupRange((-10, 10))
313 c.AppendGroup(r)
314 self.assertEquals(c.FindGroup(-11), c.GetDefaultGroup())
315 self.assertEquals(c.FindGroup(-10), r)
316 self.assertEquals(c.FindGroup(9), r)
317 self.assertEquals(c.FindGroup(5), s)
318 self.assertEquals(c.FindGroup(10), c.GetDefaultGroup())
319
320 clazz = copy.deepcopy(c)
321
322 self.assertEquals(clazz.GetNumGroups(), c.GetNumGroups())
323
324 for i in range(clazz.GetNumGroups()):
325 self.assertEquals(clazz.GetGroup(i), c.GetGroup(i))
326
327 layer.Destroy()
328
329 if __name__ == "__main__":
330 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