/[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 947 by jonathan, Tue May 20 15:27:19 2003 UTC revision 1088 by bh, Wed May 28 12:42:23 2003 UTC
# Line 28  from Thuban.Model.layer import BaseLayer Line 28  from Thuban.Model.layer import BaseLayer
28  from Thuban.Model.messages import LAYER_LEGEND_CHANGED, \  from Thuban.Model.messages import LAYER_LEGEND_CHANGED, \
29       LAYER_VISIBILITY_CHANGED       LAYER_VISIBILITY_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
34    from Thuban.Model.classification import Classification, ClassGroupSingleton
35    
36  class TestLayer(unittest.TestCase, support.FileTestMixin,  class TestLayer(unittest.TestCase, support.FileTestMixin,
37                  support.FloatComparisonMixin):                  support.FloatComparisonMixin):
# Line 42  class TestLayer(unittest.TestCase, suppo Line 44  class TestLayer(unittest.TestCase, suppo
44              self.assertFloatSeqEqual(test[i], value[i])              self.assertFloatSeqEqual(test[i], value[i])
45    
46      def setUp(self):      def setUp(self):
47          """Create a session"""          """Create a session self.session and initialize self.layer to None"""
48          self.session = Session("Test session for %s" % self.__class__)          self.session = Session("Test session for %s" % self.__class__)
49            self.layer = None
50    
51      def tearDown(self):      def tearDown(self):
52            """Call the layer's Destroy method and set session and layer to None"""
53          self.session = None          self.session = None
54            if self.layer is not None:
55                self.layer.Destroy()
56                self.layer = None
57    
58      def build_path(self, filename):      def build_path(self, filename):
59          return os.path.join("..", "Data", "iceland", filename)          return os.path.join("..", "Data", "iceland", filename)
60            
61      def open_shapefile(self, filename):      def open_shapefile(self, filename):
62          """Open and return a shapestore for filename in the iceland data set"""          """Open and return a shapestore for filename in the iceland data set"""
63          return self.session.OpenShapefile(self.build_path(filename))          return self.session.OpenShapefile(self.build_path(filename))
64    
65      def test_base_layer(self):      def test_base_layer(self):
66          layer = BaseLayer("Test BaseLayer")          layer = self.layer = BaseLayer("Test BaseLayer")
67          self.assertEquals(layer.Title(), "Test BaseLayer")          self.assertEquals(layer.Title(), "Test BaseLayer")
68          self.failUnless(layer.Visible())          self.failUnless(layer.Visible())
69    
# Line 83  class TestLayer(unittest.TestCase, suppo Line 90  class TestLayer(unittest.TestCase, suppo
90    
91      def test_arc_layer(self):      def test_arc_layer(self):
92          """Test Layer with arc shapes"""          """Test Layer with arc shapes"""
93          layer = Layer("Test Layer", self.open_shapefile("roads-line.shp"))          layer = self.layer = Layer("Test Layer",
94                                       self.open_shapefile("roads-line.shp"))
95          self.assertEquals(layer.ShapeType(), SHAPETYPE_ARC)          self.assertEquals(layer.ShapeType(), SHAPETYPE_ARC)
96          self.assertEquals(layer.NumShapes(), 839)          self.assertEquals(layer.NumShapes(), 839)
97          shape = layer.Shape(32)          shape = layer.Shape(32)
# Line 114  class TestLayer(unittest.TestCase, suppo Line 122  class TestLayer(unittest.TestCase, suppo
122          self.assertEquals(layer.ShapesBoundingBox([]), None)          self.assertEquals(layer.ShapesBoundingBox([]), None)
123          self.assertEquals(layer.ShapesBoundingBox(None), None)          self.assertEquals(layer.ShapesBoundingBox(None), None)
124    
         layer.Destroy()  
   
125      def test_polygon_layer(self):      def test_polygon_layer(self):
126          """Test Layer with polygon shapes"""          """Test Layer with polygon shapes"""
127          layer = Layer("Test Layer", self.open_shapefile("political.shp"))          layer = self.layer = Layer("Test Layer",
128                                       self.open_shapefile("political.shp"))
129          self.assertEquals(layer.ShapeType(), SHAPETYPE_POLYGON)          self.assertEquals(layer.ShapeType(), SHAPETYPE_POLYGON)
130          self.assertEquals(layer.NumShapes(), 156)          self.assertEquals(layer.NumShapes(), 156)
131          shape = layer.Shape(4)          shape = layer.Shape(4)
# Line 132  class TestLayer(unittest.TestCase, suppo Line 139  class TestLayer(unittest.TestCase, suppo
139                                    -13.495815277099609, 66.563774108886719])                                    -13.495815277099609, 66.563774108886719])
140          self.assertEquals(layer.ShapesInRegion((-24.0, 64.0, -23.9, 64.1)),          self.assertEquals(layer.ShapesInRegion((-24.0, 64.0, -23.9, 64.1)),
141                            [91, 92, 144, 146, 148, 150, 152, 153])                            [91, 92, 144, 146, 148, 150, 152, 153])
         layer.Destroy()  
142    
143      def test_point_layer(self):      def test_point_layer(self):
144          """Test Layer with point shapes"""          """Test Layer with point shapes"""
145          layer = Layer("Test Layer",          layer = self.layer = Layer("Test Layer",
146                        self.open_shapefile("cultural_landmark-point.shp"))                             self.open_shapefile("cultural_landmark-point.shp"))
147          self.assertEquals(layer.ShapeType(), SHAPETYPE_POINT)          self.assertEquals(layer.ShapeType(), SHAPETYPE_POINT)
148          self.assertEquals(layer.NumShapes(), 34)          self.assertEquals(layer.NumShapes(), 34)
149          shape = layer.Shape(0)          shape = layer.Shape(0)
# Line 148  class TestLayer(unittest.TestCase, suppo Line 154  class TestLayer(unittest.TestCase, suppo
154                                    -15.12291431427002, 66.36572265625])                                    -15.12291431427002, 66.36572265625])
155          self.assertEquals(layer.ShapesInRegion((-24.0, 64.0, -23.80, 64.1)),          self.assertEquals(layer.ShapesInRegion((-24.0, 64.0, -23.80, 64.1)),
156                            [0, 1, 2, 3, 4, 5, 27, 28, 29, 30, 31])                            [0, 1, 2, 3, 4, 5, 27, 28, 29, 30, 31])
         layer.Destroy()  
157    
158      def test_empty_layer(self):      def test_empty_layer(self):
159          """Test Layer with empty shape file"""          """Test Layer with empty shape file"""
# Line 163  class TestLayer(unittest.TestCase, suppo Line 168  class TestLayer(unittest.TestCase, suppo
168          dbf.add_field("NAME", dbflib.FTString, 20, 0)          dbf.add_field("NAME", dbflib.FTString, 20, 0)
169    
170          # Now try to open it.          # Now try to open it.
171          layer = Layer("Empty Layer",          layer = self.layer = Layer("Empty Layer",
172                        self.session.OpenShapefile(shapefilename))                                     self.session.OpenShapefile(shapefilename))
173          self.assertEquals(layer.BoundingBox(), None)          self.assertEquals(layer.BoundingBox(), None)
174          self.assertEquals(layer.LatLongBoundingBox(), None)          self.assertEquals(layer.LatLongBoundingBox(), None)
175          self.assertEquals(layer.NumShapes(), 0)          self.assertEquals(layer.NumShapes(), 0)
         layer.Destroy()  
176    
177      def test_get_field_type(self):      def test_get_field_type(self):
178          """Test Layer.GetFieldType()"""          """Test Layer.GetFieldType()"""
179          layer = Layer("Test Layer", self.open_shapefile("roads-line.shp"))          layer = self.layer = Layer("Test Layer",
180                                       self.open_shapefile("roads-line.shp"))
181          self.assertEquals(layer.GetFieldType("LENGTH"), FIELDTYPE_DOUBLE)          self.assertEquals(layer.GetFieldType("LENGTH"), FIELDTYPE_DOUBLE)
182          self.assertEquals(layer.GetFieldType("non existing"), None)          self.assertEquals(layer.GetFieldType("non existing"), None)
         layer.Destroy()  
183    
184      def test_raster_layer(self):      def test_raster_layer(self):
185          filename = self.build_path("island.tif")          filename = self.build_path("island.tif")
# Line 188  class TestLayer(unittest.TestCase, suppo Line 192  class TestLayer(unittest.TestCase, suppo
192                                   [-24.5500000, 63.2833330,                                   [-24.5500000, 63.2833330,
193                                    -13.4916670, 66.5666670])                                    -13.4916670, 66.5666670])
194    
195        def test_derived_store(self):
196            """Test layer with derived store"""
197            layer = self.layer = Layer("Test Layer",
198                                       self.open_shapefile("roads-line.shp"))
199            try:
200                store = layer.ShapeStore()
201                derived = DerivedShapeStore(store, store.Table())
202                layer.SetShapeStore(derived)
203                self.assert_(layer.ShapeStore() is derived)
204            finally:
205                store = derived = None
206    
207    
208    class SetShapeStoreTests(unittest.TestCase):
209    
210        def setUp(self):
211            """Create a layer with a classification as self.layer"""
212            self.session = Session("Test session for %s" % self.__class__)
213            self.shapefilename = os.path.join("..", "Data", "iceland",
214                                              "cultural_landmark-point.dbf")
215            self.store = self.session.OpenShapefile(self.shapefilename)
216            self.layer = Layer("test layer", self.store)
217            self.classification = Classification(field = "CLPTLABEL")
218            self.classification.AppendGroup(ClassGroupSingleton("FARM"))
219            self.layer.SetClassification(self.classification)
220    
221        def tearDown(self):
222            self.layer.Destroy()
223            self.session.Destroy()
224            self.session = self.layer = self.store = self.classification = None
225    
226        def test_sanity(self):
227            """SetShapeStoreTests sanity check"""
228            cls = self.layer.GetClassification()
229            self.assert_(cls is self.classification)
230            self.assertEquals(cls.GetField(), "CLPTLABEL")
231            self.assertEquals(cls.GetFieldType(), FIELDTYPE_STRING)
232            self.assertEquals(self.layer.GetClassification().GetNumGroups(), 1)
233    
234        def test_set_shape_store_different_field_name(self):
235            """Test Layer.SetShapeStore() with different column name"""
236            memtable = MemoryTable([("FOO", FIELDTYPE_STRING)],
237                          [("bla",)] * self.layer.ShapeStore().Table().NumRows())
238            self.layer.SetShapeStore(DerivedShapeStore(self.store, memtable))
239            # The classification should contain only the default group now.
240            self.assertEquals(self.layer.GetClassification().GetNumGroups(), 0)
241    
242        def test_set_shape_store_same_field(self):
243            """Test Layer.SetShapeStore() with same column name and type"""
244            memtable = MemoryTable([("CLPTLABEL", FIELDTYPE_STRING)],
245                          [("bla",)] * self.layer.ShapeStore().Table().NumRows())
246            self.layer.SetShapeStore(DerivedShapeStore(self.store, memtable))
247            # The classification should be the same as before
248            self.assert_(self.layer.GetClassification() is self.classification)
249    
250        def test_set_shape_store_same_field_different_type(self):
251            """Test Layer.SetShapeStore() with same column name but different type
252            """
253            memtable = MemoryTable([("CLPTLABEL", FIELDTYPE_DOUBLE)],
254                          [(0.0,)] * self.layer.ShapeStore().Table().NumRows())
255            self.layer.SetShapeStore(DerivedShapeStore(self.store, memtable))
256            # The classification should contain only the default group now.
257            self.assertEquals(self.layer.GetClassification().GetNumGroups(), 0)
258    
259    
260  class TestLayerLegend(unittest.TestCase, support.SubscriberMixin):  class TestLayerLegend(unittest.TestCase, support.SubscriberMixin):
261    

Legend:
Removed from v.947  
changed lines
  Added in v.1088

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26