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

Diff of /branches/WIP-pyshapelib-bramz/test/test_session.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 334 by bh, Fri Sep 20 15:51:17 2002 UTC revision 987 by bh, Thu May 22 16:46:14 2003 UTC
# Line 1  Line 1 
1  # Copyright (c) 2002 by Intevation GmbH  # Copyright (c) 2002, 2003 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
4  #  #
# Line 20  import support Line 20  import support
20  support.initthuban()  support.initthuban()
21    
22  from Thuban.Model.messages import CHANGED, MAPS_CHANGED, FILENAME_CHANGED, \  from Thuban.Model.messages import CHANGED, MAPS_CHANGED, FILENAME_CHANGED, \
23       MAP_PROJECTION_CHANGED, LAYERS_CHANGED, \       MAP_PROJECTION_CHANGED, MAP_LAYERS_CHANGED, \
24       LAYER_VISIBILITY_CHANGED, LAYER_LEGEND_CHANGED       LAYER_VISIBILITY_CHANGED, LAYER_CHANGED
25  from Thuban.Model.session import Session  from Thuban.Model.session import Session
26  from Thuban.Model.map import Map  from Thuban.Model.map import Map
27  from Thuban.Model.layer import Layer  from Thuban.Model.layer import Layer
28  from Thuban.Model.proj import Projection  from Thuban.Model.proj import Projection
29  from Thuban.Model.color import Color  from Thuban.Model.color import Color
30    from Thuban.Model.table import MemoryTable, FIELDTYPE_STRING, \
31                                   FIELDTYPE_INT, FIELDTYPE_DOUBLE
32    
33  class TestSessionSimple(unittest.TestCase):  class TestSessionSimple(unittest.TestCase):
34    
35      """Very simple test cases for Session"""      """Very simple test cases for Session"""
36    
37        def setUp(self):
38            """Initialize self.session to None"""
39            self.session = None
40    
41        def tearDown(self):
42            """Call self.session.Destroy() and reset self.session to None"""
43            self.session.Destroy()
44            self.session = None
45    
46      def test_initial_state(self):      def test_initial_state(self):
47          """Test Session's initial state"""          """Test Session's initial state"""
48          session = Session("Test Session")          session = self.session = Session("Test Session")
49          self.assertEquals(session.Title(), "Test Session")          self.assertEquals(session.Title(), "Test Session")
50          self.assertEquals(session.Maps(), [])          self.assertEquals(session.Maps(), [])
51            self.assertEquals(session.Tables(), [])
52            self.assertEquals(session.ShapeStores(), [])
53          self.assertEquals(session.filename, None)          self.assertEquals(session.filename, None)
54          self.failIf(session.HasMaps())          self.failIf(session.HasMaps())
55          self.failIf(session.WasModified())          self.failIf(session.WasModified())
56          session.Destroy()  
57        def test_add_table(self):
58            """Test Session.AddTable()"""
59            session = self.session = Session("Test Session")
60            memtable = MemoryTable([("type", FIELDTYPE_STRING),
61                                    ("value", FIELDTYPE_DOUBLE),
62                                    ("code", FIELDTYPE_INT)],
63                                   [("OTHER/UNKNOWN", -1.5, 11),
64                                    ("RUINS", 0.0, 1),
65                                    ("FARM", 3.141, 2),
66                                    ("BUILDING", 2.5, 3),
67                                    ("HUT", 1e6, 4),
68                                    ("LIGHTHOUSE", -0.01, 5)])
69            table = session.AddTable(memtable)
70            self.assertEquals(session.Tables(), [table])
71    
72        def test_remove_table(self):
73            """Test Session.RemoveTable()"""
74            session = self.session = Session("Test Session")
75            memtable = MemoryTable([("type", FIELDTYPE_STRING),
76                                    ("value", FIELDTYPE_DOUBLE),
77                                    ("code", FIELDTYPE_INT)],
78                                   [("OTHER/UNKNOWN", -1.5, 11),
79                                    ("RUINS", 0.0, 1),
80                                    ("FARM", 3.141, 2),
81                                    ("BUILDING", 2.5, 3),
82                                    ("HUT", 1e6, 4),
83                                    ("LIGHTHOUSE", -0.01, 5)])
84            table = session.AddTable(memtable)
85            self.assertEquals(session.Tables(), [table])
86            session.RemoveTable(table)
87            self.assertEquals(session.Tables(), [])
88            self.assertRaises(ValueError, session.RemoveTable, table)
89    
90        def test_open_shapefile(self):
91            """Test Session.OpenShapefile()"""
92            session = self.session = Session("Test Session")
93            filename = os.path.join("..", "Data", "iceland",
94                                    "roads-line.shp")
95            store = session.OpenShapefile(filename)
96            self.assertEquals(store.FileName(), os.path.abspath(filename))
97            # The filetype of a shapefile is "shapefile"
98            self.assertEquals(store.FileType(), "shapefile")
99            # The shapestore itself depends on nothing else
100            self.assertEquals(store.Dependencies(), ())
101            # The shapestore's table depends on the shapestore
102            self.assertEquals(store.Table().Dependencies(), (store,))
103    
104            self.assertEquals(session.Tables(), [store.Table()])
105    
106    
107  class TestSessionBase(unittest.TestCase, support.SubscriberMixin):  class TestSessionBase(unittest.TestCase, support.SubscriberMixin):
# Line 58  class TestSessionBase(unittest.TestCase, Line 118  class TestSessionBase(unittest.TestCase,
118    
119          # Create a Session and subscribe to all interesting channels.          # Create a Session and subscribe to all interesting channels.
120          self.session = Session("Test Session")          self.session = Session("Test Session")
121          for channel in (CHANGED, MAPS_CHANGED, FILENAME_CHANGED,          for channel in (CHANGED,
122                          MAP_PROJECTION_CHANGED, LAYERS_CHANGED,                          MAPS_CHANGED,  
123                          LAYER_VISIBILITY_CHANGED, LAYER_LEGEND_CHANGED):                          FILENAME_CHANGED,
124                            MAP_PROJECTION_CHANGED,
125                            MAP_LAYERS_CHANGED,
126                            LAYER_VISIBILITY_CHANGED,
127                            LAYER_CHANGED):
128              self.session.Subscribe(channel,              self.session.Subscribe(channel,
129                                     self.subscribe_with_params, channel)                                     self.subscribe_with_params, channel)
130    
131      def tearDown(self):      def tearDown(self):
132          """Destroy self.session and clear the message list"""          """Destroy self.session and clear the message list"""
133          self.session.Destroy()          self.session.Destroy()
134            self.session = None
135          self.clear_messages()          self.clear_messages()
136    
137    
# Line 101  class TestSessionWithContent(TestSession Line 166  class TestSessionWithContent(TestSession
166          """Extend the inherited method to add a non-empty map to self.session          """Extend the inherited method to add a non-empty map to self.session
167          """          """
168          TestSessionBase.setUp(self)          TestSessionBase.setUp(self)
169            open_shp = self.session.OpenShapefile
170          self.arc_layer = Layer("Roads",          self.arc_layer = Layer("Roads",
171                                 os.path.join("..", "Data", "iceland",                                 open_shp(os.path.join("..", "Data", "iceland",
172                                              "roads-line.shp"))                                                       "roads-line.shp")))
173          self.poly_layer = Layer("Political",          self.poly_layer = Layer("Political",
174                                  os.path.join("..", "Data", "iceland",                                  open_shp(os.path.join("..", "Data", "iceland",
175                                               "political.shp"))                                                        "political.shp")))
176          self.map = Map("A Map")          self.map = Map("A Map")
177          self.map.AddLayer(self.arc_layer)          self.map.AddLayer(self.arc_layer)
178          self.map.AddLayer(self.poly_layer)          self.map.AddLayer(self.poly_layer)
# Line 114  class TestSessionWithContent(TestSession Line 180  class TestSessionWithContent(TestSession
180          self.session.UnsetModified()          self.session.UnsetModified()
181          self.clear_messages()          self.clear_messages()
182    
183        def tearDown(self):
184            TestSessionBase.tearDown(self)
185            self.arc_layer = self.poly_layer = None
186    
187      def test_remove_map(self):      def test_remove_map(self):
188          """Test Session.RemoveMap"""          """Test Session.RemoveMap"""
189          self.session.RemoveMap(self.map)          self.session.RemoveMap(self.map)
# Line 148  class TestSessionWithContent(TestSession Line 218  class TestSessionWithContent(TestSession
218    
219      def test_forwarding_fill(self):      def test_forwarding_fill(self):
220          """Test Session's forwarding of Layer.SetFill messages"""          """Test Session's forwarding of Layer.SetFill messages"""
221          self.poly_layer.SetFill(Color(0.0, 0.5, 1.0))          self.poly_layer.GetClassification().SetDefaultFill(Color(0.0, 0.5, 1.0))
222          self.assert_(self.session.WasModified())          self.assert_(self.session.WasModified())
223          self.check_messages([(self.poly_layer, LAYER_LEGEND_CHANGED),          self.check_messages([(self.poly_layer, LAYER_CHANGED),
224                               (self.session, CHANGED)])                               (self.session, CHANGED)])
225    
226      def test_forwarding_stroke(self):      def test_forwarding_stroke(self):
227          """Test Session's forwarding of Layer.SetStroke messages"""          """Test Session's forwarding of Layer.SetStroke messages"""
228          self.poly_layer.SetStroke(Color(0.0, 0.5, 1.0))          self.poly_layer.GetClassification().\
229                SetDefaultLineColor(Color(0.0, 0.5, 1.0))
230          self.assert_(self.session.WasModified())          self.assert_(self.session.WasModified())
231          self.check_messages([(self.poly_layer, LAYER_LEGEND_CHANGED),          self.check_messages([(self.poly_layer, LAYER_CHANGED),
232                               (self.session, CHANGED)])                               (self.session, CHANGED)])
233    
234      def test_forwarding_stroke_width(self):      def test_forwarding_stroke_width(self):
235          """Test Session's forwarding of Layer.SetStrokeWidth messages"""          """Test Session's forwarding of Layer.SetStrokeWidth messages"""
236          self.poly_layer.SetStrokeWidth(3)          self.poly_layer.GetClassification().SetDefaultLineWidth(3)
237          self.assert_(self.session.WasModified())          self.assert_(self.session.WasModified())
238          self.check_messages([(self.poly_layer, LAYER_LEGEND_CHANGED),          self.check_messages([(self.poly_layer, LAYER_CHANGED),
239                               (self.session, CHANGED)])                               (self.session, CHANGED)])
240    
241      def test_forwarding_visibility(self):      def test_forwarding_visibility(self):
# Line 188  class TestSessionWithContent(TestSession Line 259  class TestSessionWithContent(TestSession
259      def test_unset_modified_layer(self):      def test_unset_modified_layer(self):
260          """Test Session.UnsetModified with layer level changes"""          """Test Session.UnsetModified with layer level changes"""
261          self.failIf(self.session.WasModified())          self.failIf(self.session.WasModified())
262          self.poly_layer.SetStrokeWidth(3)          self.poly_layer.GetClassification().SetDefaultLineWidth(3)
263          self.assert_(self.session.WasModified())          self.assert_(self.session.WasModified())
264          self.session.UnsetModified()          self.session.UnsetModified()
265          self.failIf(self.session.WasModified())          self.failIf(self.session.WasModified())
266          self.check_messages([(self.poly_layer, LAYER_LEGEND_CHANGED),          self.check_messages([(self.poly_layer, LAYER_CHANGED),
267                               (self.session, CHANGED),                               (self.session, CHANGED),
268                               (CHANGED,)])                               (CHANGED,)])
269    
270        def test_shape_stores(self):
271            """Test Session.ShapeStores()"""
272            # Strictly speaking the session doesn't make guarantees about
273            # the order of the ShapeStores in the list, but currently it's
274            # deterministic and they're listed in the order in which they
275            # were created
276            self.assertEquals(self.session.ShapeStores(),
277                              [self.arc_layer.ShapeStore(),
278                               self.poly_layer.ShapeStore()])
279            # If we remove the map from the session and clear our instance
280            # variables that hold the layers and the map the list should
281            # become empty again.
282            self.session.RemoveMap(self.map)
283            self.arc_layer = self.poly_layer = self.map = None
284            self.assertEquals(self.session.ShapeStores(), [])
285    
286        def test_tables(self):
287            """Test Session.Tables()"""
288            # Strictly speaking the session doesn't make guarantees about
289            # the order of the tables in the list, but currently it's
290            # deterministic and they're listed in the order in which they
291            # were opened
292            self.assertEquals(self.session.Tables(),
293                              [self.arc_layer.ShapeStore().Table(),
294                               self.poly_layer.ShapeStore().Table()])
295            # If we remove the map from the session and clear our instance
296            # variables that hold the layers and the map the list should
297            # become empty again.
298            self.session.RemoveMap(self.map)
299            self.arc_layer = self.poly_layer = self.map = None
300            self.assertEquals(self.session.Tables(), [])
301    
302    
303  if __name__ == "__main__":  if __name__ == "__main__":
304      unittest.main()      unittest.main()

Legend:
Removed from v.334  
changed lines
  Added in v.987

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26