/[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 395 by jonathan, Mon Feb 10 15:28:02 2003 UTC revision 984 by bh, Thu May 22 16:37:48 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_open_shapefile(self):
73            """Test Session.OpenShapefile()"""
74            session = self.session = Session("Test Session")
75            filename = os.path.join("..", "Data", "iceland",
76                                    "roads-line.shp")
77            store = session.OpenShapefile(filename)
78            self.assertEquals(store.FileName(), os.path.abspath(filename))
79            # The filetype of a shapefile is "shapefile"
80            self.assertEquals(store.FileType(), "shapefile")
81            # The shapestore itself depends on nothing else
82            self.assertEquals(store.Dependencies(), ())
83            # The shapestore's table depends on the shapestore
84            self.assertEquals(store.Table().Dependencies(), (store,))
85    
86            self.assertEquals(session.Tables(), [store.Table()])
87    
88    
89  class TestSessionBase(unittest.TestCase, support.SubscriberMixin):  class TestSessionBase(unittest.TestCase, support.SubscriberMixin):
# Line 58  class TestSessionBase(unittest.TestCase, Line 100  class TestSessionBase(unittest.TestCase,
100    
101          # Create a Session and subscribe to all interesting channels.          # Create a Session and subscribe to all interesting channels.
102          self.session = Session("Test Session")          self.session = Session("Test Session")
103          for channel in (CHANGED, MAPS_CHANGED, FILENAME_CHANGED,          for channel in (CHANGED,
104                          MAP_PROJECTION_CHANGED, LAYERS_CHANGED,                          MAPS_CHANGED,  
105                          LAYER_VISIBILITY_CHANGED, LAYER_LEGEND_CHANGED):                          FILENAME_CHANGED,
106                            MAP_PROJECTION_CHANGED,
107                            MAP_LAYERS_CHANGED,
108                            LAYER_VISIBILITY_CHANGED,
109                            LAYER_CHANGED):
110              self.session.Subscribe(channel,              self.session.Subscribe(channel,
111                                     self.subscribe_with_params, channel)                                     self.subscribe_with_params, channel)
112    
113      def tearDown(self):      def tearDown(self):
114          """Destroy self.session and clear the message list"""          """Destroy self.session and clear the message list"""
115          self.session.Destroy()          self.session.Destroy()
116            self.session = None
117          self.clear_messages()          self.clear_messages()
118    
119    
# Line 101  class TestSessionWithContent(TestSession Line 148  class TestSessionWithContent(TestSession
148          """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
149          """          """
150          TestSessionBase.setUp(self)          TestSessionBase.setUp(self)
151            open_shp = self.session.OpenShapefile
152          self.arc_layer = Layer("Roads",          self.arc_layer = Layer("Roads",
153                                 os.path.join("..", "Data", "iceland",                                 open_shp(os.path.join("..", "Data", "iceland",
154                                              "roads-line.shp"))                                                       "roads-line.shp")))
155          self.poly_layer = Layer("Political",          self.poly_layer = Layer("Political",
156                                  os.path.join("..", "Data", "iceland",                                  open_shp(os.path.join("..", "Data", "iceland",
157                                               "political.shp"))                                                        "political.shp")))
158          self.map = Map("A Map")          self.map = Map("A Map")
159          self.map.AddLayer(self.arc_layer)          self.map.AddLayer(self.arc_layer)
160          self.map.AddLayer(self.poly_layer)          self.map.AddLayer(self.poly_layer)
# Line 114  class TestSessionWithContent(TestSession Line 162  class TestSessionWithContent(TestSession
162          self.session.UnsetModified()          self.session.UnsetModified()
163          self.clear_messages()          self.clear_messages()
164    
165        def tearDown(self):
166            TestSessionBase.tearDown(self)
167            self.arc_layer = self.poly_layer = None
168    
169      def test_remove_map(self):      def test_remove_map(self):
170          """Test Session.RemoveMap"""          """Test Session.RemoveMap"""
171          self.session.RemoveMap(self.map)          self.session.RemoveMap(self.map)
# Line 148  class TestSessionWithContent(TestSession Line 200  class TestSessionWithContent(TestSession
200    
201      def test_forwarding_fill(self):      def test_forwarding_fill(self):
202          """Test Session's forwarding of Layer.SetFill messages"""          """Test Session's forwarding of Layer.SetFill messages"""
203          self.poly_layer.classification.SetDefaultFill(Color(0.0, 0.5, 1.0))          self.poly_layer.GetClassification().SetDefaultFill(Color(0.0, 0.5, 1.0))
204          self.assert_(self.session.WasModified())          self.assert_(self.session.WasModified())
205          self.check_messages([(self.poly_layer, LAYER_LEGEND_CHANGED),          self.check_messages([(self.poly_layer, LAYER_CHANGED),
206                               (self.session, CHANGED)])                               (self.session, CHANGED)])
207    
208      def test_forwarding_stroke(self):      def test_forwarding_stroke(self):
209          """Test Session's forwarding of Layer.SetStroke messages"""          """Test Session's forwarding of Layer.SetStroke messages"""
210          self.poly_layer.classification.SetDefaultStroke(Color(0.0, 0.5, 1.0))          self.poly_layer.GetClassification().\
211                SetDefaultLineColor(Color(0.0, 0.5, 1.0))
212          self.assert_(self.session.WasModified())          self.assert_(self.session.WasModified())
213          self.check_messages([(self.poly_layer, LAYER_LEGEND_CHANGED),          self.check_messages([(self.poly_layer, LAYER_CHANGED),
214                               (self.session, CHANGED)])                               (self.session, CHANGED)])
215    
216      def test_forwarding_stroke_width(self):      def test_forwarding_stroke_width(self):
217          """Test Session's forwarding of Layer.SetStrokeWidth messages"""          """Test Session's forwarding of Layer.SetStrokeWidth messages"""
218          self.poly_layer.classification.SetDefaultStrokeWidth(3)          self.poly_layer.GetClassification().SetDefaultLineWidth(3)
219          self.assert_(self.session.WasModified())          self.assert_(self.session.WasModified())
220          self.check_messages([(self.poly_layer, LAYER_LEGEND_CHANGED),          self.check_messages([(self.poly_layer, LAYER_CHANGED),
221                               (self.session, CHANGED)])                               (self.session, CHANGED)])
222    
223      def test_forwarding_visibility(self):      def test_forwarding_visibility(self):
# Line 188  class TestSessionWithContent(TestSession Line 241  class TestSessionWithContent(TestSession
241      def test_unset_modified_layer(self):      def test_unset_modified_layer(self):
242          """Test Session.UnsetModified with layer level changes"""          """Test Session.UnsetModified with layer level changes"""
243          self.failIf(self.session.WasModified())          self.failIf(self.session.WasModified())
244          self.poly_layer.classification.SetDefaultStrokeWidth(3)          self.poly_layer.GetClassification().SetDefaultLineWidth(3)
245          self.assert_(self.session.WasModified())          self.assert_(self.session.WasModified())
246          self.session.UnsetModified()          self.session.UnsetModified()
247          self.failIf(self.session.WasModified())          self.failIf(self.session.WasModified())
248          self.check_messages([(self.poly_layer, LAYER_LEGEND_CHANGED),          self.check_messages([(self.poly_layer, LAYER_CHANGED),
249                               (self.session, CHANGED),                               (self.session, CHANGED),
250                               (CHANGED,)])                               (CHANGED,)])
251    
252        def test_shape_stores(self):
253            """Test Session.ShapeStores()"""
254            # Strictly speaking the session doesn't make guarantees about
255            # the order of the ShapeStores in the list, but currently it's
256            # deterministic and they're listed in the order in which they
257            # were created
258            self.assertEquals(self.session.ShapeStores(),
259                              [self.arc_layer.ShapeStore(),
260                               self.poly_layer.ShapeStore()])
261            # If we remove the map from the session and clear our instance
262            # variables that hold the layers and the map the list should
263            # become empty again.
264            self.session.RemoveMap(self.map)
265            self.arc_layer = self.poly_layer = self.map = None
266            self.assertEquals(self.session.ShapeStores(), [])
267    
268        def test_tables(self):
269            """Test Session.Tables()"""
270            # Strictly speaking the session doesn't make guarantees about
271            # the order of the tables in the list, but currently it's
272            # deterministic and they're listed in the order in which they
273            # were opened
274            self.assertEquals(self.session.Tables(),
275                              [self.arc_layer.ShapeStore().Table(),
276                               self.poly_layer.ShapeStore().Table()])
277            # If we remove the map from the session and clear our instance
278            # variables that hold the layers and the map the list should
279            # become empty again.
280            self.session.RemoveMap(self.map)
281            self.arc_layer = self.poly_layer = self.map = None
282            self.assertEquals(self.session.Tables(), [])
283    
284    
285  if __name__ == "__main__":  if __name__ == "__main__":
286      unittest.main()      unittest.main()

Legend:
Removed from v.395  
changed lines
  Added in v.984

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26