/[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 1016 by bh, Fri May 23 11:05:59 2003 UTC revision 1266 by jonathan, Fri Jun 20 14:36:35 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 30  from Thuban.Model.color import Color Line 30  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  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 68  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 119  class TestSessionSimple(unittest.TestCas Line 115  class TestSessionSimple(unittest.TestCas
115              store = derived = None              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.session = self.memtable = self.roads_line = self.landmarks = None
163    
164        def test_unreferenced_tables(self):
165            """Test Session.UnreferencedTables()"""
166            self.assertEquals(self.session.UnreferencedTables(),
167                              [self.memtable, self.roads_line, self.landmarks])
168    
169        def test_unreferenced_tables_with_joins(self):
170            """Test Session.UnreferencedTables() with joins"""
171            joined = TransientJoinedTable(self.session.TransientDB(),
172                                          self.landmarks, "CLPTLABEL",
173                                          self.memtable, "type", outer_join = True)
174            try:
175                joined = self.session.AddTable(joined)
176                # After the join, landmarks and memtable are referenced by
177                # joined which in turn is referenced by nothing
178                self.assertEquals(self.session.UnreferencedTables(),
179                                  [self.roads_line, joined])
180                # Creating a DerivedShapeStore that references the joined table
181                # will remove it from the list of unreferenced tables,
182                store = self.session.OpenShapefile(
183                    os.path.join("..", "Data", "iceland",
184                                 "cultural_landmark-point.dbf"))
185                derived = DerivedShapeStore(store, joined)
186                self.session.AddShapeStore(derived)
187                self.assertEquals(self.session.UnreferencedTables(),
188                                  [self.roads_line])
189            finally:
190                joined = derived = store = None
191    
192  class TestSessionBase(unittest.TestCase, support.SubscriberMixin):  class TestSessionBase(unittest.TestCase, support.SubscriberMixin):
193    
194      """Base class for Session test cases that test the messages"""      """Base class for Session test cases that test the messages"""
# Line 133  class TestSessionBase(unittest.TestCase, Line 203  class TestSessionBase(unittest.TestCase,
203    
204          # Create a Session and subscribe to all interesting channels.          # Create a Session and subscribe to all interesting channels.
205          self.session = Session("Test Session")          self.session = Session("Test Session")
206          for channel in (CHANGED,          for channel in (CHANGED,
207                          MAPS_CHANGED,                            MAPS_CHANGED,
208                          FILENAME_CHANGED,                          FILENAME_CHANGED,
209                          MAP_PROJECTION_CHANGED,                          MAP_PROJECTION_CHANGED,
210                          MAP_LAYERS_CHANGED,                          MAP_LAYERS_CHANGED,
211                          LAYER_VISIBILITY_CHANGED,                          LAYER_VISIBILITY_CHANGED,
212                          LAYER_CHANGED):                          LAYER_CHANGED,
213                            TABLE_REMOVED):
214              self.session.Subscribe(channel,              self.session.Subscribe(channel,
215                                     self.subscribe_with_params, channel)                                     self.subscribe_with_params, channel)
216    
# Line 172  class TestSessionMessages(TestSessionBas Line 243  class TestSessionMessages(TestSessionBas
243          self.check_messages([(FILENAME_CHANGED,),          self.check_messages([(FILENAME_CHANGED,),
244                               (self.session, CHANGED)])                               (self.session, CHANGED)])
245    
246        def test_remove_table(self):
247            """Test Session.RemoveTable()"""
248            memtable = MemoryTable([("type", FIELDTYPE_STRING),
249                                    ("value", FIELDTYPE_DOUBLE),
250                                    ("code", FIELDTYPE_INT)],
251                                   [("OTHER/UNKNOWN", -1.5, 11),
252                                    ("RUINS", 0.0, 1),
253                                    ("FARM", 3.141, 2),
254                                    ("BUILDING", 2.5, 3),
255                                    ("HUT", 1e6, 4),
256                                    ("LIGHTHOUSE", -0.01, 5)])
257            table = self.session.AddTable(memtable)
258            self.assertEquals(self.session.Tables(), [table])
259            self.clear_messages()
260            self.session.RemoveTable(table)
261            self.check_messages([(table, TABLE_REMOVED),
262                                 (self.session, CHANGED)])
263            self.assertEquals(self.session.Tables(), [])
264            self.assertRaises(ValueError, self.session.RemoveTable, table)
265    
266    
267  class TestSessionWithContent(TestSessionBase):  class TestSessionWithContent(TestSessionBase):
268    

Legend:
Removed from v.1016  
changed lines
  Added in v.1266

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26