/[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 1555 by bh, Thu Aug 7 15:41:05 2003 UTC revision 2351 by bh, Sat Sep 25 18:49:20 2004 UTC
# Line 1  Line 1 
1  # Copyright (c) 2002, 2003 by Intevation GmbH  # Copyright (c) 2002, 2003, 2004 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
4  #  #
# Line 16  __version__ = "$Revision$" Line 16  __version__ = "$Revision$"
16  import os  import os
17  import unittest  import unittest
18    
19    import mockgeo
20  import support  import support
21  support.initthuban()  support.initthuban()
22    
# Line 40  class TestLayer(unittest.TestCase, suppo Line 41  class TestLayer(unittest.TestCase, suppo
41    
42      """Test cases for different layer (shape) types"""      """Test cases for different layer (shape) types"""
43    
     def assertPointListEquals(self, test, value):  
         """Assert equality of two lists of lists of tuples of float"""  
         for i in range(len(test)):  
             self.assertEquals(len(test[i]), len(value[i]))  
             for j in range(len(test[i])):  
                 self.assertFloatSeqEqual(test[i][j], value[i][j])  
   
44      def setUp(self):      def setUp(self):
45          """Create a session self.session and initialize self.layer to None"""          """Create a session self.session and initialize self.layer to None"""
46          self.session = Session("Test session for %s" % self.__class__)          self.session = Session("Test session for %s" % self.__class__)
# Line 54  class TestLayer(unittest.TestCase, suppo Line 48  class TestLayer(unittest.TestCase, suppo
48    
49      def tearDown(self):      def tearDown(self):
50          """Call the layer's Destroy method and set session and layer to None"""          """Call the layer's Destroy method and set session and layer to None"""
51            self.session.Destroy()
52          self.session = None          self.session = None
53          if self.layer is not None:          if self.layer is not None:
54              self.layer.Destroy()              self.layer.Destroy()
# Line 84  class TestLayer(unittest.TestCase, suppo Line 79  class TestLayer(unittest.TestCase, suppo
79          self.assertEquals(layer.GetProjection(), None)          self.assertEquals(layer.GetProjection(), None)
80    
81          # set/get projection          # set/get projection
82          proj = Projection(["proj=utm", "zone=26"])          proj = Projection(["proj=utm", "zone=26", "ellps=clrk66"])
83    
84          layer.SetProjection(proj)          layer.SetProjection(proj)
85          self.failUnless(layer.GetProjection() is proj)          self.failUnless(layer.GetProjection() is proj)
# Line 109  class TestLayer(unittest.TestCase, suppo Line 104  class TestLayer(unittest.TestCase, suppo
104          self.assertFloatSeqEqual(layer.BoundingBox(),          self.assertFloatSeqEqual(layer.BoundingBox(),
105                                   [-24.450359344482422, 63.426830291748047,                                   [-24.450359344482422, 63.426830291748047,
106                                    -13.55668830871582, 66.520111083984375])                                    -13.55668830871582, 66.520111083984375])
107          self.assertEquals(layer.ShapesInRegion((-24.0, 64.0, -23.75, 64.25)),          shapes = layer.ShapesInRegion((-24.0, 64.0, -23.75, 64.25))
108            self.assertEquals([s.ShapeID() for s in shapes],
109                            [613, 726, 838])                            [613, 726, 838])
110    
111          self.assertFloatSeqEqual(layer.ShapesBoundingBox([32]),          self.assertFloatSeqEqual(layer.ShapesBoundingBox([32]),
# Line 147  class TestLayer(unittest.TestCase, suppo Line 143  class TestLayer(unittest.TestCase, suppo
143          self.assertFloatSeqEqual(layer.BoundingBox(),          self.assertFloatSeqEqual(layer.BoundingBox(),
144                                   [-24.546524047851562, 63.286754608154297,                                   [-24.546524047851562, 63.286754608154297,
145                                    -13.495815277099609, 66.563774108886719])                                    -13.495815277099609, 66.563774108886719])
146          self.assertEquals(layer.ShapesInRegion((-24.0, 64.0, -23.9, 64.1)),          shapes = layer.ShapesInRegion((-24.0, 64.0, -23.9, 64.1))
147            self.assertEquals([s.ShapeID() for s in shapes],
148                            [91, 92, 144, 146, 148, 150, 152, 153])                            [91, 92, 144, 146, 148, 150, 152, 153])
149    
150      def test_point_layer(self):      def test_point_layer(self):
# Line 164  class TestLayer(unittest.TestCase, suppo Line 161  class TestLayer(unittest.TestCase, suppo
161          self.assertFloatSeqEqual(layer.BoundingBox(),          self.assertFloatSeqEqual(layer.BoundingBox(),
162                                   [-23.806047439575195, 63.405960083007812,                                   [-23.806047439575195, 63.405960083007812,
163                                    -15.12291431427002, 66.36572265625])                                    -15.12291431427002, 66.36572265625])
164          self.assertEquals(layer.ShapesInRegion((-24.0, 64.0, -23.80, 64.1)),          shapes = layer.ShapesInRegion((-24.0, 64.0, -23.80, 64.1))
165            self.assertEquals([s.ShapeID() for s in shapes],
166                            [0, 1, 2, 3, 4, 5, 27, 28, 29, 30, 31])                            [0, 1, 2, 3, 4, 5, 27, 28, 29, 30, 31])
167    
168        def test_arc_layer_with_projection(self):
169            """Test Layer with point shapes and a projection"""
170            # We use mock data here so that we have precise control over the
171            # values
172            table = MemoryTable([("FOO", FIELDTYPE_STRING)], [("bla",)])
173            store = mockgeo.SimpleShapeStore(SHAPETYPE_ARC,
174                                  [[[(9884828.7209840547, 5607720.9774499247),
175                                     (11298336.04640449, 9287823.2044059951)]]],
176                                             table)
177            layer = self.layer = Layer("Test Layer", store)
178    
179            proj = Projection(["proj=lcc", "lon_0=0", "lat_1=20n", "lat_2=60n",
180                               "ellps=clrk66"])
181            layer.SetProjection(proj)
182    
183            self.assertFloatSeqEqual(layer.BoundingBox(),
184                                     (9884828.7209840547, 5607720.9774499247,
185                                      11298336.04640449, 9287823.2044059951))
186            self.assertFloatSeqEqual(layer.LatLongBoundingBox(),
187                                     (90.0, -8.90043373, 120, 11.1616263))
188            shapes = layer.ShapesInRegion((100, -10, 150, +10))
189            self.assertEquals([s.ShapeID() for s in shapes], [0])
190            self.assertFloatSeqEqual(layer.ShapesBoundingBox([0]),
191                                     (90.0, -8.90043373, 120, 11.1616263))
192    
193            self.assertFloatSeqEqual(layer.ClipBoundingBox((-180, -6, 100, +120)),
194                                     (90.0, -6, 100, 11.1616263))
195            shapes = layer.ShapesInRegion((-180, -170, 200, +120))
196            self.assertEquals([s.ShapeID() for s in shapes],[0])
197    
198      def test_empty_layer(self):      def test_empty_layer(self):
199          """Test Layer with empty shape file"""          """Test Layer with empty shape file"""
200          # create an empty shape file          # create an empty shape file
# Line 178  class TestLayer(unittest.TestCase, suppo Line 206  class TestLayer(unittest.TestCase, suppo
206          dbffilename = self.temp_file_name("layer_empty.dbf")          dbffilename = self.temp_file_name("layer_empty.dbf")
207          dbf = dbflib.create(dbffilename)          dbf = dbflib.create(dbffilename)
208          dbf.add_field("NAME", dbflib.FTString, 20, 0)          dbf.add_field("NAME", dbflib.FTString, 20, 0)
209            dbf.close()
210    
211          # Now try to open it.          # Now try to open it.
212          layer = self.layer = Layer("Empty Layer",          layer = self.layer = Layer("Empty Layer",
# Line 201  class TestLayer(unittest.TestCase, suppo Line 230  class TestLayer(unittest.TestCase, suppo
230          layer = RasterLayer("Test RasterLayer", filename)          layer = RasterLayer("Test RasterLayer", filename)
231          self.failIf(layer.HasClassification())          self.failIf(layer.HasClassification())
232          self.failIf(layer.HasShapes())          self.failIf(layer.HasShapes())
233          self.assertEquals(layer.GetImageFilename(), filename)          self.assertEquals(layer.GetImageFilename(), os.path.abspath(filename))
234          self.assertFloatSeqEqual(layer.BoundingBox(),          self.assertFloatSeqEqual(layer.BoundingBox(),
235                                   [-24.5500000, 63.2833330,                                   [-24.5500000, 63.2833330,
236                                    -13.4916670, 66.5666670])                                    -13.4916670, 66.5666670])
# Line 228  class TestLayer(unittest.TestCase, suppo Line 257  class TestLayer(unittest.TestCase, suppo
257              self.assertFloatSeqEqual(layer.BoundingBox(),              self.assertFloatSeqEqual(layer.BoundingBox(),
258                                       [-24.450359344482422, 63.426830291748047,                                       [-24.450359344482422, 63.426830291748047,
259                                        -13.55668830871582, 66.520111083984375])                                        -13.55668830871582, 66.520111083984375])
260              self.assertEquals(layer.ShapesInRegion((-24.0, 64.0,              shapes = layer.ShapesInRegion((-24.0, 64.0, -23.75, 64.25))
261                                                      -23.75, 64.25)),              self.assertEquals([s.ShapeID() for s in shapes],
262                                [613, 726, 838])                                [613, 726, 838])
263    
264              self.assertFloatSeqEqual(layer.ShapesBoundingBox([32]),              self.assertFloatSeqEqual(layer.ShapesBoundingBox([32]),
# Line 331  class TestLayerModification(unittest.Tes Line 360  class TestLayerModification(unittest.Tes
360          """          """
361          self.clear_messages()          self.clear_messages()
362          self.session = Session("Test session for %s" % self.__class__)          self.session = Session("Test session for %s" % self.__class__)
363          filename = os.path.join("..", "Data", "iceland", "political.shp")          self.filename = os.path.join("..", "Data", "iceland", "political.shp")
364          self.layer = Layer("Test Layer",          self.layer = Layer("Test Layer",
365                             self.session.OpenShapefile(filename))                             self.session.OpenShapefile(self.filename))
366          self.layer.Subscribe(LAYER_LEGEND_CHANGED, self.subscribe_with_params,          self.layer.Subscribe(LAYER_LEGEND_CHANGED, self.subscribe_with_params,
367                               LAYER_LEGEND_CHANGED)                               LAYER_LEGEND_CHANGED)
368          self.layer.Subscribe(LAYER_VISIBILITY_CHANGED,          self.layer.Subscribe(LAYER_VISIBILITY_CHANGED,
# Line 392  class TestLayerModification(unittest.Tes Line 421  class TestLayerModification(unittest.Tes
421          self.failUnless(self.layer.WasModified())          self.failUnless(self.layer.WasModified())
422    
423    
424  #      def test_tree_info(self):
425  # the tree info now contains Color objects which are difficult to test          """Test Layer.TreeInfo"""
426  #          self.assertEquals(self.layer.TreeInfo(),
427  #   def test_tree_info(self):                            ("Layer 'Test Layer'",
428  #       """Test Layer.TreeInfo"""                             ['Filename: %s' % os.path.abspath(self.filename),
429  #       self.assertEquals(self.layer.TreeInfo(),                              'Shown',
430  #                         ("Layer 'Test Layer'",                              'Shapes: 156',
431  #                          ['Shown',                     'Extent (lat-lon): (-24.5465, 63.2868, -13.4958, 66.5638)',
432  #                           'Shapes: 156',                              'Shapetype: Polygon',
433  #                           ('Extent (lat-lon):'                              self.layer.GetClassification()]))
 #                            ' (-24.5465, 63.2868, -13.4958, 66.5638)'),  
 #                           'Shapetype: Polygon',  
 #                           'Fill: None',  
 #                           'Outline: (0.000, 0.000, 0.000)']))  
434    
435    
436  if __name__ == "__main__":  if __name__ == "__main__":

Legend:
Removed from v.1555  
changed lines
  Added in v.2351

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26