/[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 723 by bh, Thu Apr 24 15:31:53 2003 UTC revision 1088 by bh, Wed May 28 12:42:23 2003 UTC
# Line 23  import shapelib Line 23  import shapelib
23  import dbflib  import dbflib
24    
25  from Thuban.Model.session import Session  from Thuban.Model.session import Session
26  from Thuban.Model.layer import Layer, SHAPETYPE_POLYGON, SHAPETYPE_ARC, \  from Thuban.Model.layer import BaseLayer, Layer, RasterLayer, \
27       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
30  from Thuban.Model.color import Color  from Thuban.Model.color import Color
31    from Thuban.Model.table import FIELDTYPE_DOUBLE, FIELDTYPE_STRING, MemoryTable
32    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 40  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):
59            return os.path.join("..", "Data", "iceland", filename)
60    
61        def open_shapefile(self, filename):
62            """Open and return a shapestore for filename in the iceland data set"""
63            return self.session.OpenShapefile(self.build_path(filename))
64    
65        def test_base_layer(self):
66            layer = self.layer = BaseLayer("Test BaseLayer")
67            self.assertEquals(layer.Title(), "Test BaseLayer")
68            self.failUnless(layer.Visible())
69    
70            # toggle visibility
71            layer.SetVisible(False)
72            self.failIf(layer.Visible())
73    
74            layer.SetVisible(True)
75            self.failUnless(layer.Visible())
76    
77            self.failIf(layer.HasClassification())
78            self.assertEquals(layer.GetProjection(), None)
79    
80            # set/get projection
81            proj = Projection(["proj=utm", "zone=26"])
82    
83            layer.SetProjection(proj)
84            self.failUnless(layer.GetProjection() is proj)
85    
86            # __init__ with other arguments
87            layer = BaseLayer("Test BaseLayer", False, proj)
88            self.failIf(layer.Visible())
89            self.failUnless(layer.GetProjection() is proj)
90    
91      def test_arc_layer(self):      def test_arc_layer(self):
92          """Test Layer with arc shapes"""          """Test Layer with arc shapes"""
93          filename = os.path.join("..", "Data", "iceland", "roads-line.shp")          layer = self.layer = Layer("Test Layer",
94          layer = Layer("Test Layer", self.session.OpenShapefile(filename))                                     self.open_shapefile("roads-line.shp"))
         self.assertEquals(layer.Title(), "Test Layer")  
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 62  class TestLayer(unittest.TestCase, suppo Line 103  class TestLayer(unittest.TestCase, suppo
103                                    -13.55668830871582, 66.520111083984375])                                    -13.55668830871582, 66.520111083984375])
104          self.assertEquals(layer.ShapesInRegion((-24.0, 64.0, -23.75, 64.25)),          self.assertEquals(layer.ShapesInRegion((-24.0, 64.0, -23.75, 64.25)),
105                            [613, 726, 838])                            [613, 726, 838])
106          layer.Destroy()  
107            self.assertFloatSeqEqual(layer.ShapesBoundingBox([32]),
108                              [-15.082174301147461, 66.27339172363281,
109                               -15.026350021362305, 66.27738189697265])
110    
111            shape = layer.Shape(33)
112            self.assertFloatTuplesEqual(shape.Points(),
113                                        [(-22.248506546020508, 66.30645751953125),
114                                         (-22.232730865478516, 66.294075012207031),
115                                         (-22.23158073425293,  66.287689208984375),
116                                         (-22.246318817138672, 66.270065307617188)])
117    
118            self.assertFloatSeqEqual(layer.ShapesBoundingBox([32, 33]),
119                                     [-22.248506546020508, 66.270065307617188,
120                                      -15.026350021362305, 66.30645751953125])
121    
122            self.assertEquals(layer.ShapesBoundingBox([]), None)
123            self.assertEquals(layer.ShapesBoundingBox(None), None)
124    
125      def test_polygon_layer(self):      def test_polygon_layer(self):
126          """Test Layer with polygon shapes"""          """Test Layer with polygon shapes"""
127          filename = os.path.join("..", "Data", "iceland", "political.shp")          layer = self.layer = Layer("Test Layer",
128          layer = Layer("Test Layer", self.session.OpenShapefile(filename))                                     self.open_shapefile("political.shp"))
         self.assertEquals(layer.Title(), "Test Layer")  
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 82  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          filename = os.path.join("..", "Data", "iceland",          layer = self.layer = Layer("Test Layer",
146                                  "cultural_landmark-point.shp")                             self.open_shapefile("cultural_landmark-point.shp"))
         layer = Layer("Test Layer", self.session.OpenShapefile(filename))  
         self.assertEquals(layer.Title(), "Test Layer")  
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 100  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 115  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)
176          layer.Destroy()  
177        def test_get_field_type(self):
178            """Test Layer.GetFieldType()"""
179            layer = self.layer = Layer("Test Layer",
180                                       self.open_shapefile("roads-line.shp"))
181            self.assertEquals(layer.GetFieldType("LENGTH"), FIELDTYPE_DOUBLE)
182            self.assertEquals(layer.GetFieldType("non existing"), None)
183    
184        def test_raster_layer(self):
185            filename = self.build_path("island.tif")
186            layer = RasterLayer("Test RasterLayer", filename)
187            self.assertEquals(layer.GetImageFilename(), filename)
188            self.assertFloatSeqEqual(layer.BoundingBox(),
189                                     [-24.5500000, 63.2833330,
190                                      -13.4916670, 66.5666670])
191            self.assertFloatSeqEqual(layer.LatLongBoundingBox(),
192                                     [-24.5500000, 63.2833330,
193                                      -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):

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26