/[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 409 by jonathan, Wed Feb 19 16:50:39 2003 UTC revision 1039 by bh, Mon May 26 17:31:24 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    from Thuban.Model.data import DerivedShapeStore
33    
34    
35  class TestSessionSimple(unittest.TestCase):  class TestSessionSimple(unittest.TestCase):
36    
37      """Very simple test cases for Session"""      """Very simple test cases for Session"""
38    
39        def setUp(self):
40            """Initialize self.session to None"""
41            self.session = None
42    
43        def tearDown(self):
44            """Call self.session.Destroy() and reset self.session to None"""
45            self.session.Destroy()
46            self.session = None
47    
48      def test_initial_state(self):      def test_initial_state(self):
49          """Test Session's initial state"""          """Test Session's initial state"""
50          session = Session("Test Session")          session = self.session = Session("Test Session")
51          self.assertEquals(session.Title(), "Test Session")          self.assertEquals(session.Title(), "Test Session")
52          self.assertEquals(session.Maps(), [])          self.assertEquals(session.Maps(), [])
53            self.assertEquals(session.Tables(), [])
54            self.assertEquals(session.ShapeStores(), [])
55          self.assertEquals(session.filename, None)          self.assertEquals(session.filename, None)
56          self.failIf(session.HasMaps())          self.failIf(session.HasMaps())
57          self.failIf(session.WasModified())          self.failIf(session.WasModified())
58          session.Destroy()  
59        def test_add_table(self):
60            """Test Session.AddTable()"""
61            session = self.session = Session("Test Session")
62            memtable = MemoryTable([("type", FIELDTYPE_STRING),
63                                    ("value", FIELDTYPE_DOUBLE),
64                                    ("code", FIELDTYPE_INT)],
65                                   [("OTHER/UNKNOWN", -1.5, 11),
66                                    ("RUINS", 0.0, 1),
67                                    ("FARM", 3.141, 2),
68                                    ("BUILDING", 2.5, 3),
69                                    ("HUT", 1e6, 4),
70                                    ("LIGHTHOUSE", -0.01, 5)])
71            table = session.AddTable(memtable)
72            self.assertEquals(session.Tables(), [table])
73    
74        def test_open_table_file(self):
75            """Test Session.OpenTableFile()"""
76            session = self.session = Session("Test Session")
77            filename = os.path.join("..", "Data", "iceland",
78                                    "roads-line.dbf")
79            table = session.OpenTableFile(filename)
80            self.assertEquals(session.Tables(), [table])
81    
82        def test_remove_table(self):
83            """Test Session.RemoveTable()"""
84            session = self.session = Session("Test Session")
85            memtable = MemoryTable([("type", FIELDTYPE_STRING),
86                                    ("value", FIELDTYPE_DOUBLE),
87                                    ("code", FIELDTYPE_INT)],
88                                   [("OTHER/UNKNOWN", -1.5, 11),
89                                    ("RUINS", 0.0, 1),
90                                    ("FARM", 3.141, 2),
91                                    ("BUILDING", 2.5, 3),
92                                    ("HUT", 1e6, 4),
93                                    ("LIGHTHOUSE", -0.01, 5)])
94            table = session.AddTable(memtable)
95            self.assertEquals(session.Tables(), [table])
96            session.RemoveTable(table)
97            self.assertEquals(session.Tables(), [])
98            self.assertRaises(ValueError, session.RemoveTable, table)
99    
100        def test_open_shapefile(self):
101            """Test Session.OpenShapefile()"""
102            session = self.session = Session("Test Session")
103            filename = os.path.join("..", "Data", "iceland",
104                                    "roads-line.shp")
105            store = session.OpenShapefile(filename)
106            self.assertEquals(store.FileName(), os.path.abspath(filename))
107            # The filetype of a shapefile is "shapefile"
108            self.assertEquals(store.FileType(), "shapefile")
109            # The shapestore itself depends on nothing else
110            self.assertEquals(store.Dependencies(), ())
111            # The shapestore's table depends on the shapestore
112            self.assertEquals(store.Table().Dependencies(), (store,))
113    
114            self.assertEquals(session.Tables(), [store.Table()])
115    
116        def test_add_shapestore(self):
117            """Test Session.AddShapeStore()"""
118            session = self.session = Session("Test Session")
119            filename = os.path.join("..", "Data", "iceland",
120                                    "roads-line.shp")
121            try:
122                store = session.OpenShapefile(filename)
123                derived = DerivedShapeStore(store, store.Table())
124                session.AddShapeStore(derived)
125                self.assertEquals(session.ShapeStores(), [store, derived])
126            finally:
127                store = derived = None
128    
129    
130  class TestSessionBase(unittest.TestCase, support.SubscriberMixin):  class TestSessionBase(unittest.TestCase, support.SubscriberMixin):
# Line 58  class TestSessionBase(unittest.TestCase, Line 141  class TestSessionBase(unittest.TestCase,
141    
142          # Create a Session and subscribe to all interesting channels.          # Create a Session and subscribe to all interesting channels.
143          self.session = Session("Test Session")          self.session = Session("Test Session")
144          for channel in (CHANGED, MAPS_CHANGED, FILENAME_CHANGED,          for channel in (CHANGED,
145                          MAP_PROJECTION_CHANGED, LAYERS_CHANGED,                          MAPS_CHANGED,  
146                          LAYER_VISIBILITY_CHANGED, LAYER_LEGEND_CHANGED):                          FILENAME_CHANGED,
147                            MAP_PROJECTION_CHANGED,
148                            MAP_LAYERS_CHANGED,
149                            LAYER_VISIBILITY_CHANGED,
150                            LAYER_CHANGED):
151              self.session.Subscribe(channel,              self.session.Subscribe(channel,
152                                     self.subscribe_with_params, channel)                                     self.subscribe_with_params, channel)
153    
154      def tearDown(self):      def tearDown(self):
155          """Destroy self.session and clear the message list"""          """Destroy self.session and clear the message list"""
156          self.session.Destroy()          self.session.Destroy()
157            self.session = None
158          self.clear_messages()          self.clear_messages()
159    
160    
# Line 101  class TestSessionWithContent(TestSession Line 189  class TestSessionWithContent(TestSession
189          """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
190          """          """
191          TestSessionBase.setUp(self)          TestSessionBase.setUp(self)
192            open_shp = self.session.OpenShapefile
193          self.arc_layer = Layer("Roads",          self.arc_layer = Layer("Roads",
194                                 os.path.join("..", "Data", "iceland",                                 open_shp(os.path.join("..", "Data", "iceland",
195                                              "roads-line.shp"))                                                       "roads-line.shp")))
196          self.poly_layer = Layer("Political",          self.poly_layer = Layer("Political",
197                                  os.path.join("..", "Data", "iceland",                                  open_shp(os.path.join("..", "Data", "iceland",
198                                               "political.shp"))                                                        "political.shp")))
199          self.map = Map("A Map")          self.map = Map("A Map")
200          self.map.AddLayer(self.arc_layer)          self.map.AddLayer(self.arc_layer)
201          self.map.AddLayer(self.poly_layer)          self.map.AddLayer(self.poly_layer)
# Line 114  class TestSessionWithContent(TestSession Line 203  class TestSessionWithContent(TestSession
203          self.session.UnsetModified()          self.session.UnsetModified()
204          self.clear_messages()          self.clear_messages()
205    
206        def tearDown(self):
207            TestSessionBase.tearDown(self)
208            self.arc_layer = self.poly_layer = None
209    
210      def test_remove_map(self):      def test_remove_map(self):
211          """Test Session.RemoveMap"""          """Test Session.RemoveMap"""
212          self.session.RemoveMap(self.map)          self.session.RemoveMap(self.map)
# Line 150  class TestSessionWithContent(TestSession Line 243  class TestSessionWithContent(TestSession
243          """Test Session's forwarding of Layer.SetFill messages"""          """Test Session's forwarding of Layer.SetFill messages"""
244          self.poly_layer.GetClassification().SetDefaultFill(Color(0.0, 0.5, 1.0))          self.poly_layer.GetClassification().SetDefaultFill(Color(0.0, 0.5, 1.0))
245          self.assert_(self.session.WasModified())          self.assert_(self.session.WasModified())
246          self.check_messages([(self.poly_layer, LAYER_LEGEND_CHANGED),          self.check_messages([(self.poly_layer, LAYER_CHANGED),
247                               (self.session, CHANGED)])                               (self.session, CHANGED)])
248    
249      def test_forwarding_stroke(self):      def test_forwarding_stroke(self):
250          """Test Session's forwarding of Layer.SetStroke messages"""          """Test Session's forwarding of Layer.SetStroke messages"""
251          self.poly_layer.GetClassification().\          self.poly_layer.GetClassification().\
252              SetDefaultStroke(Color(0.0, 0.5, 1.0))              SetDefaultLineColor(Color(0.0, 0.5, 1.0))
253          self.assert_(self.session.WasModified())          self.assert_(self.session.WasModified())
254          self.check_messages([(self.poly_layer, LAYER_LEGEND_CHANGED),          self.check_messages([(self.poly_layer, LAYER_CHANGED),
255                               (self.session, CHANGED)])                               (self.session, CHANGED)])
256    
257      def test_forwarding_stroke_width(self):      def test_forwarding_stroke_width(self):
258          """Test Session's forwarding of Layer.SetStrokeWidth messages"""          """Test Session's forwarding of Layer.SetStrokeWidth messages"""
259          self.poly_layer.GetClassification().SetDefaultStrokeWidth(3)          self.poly_layer.GetClassification().SetDefaultLineWidth(3)
260          self.assert_(self.session.WasModified())          self.assert_(self.session.WasModified())
261          self.check_messages([(self.poly_layer, LAYER_LEGEND_CHANGED),          self.check_messages([(self.poly_layer, LAYER_CHANGED),
262                               (self.session, CHANGED)])                               (self.session, CHANGED)])
263    
264      def test_forwarding_visibility(self):      def test_forwarding_visibility(self):
# Line 189  class TestSessionWithContent(TestSession Line 282  class TestSessionWithContent(TestSession
282      def test_unset_modified_layer(self):      def test_unset_modified_layer(self):
283          """Test Session.UnsetModified with layer level changes"""          """Test Session.UnsetModified with layer level changes"""
284          self.failIf(self.session.WasModified())          self.failIf(self.session.WasModified())
285          self.poly_layer.GetClassification().SetDefaultStrokeWidth(3)          self.poly_layer.GetClassification().SetDefaultLineWidth(3)
286          self.assert_(self.session.WasModified())          self.assert_(self.session.WasModified())
287          self.session.UnsetModified()          self.session.UnsetModified()
288          self.failIf(self.session.WasModified())          self.failIf(self.session.WasModified())
289          self.check_messages([(self.poly_layer, LAYER_LEGEND_CHANGED),          self.check_messages([(self.poly_layer, LAYER_CHANGED),
290                               (self.session, CHANGED),                               (self.session, CHANGED),
291                               (CHANGED,)])                               (CHANGED,)])
292    
293        def test_shape_stores(self):
294            """Test Session.ShapeStores()"""
295            # Strictly speaking the session doesn't make guarantees about
296            # the order of the ShapeStores in the list, but currently it's
297            # deterministic and they're listed in the order in which they
298            # were created
299            self.assertEquals(self.session.ShapeStores(),
300                              [self.arc_layer.ShapeStore(),
301                               self.poly_layer.ShapeStore()])
302            # If we remove the map from the session and clear our instance
303            # variables that hold the layers and the map the list should
304            # become empty again.
305            self.session.RemoveMap(self.map)
306            self.arc_layer = self.poly_layer = self.map = None
307            self.assertEquals(self.session.ShapeStores(), [])
308    
309        def test_tables(self):
310            """Test Session.Tables()"""
311            # Strictly speaking the session doesn't make guarantees about
312            # the order of the tables in the list, but currently it's
313            # deterministic and they're listed in the order in which they
314            # were opened
315            self.assertEquals(self.session.Tables(),
316                              [self.arc_layer.ShapeStore().Table(),
317                               self.poly_layer.ShapeStore().Table()])
318            # If we remove the map from the session and clear our instance
319            # variables that hold the layers and the map the list should
320            # become empty again.
321            self.session.RemoveMap(self.map)
322            self.arc_layer = self.poly_layer = self.map = None
323            self.assertEquals(self.session.Tables(), [])
324    
325    
326  if __name__ == "__main__":  if __name__ == "__main__":
327      unittest.main()      unittest.main()

Legend:
Removed from v.409  
changed lines
  Added in v.1039

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26