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

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

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

revision 996 by bh, Thu May 22 18:21:10 2003 UTC revision 1438 by jonathan, Wed Jul 16 13:25:30 2003 UTC
# Line 26  from Thuban.Model.session import Session Line 26  from Thuban.Model.session import Session
26  from Thuban.Model.layer import BaseLayer, Layer, RasterLayer, \  from Thuban.Model.layer import BaseLayer, Layer, RasterLayer, \
27       SHAPETYPE_POLYGON, SHAPETYPE_ARC, SHAPETYPE_POINT       SHAPETYPE_POLYGON, SHAPETYPE_ARC, SHAPETYPE_POINT
28  from Thuban.Model.messages import LAYER_LEGEND_CHANGED, \  from Thuban.Model.messages import LAYER_LEGEND_CHANGED, \
29       LAYER_VISIBILITY_CHANGED       LAYER_VISIBILITY_CHANGED, LAYER_SHAPESTORE_REPLACED, LAYER_CHANGED
30  from Thuban.Model.color import Color  from Thuban.Model.color import Color
31  from Thuban.Model.table import FIELDTYPE_DOUBLE  from Thuban.Model.table import FIELDTYPE_DOUBLE, FIELDTYPE_STRING, MemoryTable
32  from Thuban.Model.proj import Projection  from Thuban.Model.proj import Projection
33  from Thuban.Model.data import DerivedShapeStore  from Thuban.Model.data import DerivedShapeStore
34    from Thuban.Model.classification import Classification, ClassGroupSingleton
35    
36    import Thuban.Model.resource
37    
38  class TestLayer(unittest.TestCase, support.FileTestMixin,  class TestLayer(unittest.TestCase, support.FileTestMixin,
39                  support.FloatComparisonMixin):                  support.FloatComparisonMixin):
# Line 74  class TestLayer(unittest.TestCase, suppo Line 77  class TestLayer(unittest.TestCase, suppo
77          self.failUnless(layer.Visible())          self.failUnless(layer.Visible())
78    
79          self.failIf(layer.HasClassification())          self.failIf(layer.HasClassification())
80            self.failIf(layer.HasShapes())
81    
82          self.assertEquals(layer.GetProjection(), None)          self.assertEquals(layer.GetProjection(), None)
83    
84          # set/get projection          # set/get projection
# Line 91  class TestLayer(unittest.TestCase, suppo Line 96  class TestLayer(unittest.TestCase, suppo
96          """Test Layer with arc shapes"""          """Test Layer with arc shapes"""
97          layer = self.layer = Layer("Test Layer",          layer = self.layer = Layer("Test Layer",
98                                     self.open_shapefile("roads-line.shp"))                                     self.open_shapefile("roads-line.shp"))
99            self.failUnless(layer.HasClassification())
100            self.failUnless(layer.HasShapes())
101          self.assertEquals(layer.ShapeType(), SHAPETYPE_ARC)          self.assertEquals(layer.ShapeType(), SHAPETYPE_ARC)
102          self.assertEquals(layer.NumShapes(), 839)          self.assertEquals(layer.NumShapes(), 839)
103          shape = layer.Shape(32)          shape = layer.Shape(32)
# Line 125  class TestLayer(unittest.TestCase, suppo Line 132  class TestLayer(unittest.TestCase, suppo
132          """Test Layer with polygon shapes"""          """Test Layer with polygon shapes"""
133          layer = self.layer = Layer("Test Layer",          layer = self.layer = Layer("Test Layer",
134                                     self.open_shapefile("political.shp"))                                     self.open_shapefile("political.shp"))
135            self.failUnless(layer.HasClassification())
136            self.failUnless(layer.HasShapes())
137          self.assertEquals(layer.ShapeType(), SHAPETYPE_POLYGON)          self.assertEquals(layer.ShapeType(), SHAPETYPE_POLYGON)
138          self.assertEquals(layer.NumShapes(), 156)          self.assertEquals(layer.NumShapes(), 156)
139          shape = layer.Shape(4)          shape = layer.Shape(4)
# Line 143  class TestLayer(unittest.TestCase, suppo Line 152  class TestLayer(unittest.TestCase, suppo
152          """Test Layer with point shapes"""          """Test Layer with point shapes"""
153          layer = self.layer = Layer("Test Layer",          layer = self.layer = Layer("Test Layer",
154                             self.open_shapefile("cultural_landmark-point.shp"))                             self.open_shapefile("cultural_landmark-point.shp"))
155            self.failUnless(layer.HasClassification())
156            self.failUnless(layer.HasShapes())
157          self.assertEquals(layer.ShapeType(), SHAPETYPE_POINT)          self.assertEquals(layer.ShapeType(), SHAPETYPE_POINT)
158          self.assertEquals(layer.NumShapes(), 34)          self.assertEquals(layer.NumShapes(), 34)
159          shape = layer.Shape(0)          shape = layer.Shape(0)
# Line 181  class TestLayer(unittest.TestCase, suppo Line 192  class TestLayer(unittest.TestCase, suppo
192          self.assertEquals(layer.GetFieldType("non existing"), None)          self.assertEquals(layer.GetFieldType("non existing"), None)
193    
194      def test_raster_layer(self):      def test_raster_layer(self):
195            if not Thuban.Model.resource.has_gdal_support():
196                return
197    
198          filename = self.build_path("island.tif")          filename = self.build_path("island.tif")
199          layer = RasterLayer("Test RasterLayer", filename)          layer = RasterLayer("Test RasterLayer", filename)
200            self.failIf(layer.HasClassification())
201            self.failIf(layer.HasShapes())
202          self.assertEquals(layer.GetImageFilename(), filename)          self.assertEquals(layer.GetImageFilename(), filename)
203          self.assertFloatSeqEqual(layer.BoundingBox(),          self.assertFloatSeqEqual(layer.BoundingBox(),
204                                   [-24.5500000, 63.2833330,                                   [-24.5500000, 63.2833330,
# Line 200  class TestLayer(unittest.TestCase, suppo Line 216  class TestLayer(unittest.TestCase, suppo
216              derived = DerivedShapeStore(store, store.Table())              derived = DerivedShapeStore(store, store.Table())
217              layer.SetShapeStore(derived)              layer.SetShapeStore(derived)
218              self.assert_(layer.ShapeStore() is derived)              self.assert_(layer.ShapeStore() is derived)
219    
220                # check that an exception is raised when the number
221                # of shapes differ from the number of rows in a table.
222                layer2 = Layer("Test Layer",
223                               self.open_shapefile("political.shp"))
224                store2 = layer2.ShapeStore()
225                self.assertRaises(ValueError,
226                                  DerivedShapeStore, store2, store.Table())
227    
228          finally:          finally:
229              store = derived = None              store = derived = None
230                layer2.Destroy()
231                store2 = None
232    
233    
234    class SetShapeStoreTests(unittest.TestCase, support.SubscriberMixin):
235    
236        def setUp(self):
237            """Create a layer with a classification as self.layer"""
238            self.clear_messages()
239            self.session = Session("Test session for %s" % self.__class__)
240            self.shapefilename = os.path.join("..", "Data", "iceland",
241                                              "cultural_landmark-point.dbf")
242            self.store = self.session.OpenShapefile(self.shapefilename)
243            self.layer = Layer("test layer", self.store)
244            self.classification = Classification()
245            self.classification.AppendGroup(ClassGroupSingleton("FARM"))
246            self.layer.SetClassificationField("CLPTLABEL")
247            self.layer.SetClassification(self.classification)
248            self.layer.UnsetModified()
249            self.layer.Subscribe(LAYER_SHAPESTORE_REPLACED,
250                                 self.subscribe_with_params,
251                                 LAYER_SHAPESTORE_REPLACED)
252            self.layer.Subscribe(LAYER_CHANGED,
253                                 self.subscribe_with_params, LAYER_CHANGED)
254    
255        def tearDown(self):
256            self.clear_messages()
257            self.layer.Destroy()
258            self.session.Destroy()
259            self.session = self.layer = self.store = self.classification = None
260    
261        def test_sanity(self):
262            """SetShapeStoreTests sanity check
263    
264            Test the initial state of the test case instances after setUp.
265            """
266            cls = self.layer.GetClassification()
267            self.assert_(cls is self.classification)
268            field = self.layer.GetClassificationField()
269            self.assertEquals(field, "CLPTLABEL")
270            self.assertEquals(self.layer.GetFieldType(field), FIELDTYPE_STRING)
271            self.assertEquals(self.layer.GetClassification().GetNumGroups(), 1)
272            self.failIf(self.layer.WasModified())
273    
274        def test_set_shape_store_modified_flag(self):
275            """Test whether Layer.SetShapeStore() sets the modified flag"""
276            memtable = MemoryTable([("FOO", FIELDTYPE_STRING)],
277                          [("bla",)] * self.layer.ShapeStore().Table().NumRows())
278            self.layer.SetShapeStore(DerivedShapeStore(self.store, memtable))
279    
280            self.assert_(self.layer.WasModified())
281    
282        def test_set_shape_store_different_field_name(self):
283            """Test Layer.SetShapeStore() with different column name"""
284            memtable = MemoryTable([("FOO", FIELDTYPE_STRING)],
285                          [("bla",)] * self.layer.ShapeStore().Table().NumRows())
286            self.layer.SetShapeStore(DerivedShapeStore(self.store, memtable))
287            # The classification should contain only the default group now.
288            self.assertEquals(self.layer.GetClassification().GetNumGroups(), 0)
289            self.check_messages([(self.layer, LAYER_CHANGED),
290                                 (self.layer, LAYER_SHAPESTORE_REPLACED)])
291    
292        def test_set_shape_store_same_field(self):
293            """Test Layer.SetShapeStore() with same column name and type"""
294            memtable = MemoryTable([("CLPTLABEL", FIELDTYPE_STRING)],
295                          [("bla",)] * self.layer.ShapeStore().Table().NumRows())
296            self.layer.SetShapeStore(DerivedShapeStore(self.store, memtable))
297            # The classification should be the same as before
298            self.assert_(self.layer.GetClassification() is self.classification)
299            self.check_messages([(self.layer, LAYER_SHAPESTORE_REPLACED)])
300    
301        def test_set_shape_store_same_field_different_type(self):
302            """Test Layer.SetShapeStore() with same column name but different type
303            """
304            memtable = MemoryTable([("CLPTLABEL", FIELDTYPE_DOUBLE)],
305                          [(0.0,)] * self.layer.ShapeStore().Table().NumRows())
306            self.layer.SetShapeStore(DerivedShapeStore(self.store, memtable))
307            # The classification should contain only the default group now.
308            self.assertEquals(self.layer.GetClassification().GetNumGroups(), 0)
309            self.check_messages([(self.layer, LAYER_CHANGED),
310                                 (self.layer, LAYER_SHAPESTORE_REPLACED)])
311    
312    
313  class TestLayerLegend(unittest.TestCase, support.SubscriberMixin):  class TestLayerLegend(unittest.TestCase, support.SubscriberMixin):

Legend:
Removed from v.996  
changed lines
  Added in v.1438

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26