/[thuban]/branches/WIP-pyshapelib-bramz/test/test_transientdb.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/test/test_transientdb.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1332 by frank, Tue Jul 1 15:40:52 2003 UTC revision 1381 by bh, Tue Jul 8 16:37:46 2003 UTC
# Line 19  import unittest Line 19  import unittest
19  import support  import support
20  support.initthuban()  support.initthuban()
21    
22    import dbflib
23  from Thuban.Model.table import DBFTable, MemoryTable, FIELDTYPE_STRING, \  from Thuban.Model.table import DBFTable, MemoryTable, FIELDTYPE_STRING, \
24                                 FIELDTYPE_INT, FIELDTYPE_DOUBLE                                 FIELDTYPE_INT, FIELDTYPE_DOUBLE, table_to_dbf
25  from Thuban.Model.transientdb import TransientDatabase, TransientTable, \  from Thuban.Model.transientdb import TransientDatabase, TransientTable, \
26       TransientJoinedTable, AutoTransientTable       TransientJoinedTable, AutoTransientTable
27    
# Line 237  class TestTransientTable(unittest.TestCa Line 238  class TestTransientTable(unittest.TestCa
238                                       outer_join = True)                                       outer_join = True)
239    
240          self.assertEquals(table.NumRows(), 4)          self.assertEquals(table.NumRows(), 4)
241          self.assertEquals(table.NumColumns(), 2)          self.assertEquals(table.NumColumns(), 3)
242    
243          # HasColumn          # HasColumn
244          self.failUnless(table.HasColumn("stretch_id"))          self.failUnless(table.HasColumn("stretch_id"))
# Line 247  class TestTransientTable(unittest.TestCa Line 248  class TestTransientTable(unittest.TestCa
248      def test_transient_joined_table_with_equal_column_names(self):      def test_transient_joined_table_with_equal_column_names(self):
249          """Test TransientJoinedTable join on tables with equal column names          """Test TransientJoinedTable join on tables with equal column names
250    
251          The join of two tables contains all fields from both tables instead          If a name collision occurs for the field names, underscores are
252          th field the join was performed on. This special field is included          appended as long as any collision is resolved.
         once. If a name collision occurs for the field names, underscores are  
         appended as long as any collision is resolved.        
253          """          """
254          mem_stretches = MemoryTable([("stretch_id", FIELDTYPE_INT),          mem_stretches = MemoryTable([("stretch_id", FIELDTYPE_INT),
255                                       ("name", FIELDTYPE_INT)],                                       ("name", FIELDTYPE_INT)],
# Line 268  class TestTransientTable(unittest.TestCa Line 267  class TestTransientTable(unittest.TestCa
267                                       outer_join = True)                                       outer_join = True)
268    
269          self.assertEquals(table.NumRows(), 4)          self.assertEquals(table.NumRows(), 4)
270          self.assertEquals(table.NumColumns(), 4)          self.assertEquals(table.NumColumns(), 5)
271    
272          # HasColumn          # HasColumn
273          self.failUnless(table.HasColumn("stretch_id"))          self.assertEquals([c.name for c in table.Columns()],
274          self.failUnless(table.HasColumn("disch_id"))                            ["stretch_id", "name", "disch_id", "stretch_id_",
275          self.failUnless(table.HasColumn("name"))                             "name_"])
276          self.failUnless(table.HasColumn("name_"))  
277        def test_transient_joined_table_name_collisions_dont_modify_in_place(self):
278            """Test TransientJoinedTable name-collisions do not modifying in place
279    
280            The name collision work-around by appending underscores
281            accidentally modified the column objects in place. We do two
282            joins therefore in reverse order to detect this: The first join
283            will lead to a modified name in the column object of the right
284            table which is then used as the left table in the second join so
285            the underscored name will appear before the non-underscored one
286            in the list of column names after the second join.
287            """
288            mem1 = MemoryTable([("stretch_id", FIELDTYPE_INT),
289                                ("name", FIELDTYPE_INT)],
290                               [(0, 10), (1, 11), (2, 12), (3, 13) ])
291            table1 = AutoTransientTable(self.transientdb, mem1)
292    
293            mem2 = MemoryTable([("stretch_id", FIELDTYPE_INT),
294                                ("name", FIELDTYPE_INT)],
295                               [(0, 10), (1, 11), (2, 12), (3, 13) ])
296            table2 = AutoTransientTable(self.transientdb, mem2)
297    
298            table = TransientJoinedTable(self.transientdb, table1, "stretch_id",
299                                         table2, "stretch_id", outer_join = True)
300            table = TransientJoinedTable(self.transientdb, table2, "stretch_id",
301                                         table1, "stretch_id", outer_join = True)
302    
303            self.assertEquals([c.name for c in table.Columns()],
304                              ["stretch_id", "name", "stretch_id_", "name_"])
305    
306      def test_transient_table_read_twice(self):      def test_transient_table_read_twice(self):
307          """Test TransientTable.ReadRowAsDict() reading the same record twice"""          """Test TransientTable.ReadRowAsDict() reading the same record twice"""
# Line 336  class TestTransientTable(unittest.TestCa Line 362  class TestTransientTable(unittest.TestCa
362                            table.SimpleQuery,                            table.SimpleQuery,
363                            table.Column(1), "<<", table.Column(2))                            table.Column(1), "<<", table.Column(2))
364    
365        def test_transienttable_to_dbf(self):
366            memtable = MemoryTable([("type", FIELDTYPE_STRING),
367                                    ("value", FIELDTYPE_DOUBLE),
368                                    ("code", FIELDTYPE_INT)],
369                                   [("UNKNOWN", 0.0, 0),
370                                    ("Foo", 0.5, -1),
371                                    ("Foo", 1.0/256, 100),
372                                    ("bar", 1e10, 17)])
373            table = TransientTable(self.transientdb, memtable)
374            filename = self.temp_file_name("test_transienttable_to_dbf.dbf")
375            table_to_dbf(table, filename)
376    
377            dbf = dbflib.DBFFile(filename)
378            self.assertEquals(dbf.read_record(2),
379                              {'code': 100, 'type': 'Foo', 'value': 0.00390625})
380            self.assertEquals(dbf.field_count(), 3)
381            self.assertEquals(dbf.record_count(), 4)
382            self.assertEquals(dbf.field_info(0),
383                              (dbflib.FTString, "type", 7, 0))
384            self.assertEquals(dbf.field_info(1),
385                              (dbflib.FTDouble, "value", 24, 12))
386            self.assertEquals(dbf.field_info(2),
387                              (dbflib.FTInteger, "code", 3, 0))
388    
389    
390    
391  if __name__ == "__main__":  if __name__ == "__main__":
392      support.run_tests()      support.run_tests()

Legend:
Removed from v.1332  
changed lines
  Added in v.1381

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26