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

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

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

revision 1552 by bh, Wed Aug 6 17:21:32 2003 UTC revision 2551 by jonathan, Thu Jan 27 14:19:41 2005 UTC
# Line 15  import os Line 15  import os
15  import binascii  import binascii
16  import unittest  import unittest
17    
18    from mockgeo import SimpleShapeStore
19  import support  import support
20  support.initthuban()  support.initthuban()
21    
22  from Thuban.Model.color import Transparent, Color  from Thuban.Model.color import Transparent, Color
23  from Thuban.Model.data import Shape, SHAPETYPE_ARC, SHAPETYPE_POLYGON, \  from Thuban.Model.data import SHAPETYPE_ARC, SHAPETYPE_POLYGON, SHAPETYPE_POINT
      SHAPETYPE_POINT  
24  from Thuban.Model.map import Map  from Thuban.Model.map import Map
25  from Thuban.Model.layer import Layer, RasterLayer  from Thuban.Model.layer import BaseLayer, Layer, RasterLayer
26  from Thuban.Model.table import MemoryTable, \  from Thuban.Model.table import MemoryTable, \
27       FIELDTYPE_DOUBLE, FIELDTYPE_INT, FIELDTYPE_STRING       FIELDTYPE_DOUBLE, FIELDTYPE_INT, FIELDTYPE_STRING
28    from Thuban.Model.classification import ClassGroupSingleton
29    import Thuban.Model.resource
30    
31  from Thuban.UI.baserenderer import BaseRenderer  
32    from Thuban.UI.baserenderer import BaseRenderer, \
33         add_renderer_extension, init_renderer_extensions
34    
35    
36  class MockDC:  class MockDC:
# Line 85  class SimpleRenderer(BaseRenderer): Line 89  class SimpleRenderer(BaseRenderer):
89      def label_font(self):      def label_font(self):
90          return "label font"          return "label font"
91    
92      def draw_raster_data(self, data):      def draw_raster_data(self, x, y, data, format='BMP'):
93          self.raster_data = data          self.raster_data = data
94            self.raster_format = format
 class SimpleShapeStore:  
   
     def __init__(self, shapetype, shapes, table):  
         self.shapetype = shapetype  
         self.shapes = shapes  
         self.table = table  
         assert table.NumRows() == len(shapes)  
   
     def ShapeType(self):  
         return self.shapetype  
   
     def Table(self):  
         return self.table  
   
     def NumShapes(self):  
         return len(self.shapes)  
   
     def Shape(self, index):  
         return Shape(self.shapes[index])  
95    
96    
97  class MockProjection:  class MockProjection:
# Line 154  class TestBaseRenderer(unittest.TestCase Line 139  class TestBaseRenderer(unittest.TestCase
139          map.AddLayer(layer)          map.AddLayer(layer)
140    
141          dc = MockDC()          dc = MockDC()
142          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
143    
144          renderer.render_map(map)          renderer.render_map()
145    
146          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
147                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 184  class TestBaseRenderer(unittest.TestCase Line 169  class TestBaseRenderer(unittest.TestCase
169          self.to_destroy.append(map)          self.to_destroy.append(map)
170    
171          dc = MockDC()          dc = MockDC()
172          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
173    
174          renderer.render_map(map)          renderer.render_map()
175    
176          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
177                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 223  class TestBaseRenderer(unittest.TestCase Line 208  class TestBaseRenderer(unittest.TestCase
208          self.to_destroy.append(map)          self.to_destroy.append(map)
209    
210          dc = MockDC()          dc = MockDC()
211          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
212    
213          renderer.render_map(map)          renderer.render_map()
214    
215          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
216                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 262  class TestBaseRenderer(unittest.TestCase Line 247  class TestBaseRenderer(unittest.TestCase
247          self.to_destroy.append(map)          self.to_destroy.append(map)
248    
249          dc = MockDC()          dc = MockDC()
250          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
251    
252          renderer.render_map(map)          renderer.render_map()
253    
254          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
255                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 284  class TestBaseRenderer(unittest.TestCase Line 269  class TestBaseRenderer(unittest.TestCase
269          to round-off errors. It simply compares the complete BMP file          to round-off errors. It simply compares the complete BMP file
270          returned by gdalwarp.ProjectRasterFile to a BMP file data.          returned by gdalwarp.ProjectRasterFile to a BMP file data.
271          """          """
272            if not Thuban.Model.resource.has_gdal_support():
273                raise support.SkipTest("No gdal support")
274    
275          map = Map("TestBaseRenderer")          map = Map("TestBaseRenderer")
276    
277          layer = RasterLayer("raster layer",          layer = RasterLayer("raster layer",
# Line 293  class TestBaseRenderer(unittest.TestCase Line 281  class TestBaseRenderer(unittest.TestCase
281          self.to_destroy.append(map)          self.to_destroy.append(map)
282    
283          dc = MockDC(size = (20, 20))          dc = MockDC(size = (20, 20))
284          renderer = SimpleRenderer(dc, 34, (800, 2250))          renderer = SimpleRenderer(dc, map, 34, (800, 2250))
285    
286          renderer.render_map(map)          renderer.render_map()
287    
288          # The following commented out code block can be used to generate          # The following commented out code block can be used to generate
289          # the base64 coded reference image data          # the base64 coded reference image data
290          #hexed = binascii.b2a_base64(renderer.raster_data)          #hexed = binascii.b2a_base64(renderer.raster_data[2])
291          #while hexed:          #while hexed:
292          #    print repr(hexed[:65])              #print repr(hexed[:65])
293          #    hexed = hexed[65:]              #hexed = hexed[65:]
294    
295          # The reference data as a base64 coded BMP image          # The reference data as a base64 coded BMP image
296          raw_data = binascii.a2b_base64(          raw_data = binascii.a2b_base64(
297              'Qk3GBQAAAAAAADYEAAAoAAAAFAAAABQAAAABAAgAAAAAAJABAAAAAAAAAAAAAAABA'              'UmbmUmbmUmbmUmbmUmbmAtYCJooCAtICAq4CJooCArICAuICArICAuYCAs4COn4CO'
298              'AAAAAAAApYOAALGAgAGfjoAHmZyACZ2egAujo4AArICAE66GgACngIA5mZSAJqONg'              'n4CAq4CAuICFpICUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmAuYCAqICAqoCAqoCFp'
299              'ACzgIAAoIyABZqZgAO4uYAAtICAAKqAgAScloAAtYCADKepgAS2t4AAooiAALaAgA'              'ICJooCIo4CCpoCQnoGOn4CDpYCOn4CUmbmUmbmNo6aEpYCLoYCAqICGpICFpICUmb'
300              'CtgIAHsbOAAp2TgACogIAFtbaACqOigAidnoAAuICADKaogACfjoAAr4CAAKSFgAm'              'mAt4CUmbmNo6aAtICArYCAqoCKoYCMoICTnYKOn4CFpICUmbmUmbmUmbmUmbmAp4C'
301              'fnoAAo4eABrS1gAibnoAHsbKAAp6SgACmg4AGs7SACLCxgAqioIAAoYqAAZ6RgACm'              'NoICArYCAr4CCpoCAqYCCpoCEpYCHo4CFpICHo4CGpICFpICKoYCTnYKMoICAp4CU'
302              'goAKrK6AALmAgAC3gIAApIaABZqagACngYAAo4iAAKmAgAivsYAJoJ6AALCAgACyg'              'mbmUmbmUmbmUmbmUmbmUmbmAtYCAroCArYCCpoCAtYCAroCAtICAsYCUmbmAt4CAq'
303              'IAAq4CAAKWEgAOclYALpqeAAK6AgACgjYAEm5eAAKKKgAGekIAHmp6ABpmcgAChi4'              'YCAroCMoICAs4CAs4CAtYCAt4CAqYCUmbmUmbmUmbmUmbmAtoCAtYCAq4CAtoCBp4'
304              'ALpaaACJyegAClhYAEnJeAAZ+QgAqhoIADnZSAB5mdgACiiYAJnp6ACqGegAqrrYA'              'CAroCAqoCAq4CAr4CDpYCGpICAt4CAsICDpYCArICCpoCHo4CAs4CAuICUmbmUmbm'
305              'GmpuAB5megACkh4ALqqyAA52VgAulpYAAoI6AAZ+PgASbmIALpKWAA7m5gAWbmYAG'              'UmbmUmbmUmbmUmbmAuICAqICFpYCAq4CDpoCAqYCFpICAqYCUmbmNo6aAsYCCpoCD'
306              'mpyAC6SjgAqioYADnZOAA7q6gAianoALqauABpqagAqgnoAEnJWAAp6RgAWbmIACu'              'pYCAqICAtoCUmbmAt4CAqoCCpoCAroCHo4CAsYCAq4CAsICAs4CAp4CUmbmAtYCAq'
307              '7uACqGfgAqiooAMqauAAby8gAmusIAMp6qAC6WngAyoqoABvb2AC6SkgAS3uIAJra'              'YCIooCHo4CAsICAr4CAqICEpYCAs4CAqICArICDpYCEpYCEpYCAr4CUmbmEpYCAs4'
308              '+AB7KzgAynqIALq62ADKirgAC+voAGsrSABLi4gAG8vYADubqAC6qtgAuprIABvb6'              'CAtICAs4CAqYCUmbmAtoCAp4CCpoCDpYCAq4CArICAqoCAqYCAqYCAtYCAtoCDpYC'
309              'ACLCygAW2t4AKra+AAru8gAS4uYACuruAAry8gAG+voAAEBAAFhkZABAQEAABp6fA'              'At4CUmbmUmbmUmbmUmbmAt4CAsoCAsoCAp4CAp4CCpoCAsoCAt4CNo6aUmbmUmbmU'
310              'EBACAAAgPwAAPu/AJE9CgBACAAALj1BAEAICAAGPAAAQAgAAAY8+gBACL8AJTxXAA'              'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmAt4CAtYCCpoCAqICAroCAr4CUmbmUm'
311              'gIQAAAPEAAAAgIAAY8QABACAgAAGQAAABAAAAALpoAAEBAAAAALgAAAEAABkAGAEA'              'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb'
312              'IQAD2AEAAvwAIAJAu2ABAQEAALmQ5AEBAQAAAnp8AAEAIAAD4+gAAv78An5rDAEBA'              'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm'
313              'QAAuhAcAQEBAAAb8AABAvwAAAGQKAABAAABpLksAQEAIAC4ACwBAAAAAAPkGAAC/Q'              'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmU'
314              'AD2APoAvwC/AJ0umgBAQEAAAGRkAABAQAAGnp8AQEAIAPcA/AC/AL8A7D0GAEAIQA'              'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUm'
315              'D4hAAAv0AAAAD8QAAAvwgA92T6AL9AvwDsLlcAQEBAAC4AQABAAAgA+EAAAL8IAAA'              'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb'
316              '8AAAACAAAAJ8uVgBAQEAAAGQ5AABAQAAAnpcAAEBAAPYAQAC/AAgAnQsGAEAAQAAA'              'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm'
317              'hG0AAEBAAB38PQAIv0AA9mT6AL9AvwAJLmwAZUBAAB0AQAAIAAgAHUAAAAgIAAAAA'              'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmU'
318              'AAAAAAAAACzbAAAQEAA//k5AH+/QAAGb5cAQEBAAACy5AAAQAgAAIpAAABACAAAAA'              'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUm'
319              'AAAAAAAAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk'              'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb'
320              'JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJ'              'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm'
321              'CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJC'              'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm\n')
322              'QkJCQkJCQkJCQkJCQkJCQkJCQkyEi8aQCEJCQkJCQkJCQkJCQkJCTI7OwgILzsyCg'          self.assertEquals(renderer.raster_data, (20,20,(raw_data, None)))
323              'kJCQkJCQkJCQkJCzcJFggvADwGEDc3EhYAMgkJCQkJEjcVJDohGj0LGgYAPT0hCT0'          self.assertEquals(renderer.raster_format, "RAW")
             'LDyI3CQoBLwAaFgkyEC9AJAE8OgsIMjoABi8kCx4JCQkJCQkeGko8KTcLCxIyNwkJ'  
             'CQkWEjwWNUAQPCEAMwgJCQkJCQkSQBcvEkAPAQkyN0AMCQkJCQhBFyEvNy89JCIkM'  
             'yItGQwJCQo9RxozIgkyCQoPFxAtDBkgIgkJCQkJCQkJMRoQECJQNi9EIAAgCQkJCQ'  
             'kSUA88UAYeBjELICA8HiI=\n')  
         self.assertEquals(renderer.raster_data, raw_data)  
324    
325          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
326                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 360  class TestBaseRenderer(unittest.TestCase Line 343  class TestBaseRenderer(unittest.TestCase
343          self.to_destroy.append(map)          self.to_destroy.append(map)
344    
345          dc = MockDC()          dc = MockDC()
346          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
347    
348          renderer.render_map(map)          renderer.render_map()
349    
350          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
351                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 388  class TestBaseRenderer(unittest.TestCase Line 371  class TestBaseRenderer(unittest.TestCase
371          self.to_destroy.append(map)          self.to_destroy.append(map)
372    
373          dc = MockDC()          dc = MockDC()
374          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
375    
376          renderer.render_map(map)          renderer.render_map()
377    
378          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
379                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 417  class TestBaseRenderer(unittest.TestCase Line 400  class TestBaseRenderer(unittest.TestCase
400          self.to_destroy.append(map)          self.to_destroy.append(map)
401    
402          dc = MockDC()          dc = MockDC()
403          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
404    
405          renderer.render_map(map)          renderer.render_map()
406    
407          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
408                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 430  class TestBaseRenderer(unittest.TestCase Line 413  class TestBaseRenderer(unittest.TestCase
413                             ('EndDrawing',)])                             ('EndDrawing',)])
414    
415    
416        def test_point_with_classification(self):
417            """Test BaseRenderer with point layer and classification"""
418            table = MemoryTable([("type", FIELDTYPE_STRING),
419                                 ("value", FIELDTYPE_DOUBLE),
420                                 ("code", FIELDTYPE_INT)],
421                                [("UNKNOWN", 0.0, 0),
422                                 ("UNKNOWN", 0.0, 1)])
423            shapes = [[[(0, 0)]], [[(10, 10)]]]
424            store = SimpleShapeStore(SHAPETYPE_POINT, shapes, table)
425    
426            map = Map("TestBaseRenderer")
427            layer = Layer("point layer", store)
428            group = ClassGroupSingleton(1)
429            group.GetProperties().SetFill(Color(0, 0, 1))
430            layer.GetClassification().AppendGroup(group)
431            layer.SetClassificationColumn("code")
432    
433            map.AddLayer(layer)
434            self.to_destroy.append(map)
435    
436            dc = MockDC()
437            renderer = SimpleRenderer(dc, map, 2, (10, 10))
438    
439            renderer.render_map()
440    
441            self.assertEquals(dc.calls,
442                              [('BeginDrawing',),
443                               ('SetBrush', ('brush', Transparent)),
444                               ('SetPen', ('pen', Color(0, 0, 0), 1)),
445                               ('DrawEllipse', 5, 5, 10, 10),
446                               ('SetBrush', ('brush', Color(0, 0, 1))),
447                               ('SetPen', ('pen', Color(0, 0, 0), 1)),
448                               ('DrawEllipse', 25, -15, 10, 10),
449                               ('SetFont', "label font"),
450                               ('EndDrawing',)])
451    
452    
453        def test_renderer_extension(self):
454            """Test renderer with a renderer extension"""
455            class MyLayer(BaseLayer):
456                pass
457    
458            calls = []
459            def my_renderer(renderer, layer):
460                calls.append((renderer, layer))
461                return ()
462    
463            add_renderer_extension(MyLayer, my_renderer)
464    
465            try:
466                map = Map("test_renderer_extension")
467                layer = MyLayer("my layer")
468                map.AddLayer(layer)
469                self.to_destroy.append(map)
470    
471                dc = MockDC()
472                renderer = SimpleRenderer(dc, map, 2, (10, 10))
473                renderer.render_map()
474            finally:
475                init_renderer_extensions()
476    
477            self.assertEquals(calls, [(renderer, layer)])
478    
479    
480  if __name__ == "__main__":  if __name__ == "__main__":
481      support.run_tests()      support.run_tests()

Legend:
Removed from v.1552  
changed lines
  Added in v.2551

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26