/[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 1346 - (show annotations)
Tue Jul 1 16:11:55 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: 10243 byte(s)
 Fix color references and
        change calls to Classification.[SetField|SetFieldType] to
        SetFieldInfo.

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