/[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 331 by bh, Fri Sep 20 14:34:23 2002 UTC revision 839 by bh, Tue May 6 15:54:18 2003 UTC
# Line 1  Line 1 
1  # Copyright (c) 2002 by Intevation GmbH  # Copyright (c) 2002, 2003 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
4  #  #
# Line 20  import support Line 20  import support
20  support.initthuban()  support.initthuban()
21    
22  import shapelib  import shapelib
23    import dbflib
24    
25    from Thuban.Model.session import Session
26  from Thuban.Model.layer import Layer, SHAPETYPE_POLYGON, SHAPETYPE_ARC, \  from Thuban.Model.layer import Layer, SHAPETYPE_POLYGON, SHAPETYPE_ARC, \
27       SHAPETYPE_POINT       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
32    
33  class TestLayer(unittest.TestCase, support.FileTestMixin,  class TestLayer(unittest.TestCase, support.FileTestMixin,
34                  support.FloatComparisonMixin):                  support.FloatComparisonMixin):
# Line 37  class TestLayer(unittest.TestCase, suppo Line 40  class TestLayer(unittest.TestCase, suppo
40          for i in range(len(test)):          for i in range(len(test)):
41              self.assertFloatSeqEqual(test[i], value[i])              self.assertFloatSeqEqual(test[i], value[i])
42    
43        def setUp(self):
44            """Create a session"""
45            self.session = Session("Test session for %s" % self.__class__)
46    
47        def tearDown(self):
48            self.session = None
49    
50        def open_shapefile(self, filename):
51            """Open and return a shapestore for filename in the iceland data set"""
52            return self.session.OpenShapefile(os.path.join("..", "Data", "iceland",
53                                                           filename))
54    
55      def test_arc_layer(self):      def test_arc_layer(self):
56          """Test Layer with arc shapes"""          """Test Layer with arc shapes"""
57          layer = Layer("Test Layer",          layer = Layer("Test Layer", self.open_shapefile("roads-line.shp"))
                       os.path.join("..", "Data", "iceland", "roads-line.shp"))  
58          self.assertEquals(layer.Title(), "Test Layer")          self.assertEquals(layer.Title(), "Test Layer")
59          self.assertEquals(layer.ShapeType(), SHAPETYPE_ARC)          self.assertEquals(layer.ShapeType(), SHAPETYPE_ARC)
60          self.assertEquals(layer.NumShapes(), 839)          self.assertEquals(layer.NumShapes(), 839)
# Line 54  class TestLayer(unittest.TestCase, suppo Line 68  class TestLayer(unittest.TestCase, suppo
68          self.assertEquals(layer.ShapesInRegion((-24.0, 64.0, -23.75, 64.25)),          self.assertEquals(layer.ShapesInRegion((-24.0, 64.0, -23.75, 64.25)),
69                            [613, 726, 838])                            [613, 726, 838])
70    
71            self.assertFloatSeqEqual(layer.ShapesBoundingBox([32]),
72                              [-15.082174301147461, 66.27339172363281,
73                               -15.026350021362305, 66.27738189697265])
74    
75            shape = layer.Shape(33)
76            self.assertFloatTuplesEqual(shape.Points(),
77                                        [(-22.248506546020508, 66.30645751953125),
78                                         (-22.232730865478516, 66.294075012207031),
79                                         (-22.23158073425293,  66.287689208984375),
80                                         (-22.246318817138672, 66.270065307617188)])
81    
82            self.assertFloatSeqEqual(layer.ShapesBoundingBox([32, 33]),
83                                     [-22.248506546020508, 66.270065307617188,
84                                      -15.026350021362305, 66.30645751953125])
85    
86            self.assertEquals(layer.ShapesBoundingBox([]), None)
87            self.assertEquals(layer.ShapesBoundingBox(None), None)
88    
89            layer.Destroy()
90    
91      def test_polygon_layer(self):      def test_polygon_layer(self):
92          """Test Layer with polygon shapes"""          """Test Layer with polygon shapes"""
93          layer = Layer("Test Layer",          layer = Layer("Test Layer", self.open_shapefile("political.shp"))
                       os.path.join("..", "Data", "iceland", "political.shp"))  
94          self.assertEquals(layer.Title(), "Test Layer")          self.assertEquals(layer.Title(), "Test Layer")
95          self.assertEquals(layer.ShapeType(), SHAPETYPE_POLYGON)          self.assertEquals(layer.ShapeType(), SHAPETYPE_POLYGON)
96          self.assertEquals(layer.NumShapes(), 156)          self.assertEquals(layer.NumShapes(), 156)
# Line 72  class TestLayer(unittest.TestCase, suppo Line 105  class TestLayer(unittest.TestCase, suppo
105                                    -13.495815277099609, 66.563774108886719])                                    -13.495815277099609, 66.563774108886719])
106          self.assertEquals(layer.ShapesInRegion((-24.0, 64.0, -23.9, 64.1)),          self.assertEquals(layer.ShapesInRegion((-24.0, 64.0, -23.9, 64.1)),
107                            [91, 92, 144, 146, 148, 150, 152, 153])                            [91, 92, 144, 146, 148, 150, 152, 153])
108            layer.Destroy()
109    
110      def test_point_layer(self):      def test_point_layer(self):
111          """Test Layer with point shapes"""          """Test Layer with point shapes"""
112          layer = Layer("Test Layer",          layer = Layer("Test Layer",
113                        os.path.join("..", "Data", "iceland",                        self.open_shapefile("cultural_landmark-point.shp"))
                                    "cultural_landmark-point.shp"))  
114          self.assertEquals(layer.Title(), "Test Layer")          self.assertEquals(layer.Title(), "Test Layer")
115          self.assertEquals(layer.ShapeType(), SHAPETYPE_POINT)          self.assertEquals(layer.ShapeType(), SHAPETYPE_POINT)
116          self.assertEquals(layer.NumShapes(), 34)          self.assertEquals(layer.NumShapes(), 34)
# Line 89  class TestLayer(unittest.TestCase, suppo Line 122  class TestLayer(unittest.TestCase, suppo
122                                    -15.12291431427002, 66.36572265625])                                    -15.12291431427002, 66.36572265625])
123          self.assertEquals(layer.ShapesInRegion((-24.0, 64.0, -23.80, 64.1)),          self.assertEquals(layer.ShapesInRegion((-24.0, 64.0, -23.80, 64.1)),
124                            [0, 1, 2, 3, 4, 5, 27, 28, 29, 30, 31])                            [0, 1, 2, 3, 4, 5, 27, 28, 29, 30, 31])
125            layer.Destroy()
126    
127      def test_empty_layer(self):      def test_empty_layer(self):
128          """Test Layer with empty shape file"""          """Test Layer with empty shape file"""
# Line 96  class TestLayer(unittest.TestCase, suppo Line 130  class TestLayer(unittest.TestCase, suppo
130          shapefilename = self.temp_file_name("layer_empty.shp")          shapefilename = self.temp_file_name("layer_empty.shp")
131          shp = shapelib.create(shapefilename, shapelib.SHPT_POLYGON)          shp = shapelib.create(shapefilename, shapelib.SHPT_POLYGON)
132          shp.close()          shp.close()
133            # create an empty DBF file too because Thuban can't cope yet
134          layer = Layer("Empty Layer", shapefilename)          # with missing DBF file.
135            dbffilename = self.temp_file_name("layer_empty.dbf")
136            dbf = dbflib.create(dbffilename)
137            dbf.add_field("NAME", dbflib.FTString, 20, 0)
138    
139            # Now try to open it.
140            layer = Layer("Empty Layer",
141                          self.session.OpenShapefile(shapefilename))
142          self.assertEquals(layer.BoundingBox(), None)          self.assertEquals(layer.BoundingBox(), None)
143          self.assertEquals(layer.LatLongBoundingBox(), None)          self.assertEquals(layer.LatLongBoundingBox(), None)
144          self.assertEquals(layer.NumShapes(), 0)          self.assertEquals(layer.NumShapes(), 0)
145            layer.Destroy()
146    
147        def test_get_field_type(self):
148            """Test Layer.GetFieldType()"""
149            layer = Layer("Test Layer", self.open_shapefile("roads-line.shp"))
150            self.assertEquals(layer.GetFieldType("LENGTH"), FIELDTYPE_DOUBLE)
151            self.assertEquals(layer.GetFieldType("non existing"), None)
152            layer.Destroy()
153    
154    
155  class TestLayerLegend(unittest.TestCase, support.SubscriberMixin):  class TestLayerLegend(unittest.TestCase, support.SubscriberMixin):
# Line 109  class TestLayerLegend(unittest.TestCase, Line 158  class TestLayerLegend(unittest.TestCase,
158      """      """
159    
160      def setUp(self):      def setUp(self):
161          """Clear the list of received messages and create a layer          """Clear the list of received messages and create a layer and a session
162    
163          The layer is bound to self.layer.          The layer is bound to self.layer and the session to self.session.
164          """          """
165          self.clear_messages()          self.clear_messages()
166            self.session = Session("Test session for %s" % self.__class__)
167            filename = os.path.join("..", "Data", "iceland", "political.shp")
168          self.layer = Layer("Test Layer",          self.layer = Layer("Test Layer",
169                             os.path.join("..", "Data", "iceland",                             self.session.OpenShapefile(filename))
                                         "political.shp"))  
170          self.layer.Subscribe(LAYER_LEGEND_CHANGED, self.subscribe_with_params,          self.layer.Subscribe(LAYER_LEGEND_CHANGED, self.subscribe_with_params,
171                               LAYER_LEGEND_CHANGED)                               LAYER_LEGEND_CHANGED)
172          self.layer.Subscribe(LAYER_VISIBILITY_CHANGED,          self.layer.Subscribe(LAYER_VISIBILITY_CHANGED,
# Line 127  class TestLayerLegend(unittest.TestCase, Line 177  class TestLayerLegend(unittest.TestCase,
177          """Clear the list of received messages and explictly destroy self.layer          """Clear the list of received messages and explictly destroy self.layer
178          """          """
179          self.layer.Destroy()          self.layer.Destroy()
180            self.layer = None
181            self.session.Destroy()
182            self.session = None
183          self.clear_messages()          self.clear_messages()
184    
185      def test_initial_settings(self):      def test_initial_settings(self):
186          """Test Layer's initial legend attributes"""          """Test Layer's initial legend attributes"""
187          # test default settings          # test default settings
188          self.failIf(self.layer.WasModified())          self.failIf(self.layer.WasModified())
189          self.assertEquals(self.layer.fill, None)          #self.assertEquals(self.layer.fill, None)
190          self.assertEquals(self.layer.stroke.hex(), "#000000")          #self.assertEquals(self.layer.stroke.hex(), "#000000")
191          self.assertEquals(self.layer.stroke_width, 1)          #self.assertEquals(self.layer.stroke_width, 1)
192          self.assertEquals(self.layer.Visible(), 1)          self.assertEquals(self.layer.Visible(), 1)
193          # no messages should have been produced          # no messages should have been produced
194          self.check_messages([])          self.check_messages([])
195    
     def test_fill(self):  
         """Test Layer's fill attribute"""  
         # modify the fill  
         self.layer.SetFill(Color(0.5, 1.0, 0.75))  
         self.check_messages([(self.layer, LAYER_LEGEND_CHANGED)])  
         self.assertEquals(self.layer.fill.hex().lower(), "#7fffbf")  
         self.assert_(self.layer.WasModified())  
   
     def test_stroke(self):  
         """Test Layer's stroke attribute"""  
         self.layer.SetStroke(Color(0.5, 1.0, 0.75))  
         self.assertEquals(self.layer.stroke.hex().lower(), "#7fffbf")  
         self.check_messages([(self.layer, LAYER_LEGEND_CHANGED)])  
         self.assert_(self.layer.WasModified())  
   
     def test_stroke_width(self):  
         """Test Layer's stroke_width attribute"""  
         self.layer.SetStrokeWidth(3.0)  
         self.assertEquals(self.layer.stroke_width, 3.0)  
         self.check_messages([(self.layer, LAYER_LEGEND_CHANGED)])  
         self.assert_(self.layer.WasModified())  
   
196      def test_visibility(self):      def test_visibility(self):
197          """Test Layer visibility"""          """Test Layer visibility"""
198          self.layer.SetVisible(0)          self.layer.SetVisible(0)
# Line 172  class TestLayerLegend(unittest.TestCase, Line 203  class TestLayerLegend(unittest.TestCase,
203          # the layer.          # the layer.
204          self.failIf(self.layer.WasModified())          self.failIf(self.layer.WasModified())
205    
206      def test_tree_info(self):      
207          """Test Layer.TreeInfo"""  #
208          self.assertEquals(self.layer.TreeInfo(),  # the tree info now contains Color objects which are difficult to test
209                            ("Layer 'Test Layer'",  #
210                             ['Shown',  #   def test_tree_info(self):
211                              'Shapes: 156',  #       """Test Layer.TreeInfo"""
212                              ('Extent (lat-lon):'  #       self.assertEquals(self.layer.TreeInfo(),
213                               ' (-24.5465, 63.2868, -13.4958, 66.5638)'),  #                         ("Layer 'Test Layer'",
214                              'Shapetype: Polygon',  #                          ['Shown',
215                              'Fill: None',  #                           'Shapes: 156',
216                              'Outline: (0.000, 0.000, 0.000)']))  #                           ('Extent (lat-lon):'
217    #                            ' (-24.5465, 63.2868, -13.4958, 66.5638)'),
218    #                           'Shapetype: Polygon',
219    #                           'Fill: None',
220    #                           'Outline: (0.000, 0.000, 0.000)']))
221    
222    
223  if __name__ == "__main__":  if __name__ == "__main__":
224      unittest.main()      support.run_tests()

Legend:
Removed from v.331  
changed lines
  Added in v.839

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26