/[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

trunk/thuban/test/test_session.py revision 584 by jonathan, Tue Apr 1 10:22:35 2003 UTC branches/WIP-pyshapelib-bramz/test/test_session.py revision 2734 by bramz, Thu Mar 1 12:42:59 2007 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 21  support.initthuban() Line 21  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, MAP_LAYERS_CHANGED, \       MAP_PROJECTION_CHANGED, MAP_LAYERS_CHANGED, \
24       LAYER_VISIBILITY_CHANGED, LAYER_CHANGED       LAYER_VISIBILITY_CHANGED, LAYER_CHANGED, TABLE_REMOVED
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    from Thuban.Model.transientdb import TransientJoinedTable
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())
         session.Destroy()  
58    
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    
72            # The session should be unmodified before the AddTable call and
73            # modified afterwards and of course the table should show up in
74            # Tables
75            self.failIf(session.WasModified())
76            table = session.AddTable(memtable)
77            self.assertEquals(session.Tables(), [table])
78            self.failUnless(session.WasModified())
79    
80        def test_open_table_file(self):
81            """Test Session.OpenTableFile()"""
82            session = self.session = Session("Test Session")
83            filename = os.path.join("..", "Data", "iceland",
84                                    "roads-line.dbf")
85            table = session.OpenTableFile(filename)
86            self.assertEquals(session.Tables(), [table])
87    
88        def test_open_shapefile(self):
89            """Test Session.OpenShapefile()"""
90            session = self.session = Session("Test Session")
91            filename = os.path.join("..", "Data", "iceland",
92                                    "roads-line.shp")
93            store = session.OpenShapefile(filename)
94            self.assertEquals(store.FileName(), os.path.abspath(filename))
95            # The filetype of a shapefile is "shapefile"
96            self.assertEquals(store.FileType(), "shapefile")
97            # The shapestore itself depends on nothing else
98            self.assertEquals(store.Dependencies(), ())
99            # The shapestore's table depends on the shapestore
100            self.assertEquals(store.Table().Dependencies(), (store,))
101    
102            self.assertEquals(session.Tables(), [store.Table()])
103    
104        def test_add_shapestore(self):
105            """Test Session.AddShapeStore()"""
106            session = self.session = Session("Test Session")
107            filename = os.path.join("..", "Data", "iceland",
108                                    "roads-line.shp")
109            try:
110                store = session.OpenShapefile(filename)
111                derived = DerivedShapeStore(store, store.Table())
112                session.AddShapeStore(derived)
113                self.assertEquals(session.ShapeStores(), [store, derived])
114            finally:
115                store = derived = None
116    
117    
118        def test_unreferenced_tables(self):
119            """Test Session.UnreferencedTables()"""
120            session = self.session = Session("Test Session")
121            filename = os.path.join("..", "Data", "iceland",
122                                    "roads-line.shp")
123            try:
124                store = session.OpenShapefile(filename)
125                filename = os.path.join("..", "Data", "iceland",
126                                        "roads-line.dbf")
127                table = session.OpenTableFile(filename)
128                self.assertEquals(session.Tables(), [table, store.Table()])
129                # The store's table is reference by the store, so the only
130                # unreferenced table is the roads-line table
131                self.assertEquals(session.UnreferencedTables(), [table])
132            finally:
133                store = table = None
134    
135    
136    class UnreferencedTablesTests(unittest.TestCase):
137    
138        """Test cases for the session.UnreferencedTables() method"""
139    
140        def setUp(self):
141            """Create a session with a few test tables"""
142            self.session = Session("Test Session")
143            memtable = MemoryTable([("type", FIELDTYPE_STRING),
144                                    ("value", FIELDTYPE_DOUBLE),
145                                    ("code", FIELDTYPE_INT)],
146                                   [("OTHER/UNKNOWN", -1.5, 11),
147                                    ("RUINS", 0.0, 1),
148                                    ("FARM", 3.141, 2),
149                                    ("BUILDING", 2.5, 3),
150                                    ("HUT", 1e6, 4),
151                                    ("LIGHTHOUSE", -0.01, 5)])
152            self.memtable = self.session.AddTable(memtable)
153            filename = os.path.join("..", "Data", "iceland",
154                                    "roads-line.dbf")
155            self.roads_line = self.session.OpenTableFile(filename)
156            filename = os.path.join("..", "Data", "iceland",
157                                    "cultural_landmark-point.dbf")
158            self.landmarks = self.session.OpenTableFile(filename)
159    
160        def tearDown(self):
161            """Clear the session and layers"""
162            self.memtable = self.roads_line = self.landmarks = None
163            self.session.Destroy()
164            self.session = None
165    
166        def test_unreferenced_tables(self):
167            """Test Session.UnreferencedTables()"""
168            self.assertEquals(self.session.UnreferencedTables(),
169                              [self.memtable, self.roads_line, self.landmarks])
170    
171        def test_unreferenced_tables_with_joins(self):
172            """Test Session.UnreferencedTables() with joins"""
173            joined = TransientJoinedTable(self.session.TransientDB(),
174                                          self.landmarks, "CLPTLABEL",
175                                          self.memtable, "type", outer_join = True)
176            try:
177                joined = self.session.AddTable(joined)
178                # After the join, landmarks and memtable are referenced by
179                # joined which in turn is referenced by nothing
180                self.assertEquals(self.session.UnreferencedTables(),
181                                  [self.roads_line, joined])
182                # Creating a DerivedShapeStore that references the joined table
183                # will remove it from the list of unreferenced tables,
184                store = self.session.OpenShapefile(
185                    os.path.join("..", "Data", "iceland",
186                                 "cultural_landmark-point.dbf"))
187                derived = DerivedShapeStore(store, joined)
188                self.session.AddShapeStore(derived)
189                self.assertEquals(self.session.UnreferencedTables(),
190                                  [self.roads_line])
191            finally:
192                joined = derived = store = None
193    
194  class TestSessionBase(unittest.TestCase, support.SubscriberMixin):  class TestSessionBase(unittest.TestCase, support.SubscriberMixin):
195    
# Line 58  class TestSessionBase(unittest.TestCase, Line 205  class TestSessionBase(unittest.TestCase,
205    
206          # Create a Session and subscribe to all interesting channels.          # Create a Session and subscribe to all interesting channels.
207          self.session = Session("Test Session")          self.session = Session("Test Session")
208          for channel in (CHANGED,          for channel in (CHANGED,
209                          MAPS_CHANGED,                            MAPS_CHANGED,
210                          FILENAME_CHANGED,                          FILENAME_CHANGED,
211                          MAP_PROJECTION_CHANGED,                          MAP_PROJECTION_CHANGED,
212                          MAP_LAYERS_CHANGED,                          MAP_LAYERS_CHANGED,
213                          LAYER_VISIBILITY_CHANGED,                          LAYER_VISIBILITY_CHANGED,
214                          LAYER_CHANGED):                          LAYER_CHANGED,
215                            TABLE_REMOVED):
216              self.session.Subscribe(channel,              self.session.Subscribe(channel,
217                                     self.subscribe_with_params, channel)                                     self.subscribe_with_params, channel)
218    
219      def tearDown(self):      def tearDown(self):
220          """Destroy self.session and clear the message list"""          """Destroy self.session and clear the message list"""
221          self.session.Destroy()          self.session.Destroy()
222            self.session = None
223          self.clear_messages()          self.clear_messages()
224    
225    
# Line 96  class TestSessionMessages(TestSessionBas Line 245  class TestSessionMessages(TestSessionBas
245          self.check_messages([(FILENAME_CHANGED,),          self.check_messages([(FILENAME_CHANGED,),
246                               (self.session, CHANGED)])                               (self.session, CHANGED)])
247    
248        def test_remove_table(self):
249            """Test Session.RemoveTable()"""
250            memtable = MemoryTable([("type", FIELDTYPE_STRING),
251                                    ("value", FIELDTYPE_DOUBLE),
252                                    ("code", FIELDTYPE_INT)],
253                                   [("OTHER/UNKNOWN", -1.5, 11),
254                                    ("RUINS", 0.0, 1),
255                                    ("FARM", 3.141, 2),
256                                    ("BUILDING", 2.5, 3),
257                                    ("HUT", 1e6, 4),
258                                    ("LIGHTHOUSE", -0.01, 5)])
259            table = self.session.AddTable(memtable)
260            self.assertEquals(self.session.Tables(), [table])
261            self.clear_messages()
262            self.session.RemoveTable(table)
263            self.check_messages([(table, TABLE_REMOVED),
264                                 (self.session, CHANGED)])
265            self.assertEquals(self.session.Tables(), [])
266            self.assertRaises(ValueError, self.session.RemoveTable, table)
267    
268    
269  class TestSessionWithContent(TestSessionBase):  class TestSessionWithContent(TestSessionBase):
270    
# Line 105  class TestSessionWithContent(TestSession Line 274  class TestSessionWithContent(TestSession
274          """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
275          """          """
276          TestSessionBase.setUp(self)          TestSessionBase.setUp(self)
277            open_shp = self.session.OpenShapefile
278          self.arc_layer = Layer("Roads",          self.arc_layer = Layer("Roads",
279                                 os.path.join("..", "Data", "iceland",                                 open_shp(os.path.join("..", "Data", "iceland",
280                                              "roads-line.shp"))                                                       "roads-line.shp")))
281          self.poly_layer = Layer("Political",          self.poly_layer = Layer("Political",
282                                  os.path.join("..", "Data", "iceland",                                  open_shp(os.path.join("..", "Data", "iceland",
283                                               "political.shp"))                                                        "political.shp")))
284          self.map = Map("A Map")          self.map = Map("A Map")
285          self.map.AddLayer(self.arc_layer)          self.map.AddLayer(self.arc_layer)
286          self.map.AddLayer(self.poly_layer)          self.map.AddLayer(self.poly_layer)
# Line 118  class TestSessionWithContent(TestSession Line 288  class TestSessionWithContent(TestSession
288          self.session.UnsetModified()          self.session.UnsetModified()
289          self.clear_messages()          self.clear_messages()
290    
291        def tearDown(self):
292            TestSessionBase.tearDown(self)
293            self.arc_layer = self.poly_layer = None
294    
295      def test_remove_map(self):      def test_remove_map(self):
296          """Test Session.RemoveMap"""          """Test Session.RemoveMap"""
297          self.session.RemoveMap(self.map)          self.session.RemoveMap(self.map)
# Line 147  class TestSessionWithContent(TestSession Line 321  class TestSessionWithContent(TestSession
321          proj = Projection(["zone=26", "proj=utm", "ellps=clrk66"])          proj = Projection(["zone=26", "proj=utm", "ellps=clrk66"])
322          self.map.SetProjection(proj)          self.map.SetProjection(proj)
323          self.assert_(self.session.WasModified())          self.assert_(self.session.WasModified())
324          self.check_messages([(self.map, MAP_PROJECTION_CHANGED),          self.check_messages([(self.map, None, MAP_PROJECTION_CHANGED),
325                               (self.session, CHANGED)])                               (self.session, CHANGED)])
326    
327      def test_forwarding_fill(self):      def test_forwarding_fill(self):
# Line 201  class TestSessionWithContent(TestSession Line 375  class TestSessionWithContent(TestSession
375                               (self.session, CHANGED),                               (self.session, CHANGED),
376                               (CHANGED,)])                               (CHANGED,)])
377    
378        def test_shape_stores(self):
379            """Test Session.ShapeStores()"""
380            # Strictly speaking the session doesn't make guarantees about
381            # the order of the ShapeStores in the list, but currently it's
382            # deterministic and they're listed in the order in which they
383            # were created
384            self.assertEquals(self.session.ShapeStores(),
385                              [self.arc_layer.ShapeStore(),
386                               self.poly_layer.ShapeStore()])
387            # If we remove the map from the session and clear our instance
388            # variables that hold the layers and the map the list should
389            # become empty again.
390            self.session.RemoveMap(self.map)
391            self.arc_layer = self.poly_layer = self.map = None
392            self.assertEquals(self.session.ShapeStores(), [])
393    
394        def test_tables(self):
395            """Test Session.Tables()"""
396            # Strictly speaking the session doesn't make guarantees about
397            # the order of the tables in the list, but currently it's
398            # deterministic and they're listed in the order in which they
399            # were opened
400            self.assertEquals(self.session.Tables(),
401                              [self.arc_layer.ShapeStore().Table(),
402                               self.poly_layer.ShapeStore().Table()])
403            # If we remove the map from the session and clear our instance
404            # variables that hold the layers and the map the list should
405            # become empty again.
406            self.session.RemoveMap(self.map)
407            self.arc_layer = self.poly_layer = self.map = None
408            self.assertEquals(self.session.Tables(), [])
409    
410    
411  if __name__ == "__main__":  if __name__ == "__main__":
412      unittest.main()      unittest.main()

Legend:
Removed from v.584  
changed lines
  Added in v.2734

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26