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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 536 - (hide 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 bh 536 # 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