/[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 987 by bh, Thu May 22 16:46:14 2003 UTC revision 1676 by bh, Thu Aug 28 13:14:44 2003 UTC
# 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
# Line 29  from Thuban.Model.proj import Projection Line 29  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, \  from Thuban.Model.table import MemoryTable, FIELDTYPE_STRING, \
31                                 FIELDTYPE_INT, FIELDTYPE_DOUBLE                                 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    
# Line 66  class TestSessionSimple(unittest.TestCas Line 68  class TestSessionSimple(unittest.TestCas
68                                  ("BUILDING", 2.5, 3),                                  ("BUILDING", 2.5, 3),
69                                  ("HUT", 1e6, 4),                                  ("HUT", 1e6, 4),
70                                  ("LIGHTHOUSE", -0.01, 5)])                                  ("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)          table = session.AddTable(memtable)
77          self.assertEquals(session.Tables(), [table])          self.assertEquals(session.Tables(), [table])
78            self.failUnless(session.WasModified())
79    
80      def test_remove_table(self):      def test_open_table_file(self):
81          """Test Session.RemoveTable()"""          """Test Session.OpenTableFile()"""
82          session = self.session = Session("Test Session")          session = self.session = Session("Test Session")
83          memtable = MemoryTable([("type", FIELDTYPE_STRING),          filename = os.path.join("..", "Data", "iceland",
84                                  ("value", FIELDTYPE_DOUBLE),                                  "roads-line.dbf")
85                                  ("code", FIELDTYPE_INT)],          table = session.OpenTableFile(filename)
                                [("OTHER/UNKNOWN", -1.5, 11),  
                                 ("RUINS", 0.0, 1),  
                                 ("FARM", 3.141, 2),  
                                 ("BUILDING", 2.5, 3),  
                                 ("HUT", 1e6, 4),  
                                 ("LIGHTHOUSE", -0.01, 5)])  
         table = session.AddTable(memtable)  
86          self.assertEquals(session.Tables(), [table])          self.assertEquals(session.Tables(), [table])
         session.RemoveTable(table)  
         self.assertEquals(session.Tables(), [])  
         self.assertRaises(ValueError, session.RemoveTable, table)  
87    
88      def test_open_shapefile(self):      def test_open_shapefile(self):
89          """Test Session.OpenShapefile()"""          """Test Session.OpenShapefile()"""
# Line 103  class TestSessionSimple(unittest.TestCas Line 101  class TestSessionSimple(unittest.TestCas
101    
102          self.assertEquals(session.Tables(), [store.Table()])          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 118  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    
# Line 157  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 213  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):

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26