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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 536 - (show annotations)
Fri Mar 14 20:43:08 2003 UTC (21 years, 11 months ago) by bh
Original Path: trunk/thuban/test/test_selection.py
File MIME type: text/x-python
File size: 11115 byte(s)
Test cases for the selection class

1 # Copyright (C) 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 the software for details.
7
8 """
9 Test cases for Thuban.UI.selection
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.session import Session
23 from Thuban.Model.map import Map
24 from Thuban.Model.layer import Layer
25 from Thuban.UI.selection import Selection
26 from Thuban.UI.messages import LAYER_SELECTED, SHAPES_SELECTED
27
28
29 class TestSelection(unittest.TestCase, support.SubscriberMixin):
30
31 def setUp(self):
32 """Instantiate a selection.
33
34 Test cases implemented in this class can access the selection as
35 self.selection.
36
37 Also, subscribe self.subscribe_with_params to some of the
38 selection's messages.
39
40 Finally, create a list self.to_destroy with objects to be
41 destroyes by calling their destroy method in tearDown() for
42 objects created in test cases that need to be destroyed.
43 """
44 self.clear_messages()
45 self.selection = Selection()
46 for channel in (LAYER_SELECTED, SHAPES_SELECTED):
47 self.selection.Subscribe(channel, self.subscribe_with_params,
48 channel)
49 self.to_destroy = [self.selection]
50
51 def tearDown(self):
52 """Destroy all objects in self.to_destroy and clear the message list"""
53 for obj in self.to_destroy:
54 obj.Destroy()
55 self.clear_messages()
56
57 def get_layer(self):
58 """Return a layer to have something to test with"""
59 layer = Layer("Selection Test Layer",
60 os.path.join("..", "Data", "iceland", "roads-line.shp"))
61 self.to_destroy.append(layer)
62 return layer
63
64 def test_instatiation(self):
65 """Test initial state of the selection"""
66 self.assertEquals(self.selection.SelectedLayer(), None)
67 self.assertEquals(self.selection.SelectedShapes(), [])
68 self.failIf(self.selection.HasSelectedLayer())
69
70 #
71 # SelectLayer Tests
72 #
73
74 def test_select_layer_without_current_selection(self):
75 """Test Selection.SelectLayer() without current selection"""
76 layer = self.get_layer()
77
78 self.selection.SelectLayer(layer)
79 # After selecting a layer, no shapes are selected
80 self.assertEquals(self.selection.SelectedLayer(), layer)
81 self.failUnless(self.selection.HasSelectedLayer())
82 self.assertEquals(self.selection.SelectedShapes(), [])
83 # Since no shape was selected, only a LAYER_SELECTED message
84 # should have been issued.
85 self.check_messages([(layer, LAYER_SELECTED)])
86
87 def test_select_currently_selected_layer(self):
88 """Test Selection.SelectLayer(<currently selected layer>)"""
89 layer = self.get_layer()
90
91 self.selection.SelectLayer(layer)
92 self.clear_messages()
93 self.selection.SelectLayer(layer)
94
95 # After selecting a layer, no shapes are selected
96 self.assertEquals(self.selection.SelectedLayer(), layer)
97 self.failUnless(self.selection.HasSelectedLayer())
98 self.assertEquals(self.selection.SelectedShapes(), [])
99 # Since nothing has changed, really, no messages should have
100 # been issued
101 self.check_messages([])
102
103 def test_select_layer_with_previous_selection(self):
104 """Test Selection.SelectLayer() with previous selection"""
105 self.selection.SelectShapes(self.get_layer(), [0])
106 self.clear_messages()
107
108 layer = self.get_layer()
109 self.selection.SelectLayer(layer)
110
111 # After selecting a layer, no shapes are selected
112 self.assertEquals(self.selection.SelectedLayer(), layer)
113 self.failUnless(self.selection.HasSelectedLayer())
114 self.assertEquals(self.selection.SelectedShapes(), [])
115 # Since a shape and a layer was selected, a LAYER_SELECTED and a
116 # SHAPES_SELECTED message should have been issued.
117 self.check_messages([(layer, LAYER_SELECTED),
118 (layer, [], SHAPES_SELECTED)])
119
120 def test_select_layer_with_None(self):
121 """Test Selection.SelectLayer(None)
122
123 Calling SelectLayer with None should deselect it.
124 """
125 self.selection.SelectShapes(self.get_layer(), [0])
126 self.clear_messages()
127 self.selection.SelectLayer(None)
128
129 # After selecting a layer, no shapes are selected
130 self.assertEquals(self.selection.SelectedLayer(), None)
131 self.failIf(self.selection.HasSelectedLayer())
132 self.assertEquals(self.selection.SelectedShapes(), [])
133 # Since no shape was selected, only a LAYER_SELECTED message
134 # should have been issued.
135 self.check_messages([(None, LAYER_SELECTED),
136 (None, [], SHAPES_SELECTED)])
137
138 #
139 # SelectShapes Tests
140 #
141
142 def test_select_new_layer_and_new_shape(self):
143 """Test Selection.SelectShapes(<new layer>, <new shapes>)"""
144 layer = self.get_layer()
145
146 self.selection.SelectShapes(layer, [0, 3, 1])
147
148 self.assertEquals(self.selection.SelectedLayer(), layer)
149 self.failUnless(self.selection.HasSelectedLayer())
150 self.assertEquals(self.selection.SelectedShapes(), [0, 1, 3])
151 self.check_messages([(layer, LAYER_SELECTED),
152 (layer, [0, 1, 3], SHAPES_SELECTED)])
153
154 def test_select_old_layer_and_old_shape(self):
155 """Test Selection.SelectShape(<old layer>, <old shapes>)"""
156 layer = self.get_layer()
157
158 self.selection.SelectShapes(layer, [0, 10, 2])
159 self.clear_messages()
160 # Deliberate use a different order of the shape ids to check
161 # whether they're still considered equal
162 self.selection.SelectShapes(layer, [2, 0, 10])
163
164 # Selecting an already selected layer and shapes should not
165 # result in any messages but still have the right layer and
166 # shapes selected
167 self.assertEquals(self.selection.SelectedLayer(), layer)
168 self.failUnless(self.selection.HasSelectedLayer())
169 self.assertEquals(self.selection.SelectedShapes(), [0, 2, 10])
170 self.check_messages([])
171
172 def test_select_old_layer_and_new_shape(self):
173 """Test Selection.SelectShapes(<old layer>, <new shape>)"""
174 layer = self.get_layer()
175
176 self.selection.SelectShapes(layer, [0])
177 self.clear_messages()
178 self.selection.SelectShapes(layer, [1])
179
180 # Selecting a different shape in the already selected layer
181 # should only produce a SHAPES_SELECTED message
182 # After selecting a shape, both a shape and a layer are selected
183 self.assertEquals(self.selection.SelectedLayer(), layer)
184 self.failUnless(self.selection.HasSelectedLayer())
185 self.assertEquals(self.selection.SelectedShapes(), [1])
186 self.check_messages([(layer, [1], SHAPES_SELECTED)])
187
188 #
189 # Adding Shapes Tests
190 #
191
192 def test_add_shapes_new_layer_new_shapes(self):
193 """Test Selection.SelectShapes(<same layer>, <new shapes>, add = 1)"""
194 layer = self.get_layer()
195
196 self.selection.SelectShapes(layer, [10, 7], add = 1)
197
198 self.assertEquals(self.selection.SelectedLayer(), layer)
199 self.failUnless(self.selection.HasSelectedLayer())
200 # The list of selected shapes will be sorted in ascending order
201 self.assertEquals(self.selection.SelectedShapes(), [7, 10])
202 self.check_messages([(layer, LAYER_SELECTED),
203 (layer, [7, 10], SHAPES_SELECTED)])
204
205 def test_add_shapes_same_layer_new_shapes(self):
206 """Test Selection.SelectShapes(<same layer>, <new shapes>, add = 1)"""
207 layer = self.get_layer()
208
209 self.selection.SelectShapes(layer, [0, 6, 5])
210 self.clear_messages()
211
212 self.selection.SelectShapes(layer, [10, 7], add = 1)
213
214 self.assertEquals(self.selection.SelectedLayer(), layer)
215 self.failUnless(self.selection.HasSelectedLayer())
216 # The list of selected shapes will be sorted in ascending order
217 self.assertEquals(self.selection.SelectedShapes(), [0, 5, 6, 7, 10])
218 self.check_messages([(layer, [0, 5, 6, 7, 10], SHAPES_SELECTED)])
219
220 def test_add_shapes_same_layer_already_selected_shapes(self):
221 """Test Selection.SelectShapes(<same layer>, <some old shapes>, add=1)
222 """
223 layer = self.get_layer()
224
225 self.selection.SelectShapes(layer, [0, 6, 5])
226 self.clear_messages()
227
228 self.selection.SelectShapes(layer, [6, 0], add = 1)
229
230 self.assertEquals(self.selection.SelectedLayer(), layer)
231 self.failUnless(self.selection.HasSelectedLayer())
232 # The list of selected shapes will be sorted in ascending order
233 self.assertEquals(self.selection.SelectedShapes(), [0, 5, 6])
234 self.check_messages([])
235
236 #
237 # ClearSelection Tests
238 #
239
240 def test_clear_selection(self):
241 """Test Selection.ClearSelection() when nothing is selected"""
242 self.selection.ClearSelection()
243
244 # After clearing the selection nothing is selected
245 self.assertEquals(self.selection.SelectedLayer(), None)
246 self.failIf(self.selection.HasSelectedLayer())
247 self.assertEquals(self.selection.SelectedShapes(), [])
248 # No messages should have been sent because the selection
249 # doesn't have changed due to the ClearSelection()
250 self.check_messages([])
251
252 def test_clear_selection_with_selected_layer(self):
253 """Test Selection.ClearSelection() when a layer is selected"""
254 self.selection.ClearSelection()
255
256 self.selection.SelectLayer(self.get_layer())
257 self.clear_messages()
258 self.selection.ClearSelection()
259
260 # After clearing the selection nothing is selected
261 self.assertEquals(self.selection.SelectedLayer(), None)
262 self.failIf(self.selection.HasSelectedLayer())
263 self.assertEquals(self.selection.SelectedShapes(), [])
264 # No messages should have been sent because the selection
265 # doesn't have changed due to the ClearSelection()
266 self.check_messages([(None, LAYER_SELECTED)])
267
268 def test_clear_selection_with_selected_shape(self):
269 """Test Selection.ClearSelection() when a layer is selected"""
270 self.selection.ClearSelection()
271
272 self.selection.SelectShapes(self.get_layer(), [0])
273 self.clear_messages()
274 self.selection.ClearSelection()
275
276 # After clearing the selection nothing is selected
277 self.assertEquals(self.selection.SelectedLayer(), None)
278 self.failIf(self.selection.HasSelectedLayer())
279 self.assertEquals(self.selection.SelectedShapes(), [])
280 # No messages should have been sent because the selection
281 # doesn't have changed due to the ClearSelection()
282 self.check_messages([(None, LAYER_SELECTED),
283 (None, [], SHAPES_SELECTED)])
284
285
286 if __name__ == "__main__":
287 unittest.main()

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26