/[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 1591 by bh, Fri Aug 15 14:00:53 2003 UTC revision 2562 by jonathan, Wed Feb 16 21:14:47 2005 UTC
# Line 22  support.initthuban() Line 22  support.initthuban()
22  from Thuban.Model.color import Transparent, Color  from Thuban.Model.color import Transparent, Color
23  from Thuban.Model.data import SHAPETYPE_ARC, SHAPETYPE_POLYGON, SHAPETYPE_POINT  from Thuban.Model.data import SHAPETYPE_ARC, SHAPETYPE_POLYGON, 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  from Thuban.Model.classification import ClassGroupSingleton
29  import Thuban.Model.resource  import Thuban.Model.resource
30    
31    
32  from Thuban.UI.baserenderer import BaseRenderer  from Thuban.UI.baserenderer import BaseRenderer, \
33         add_renderer_extension, init_renderer_extensions
34    
35    from Thuban.version import versions
36    
37  class MockDC:  class MockDC:
38    
# Line 88  class SimpleRenderer(BaseRenderer): Line 90  class SimpleRenderer(BaseRenderer):
90      def label_font(self):      def label_font(self):
91          return "label font"          return "label font"
92    
93      def draw_raster_data(self, data):      def draw_raster_data(self, x, y, data, format='BMP'):
94          self.raster_data = data          self.raster_data = data
95            self.raster_format = format
96    
97    
98  class MockProjection:  class MockProjection:
# Line 137  class TestBaseRenderer(unittest.TestCase Line 140  class TestBaseRenderer(unittest.TestCase
140          map.AddLayer(layer)          map.AddLayer(layer)
141    
142          dc = MockDC()          dc = MockDC()
143          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
144    
145          renderer.render_map(map)          renderer.render_map()
146    
147          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
148                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 167  class TestBaseRenderer(unittest.TestCase Line 170  class TestBaseRenderer(unittest.TestCase
170          self.to_destroy.append(map)          self.to_destroy.append(map)
171    
172          dc = MockDC()          dc = MockDC()
173          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
174    
175          renderer.render_map(map)          renderer.render_map()
176    
177          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
178                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 206  class TestBaseRenderer(unittest.TestCase Line 209  class TestBaseRenderer(unittest.TestCase
209          self.to_destroy.append(map)          self.to_destroy.append(map)
210    
211          dc = MockDC()          dc = MockDC()
212          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
213    
214          renderer.render_map(map)          renderer.render_map()
215    
216          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
217                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 245  class TestBaseRenderer(unittest.TestCase Line 248  class TestBaseRenderer(unittest.TestCase
248          self.to_destroy.append(map)          self.to_destroy.append(map)
249    
250          dc = MockDC()          dc = MockDC()
251          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
252    
253          renderer.render_map(map)          renderer.render_map()
254    
255          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
256                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 279  class TestBaseRenderer(unittest.TestCase Line 282  class TestBaseRenderer(unittest.TestCase
282          self.to_destroy.append(map)          self.to_destroy.append(map)
283    
284          dc = MockDC(size = (20, 20))          dc = MockDC(size = (20, 20))
285          renderer = SimpleRenderer(dc, 34, (800, 2250))          renderer = SimpleRenderer(dc, map, 34, (800, 2250))
286    
287          renderer.render_map(map)          renderer.render_map()
288    
289          # The following commented out code block can be used to generate          # The following commented out code block can be used to generate
290          # the base64 coded reference image data          # the base64 coded reference image data
291          #hexed = binascii.b2a_base64(renderer.raster_data)          #hexed = binascii.b2a_base64(renderer.raster_data[2][0])
292          #while hexed:          #while hexed:
293          #    print repr(hexed[:65])              #print repr(hexed[:65])
294          #    hexed = hexed[65:]              #hexed = hexed[65:]
295    
296          # The reference data as a base64 coded BMP image          # The reference data as a base64 coded RAW image
297          raw_data = binascii.a2b_base64(          raw_data = binascii.a2b_base64(
298              'Qk3GBQAAAAAAADYEAAAoAAAAFAAAABQAAAABAAgAAAAAAJABAAAAAAAAAAAAAAABA'              'UmbmUmbmUmbmUmbmUmbmAtYCJooCAtICAq4CJooCArICAuICArICAuYCAs4COn4CO'
299              'AAAAAAAApYOAALGAgAGfjoAHmZyACZ2egAujo4AArICAE66GgACngIA5mZSAJqONg'              'n4CAq4CAuICFpICUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmAuYCAqICAqoCAqoCFp'
300              'ACzgIAAoIyABZqZgAO4uYAAtICAAKqAgAScloAAtYCADKepgAS2t4AAooiAALaAgA'              'ICJooCIo4CCpoCQnoGOn4CDpYCOn4CUmbmUmbmNo6aEpYCLoYCAqICGpICFpICUmb'
301              'CtgIAHsbOAAp2TgACogIAFtbaACqOigAidnoAAuICADKaogACfjoAAr4CAAKSFgAm'              'mAt4CUmbmNo6aAtICArYCAqoCKoYCMoICTnYKOn4CFpICUmbmUmbmUmbmUmbmAp4C'
302              'fnoAAo4eABrS1gAibnoAHsbKAAp6SgACmg4AGs7SACLCxgAqioIAAoYqAAZ6RgACm'              'NoICArYCAr4CCpoCAqYCCpoCEpYCHo4CFpICHo4CGpICFpICKoYCTnYKMoICAp4CU'
303              'goAKrK6AALmAgAC3gIAApIaABZqagACngYAAo4iAAKmAgAivsYAJoJ6AALCAgACyg'              'mbmUmbmUmbmUmbmUmbmUmbmAtYCAroCArYCCpoCAtYCAroCAtICAsYCUmbmAt4CAq'
304              'IAAq4CAAKWEgAOclYALpqeAAK6AgACgjYAEm5eAAKKKgAGekIAHmp6ABpmcgAChi4'              'YCAroCMoICAs4CAs4CAtYCAt4CAqYCUmbmUmbmUmbmUmbmAtoCAtYCAq4CAtoCBp4'
305              'ALpaaACJyegAClhYAEnJeAAZ+QgAqhoIADnZSAB5mdgACiiYAJnp6ACqGegAqrrYA'              'CAroCAqoCAq4CAr4CDpYCGpICAt4CAsICDpYCArICCpoCHo4CAs4CAuICUmbmUmbm'
306              'GmpuAB5megACkh4ALqqyAA52VgAulpYAAoI6AAZ+PgASbmIALpKWAA7m5gAWbmYAG'              'UmbmUmbmUmbmUmbmAuICAqICFpYCAq4CDpoCAqYCFpICAqYCUmbmNo6aAsYCCpoCD'
307              'mpyAC6SjgAqioYADnZOAA7q6gAianoALqauABpqagAqgnoAEnJWAAp6RgAWbmIACu'              'pYCAqICAtoCUmbmAt4CAqoCCpoCAroCHo4CAsYCAq4CAsICAs4CAp4CUmbmAtYCAq'
308              '7uACqGfgAqiooAMqauAAby8gAmusIAMp6qAC6WngAyoqoABvb2AC6SkgAS3uIAJra'              'YCIooCHo4CAsICAr4CAqICEpYCAs4CAqICArICDpYCEpYCEpYCAr4CUmbmEpYCAs4'
309              '+AB7KzgAynqIALq62ADKirgAC+voAGsrSABLi4gAG8vYADubqAC6qtgAuprIABvb6'              'CAtICAs4CAqYCUmbmAtoCAp4CCpoCDpYCAq4CArICAqoCAqYCAqYCAtYCAtoCDpYC'
310              'ACLCygAW2t4AKra+AAru8gAS4uYACuruAAry8gAG+voAAEBAAFhkZABAQEAABp6fA'              'At4CUmbmUmbmUmbmUmbmAt4CAsoCAsoCAp4CAp4CCpoCAsoCAt4CNo6aUmbmUmbmU'
311              'EBACAAAgPwAAPu/AJE9CgBACAAALj1BAEAICAAGPAAAQAgAAAY8+gBACL8AJTxXAA'              'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmAt4CAtYCCpoCAqICAroCAr4CUmbmUm'
312              'gIQAAAPEAAAAgIAAY8QABACAgAAGQAAABAAAAALpoAAEBAAAAALgAAAEAABkAGAEA'              'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb'
313              'IQAD2AEAAvwAIAJAu2ABAQEAALmQ5AEBAQAAAnp8AAEAIAAD4+gAAv78An5rDAEBA'              'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm'
314              'QAAuhAcAQEBAAAb8AABAvwAAAGQKAABAAABpLksAQEAIAC4ACwBAAAAAAPkGAAC/Q'              'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmU'
315              'AD2APoAvwC/AJ0umgBAQEAAAGRkAABAQAAGnp8AQEAIAPcA/AC/AL8A7D0GAEAIQA'              'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUm'
316              'D4hAAAv0AAAAD8QAAAvwgA92T6AL9AvwDsLlcAQEBAAC4AQABAAAgA+EAAAL8IAAA'              'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb'
317              '8AAAACAAAAJ8uVgBAQEAAAGQ5AABAQAAAnpcAAEBAAPYAQAC/AAgAnQsGAEAAQAAA'              'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm'
318              'hG0AAEBAAB38PQAIv0AA9mT6AL9AvwAJLmwAZUBAAB0AQAAIAAgAHUAAAAgIAAAAA'              'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmU'
319              'AAAAAAAAACzbAAAQEAA//k5AH+/QAAGb5cAQEBAAACy5AAAQAgAAIpAAABACAAAAA'              'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUm'
320              'AAAAAAAAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk'              'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb'
321              'JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJ'              'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm'
322              'CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJC'              'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm\n')
323              'QkJCQkJCQkJCQkJCQkJCQkJCQkyEi8aQCEJCQkJCQkJCQkJCQkJCTI7OwgILzsyCg'  
324              'kJCQkJCQkJCQkJCzcJFggvADwGEDc3EhYAMgkJCQkJEjcVJDohGj0LGgYAPT0hCT0'          #print
325              'LDyI3CQoBLwAaFgkyEC9AJAE8OgsIMjoABi8kCx4JCQkJCQkeGko8KTcLCxIyNwkJ'          #hexed = binascii.b2a_base64(renderer.raster_data[2][1])
326              'CQkWEjwWNUAQPCEAMwgJCQkJCQkSQBcvEkAPAQkyN0AMCQkJCQhBFyEvNy89JCIkM'          #while hexed:
327              'yItGQwJCQo9RxozIgkyCQoPFxAtDBkgIgkJCQkJCQkJMRoQECJQNi9EIAAgCQkJCQ'              #print repr(hexed[:61])
328              'kSUA88UAYeBjELICA8HiI=\n')              #hexed = hexed[61:]
329          self.assertEquals(renderer.raster_data, raw_data)  
330    
331            if versions['wxPython-tuple'] < (2,5,3):
332                raw_mask = binascii.a2b_base64(
333                    'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
334                    'AAAAAAAAAAAAAAAAAAA\n')
335            else:
336                raw_mask = binascii.a2b_base64(
337                    '//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P/'
338                    '/8P//8P//8P//8P//8P\n')
339    
340            self.assertEquals(renderer.raster_data,
341                              (20,20,(raw_data, raw_mask, None)))
342    
343            self.assertEquals(renderer.raster_format, "RAW")
344    
345          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
346                            [('BeginDrawing',),                            [('BeginDrawing',),
347                             ('SetFont', "label font"),                             ('SetFont', "label font"),
348                             ('EndDrawing',)])                             ('EndDrawing',)])
349    
350            if versions['wxPython-tuple'] >= (2,5,3):
351                layer.SetMaskType(layer.MASK_ALPHA)
352                renderer.render_map()
353    
354                #print
355                #hexed = binascii.b2a_base64(renderer.raster_data[2][2])
356                #while hexed:
357                    #print repr(hexed[:61])
358                    #hexed = hexed[61:]
359                raw_alpha = binascii.a2b_base64(
360                    '/////////////////////////////////////////////////////////////'
361                    '/////////////////////////////////////////////////////////////'
362                    '/////////////////////////////////////////////////////////////'
363                    '/////////////////////////////////////////////////////////////'
364                    '/////////////////////////////////////////////////////////////'
365                    '/////////////////////////////////////////////////////////////'
366                    '/////////////////////////////////////////////////////////////'
367                    '/////////////////////////////////////////////////////////////'
368                    '/////////////////////////////////////////////w==\n')
369                self.assertEquals(renderer.raster_data,
370                                  (20,20,(raw_data, None, raw_alpha)))
371    
372    
373            layer.SetMaskType(layer.MASK_NONE)
374            renderer.render_map()
375            self.assertEquals(renderer.raster_data, (20,20,(raw_data, None, None)))
376    
377      def test_point_map_projection(self):      def test_point_map_projection(self):
378          """Test BaseRenderer with point layer and map projection"""          """Test BaseRenderer with point layer and map projection"""
379          table = MemoryTable([("type", FIELDTYPE_STRING),          table = MemoryTable([("type", FIELDTYPE_STRING),
# Line 346  class TestBaseRenderer(unittest.TestCase Line 390  class TestBaseRenderer(unittest.TestCase
390          self.to_destroy.append(map)          self.to_destroy.append(map)
391    
392          dc = MockDC()          dc = MockDC()
393          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
394    
395          renderer.render_map(map)          renderer.render_map()
396    
397          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
398                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 374  class TestBaseRenderer(unittest.TestCase Line 418  class TestBaseRenderer(unittest.TestCase
418          self.to_destroy.append(map)          self.to_destroy.append(map)
419    
420          dc = MockDC()          dc = MockDC()
421          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
422    
423          renderer.render_map(map)          renderer.render_map()
424    
425          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
426                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 403  class TestBaseRenderer(unittest.TestCase Line 447  class TestBaseRenderer(unittest.TestCase
447          self.to_destroy.append(map)          self.to_destroy.append(map)
448    
449          dc = MockDC()          dc = MockDC()
450          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
451    
452          renderer.render_map(map)          renderer.render_map()
453    
454          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
455                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 437  class TestBaseRenderer(unittest.TestCase Line 481  class TestBaseRenderer(unittest.TestCase
481          self.to_destroy.append(map)          self.to_destroy.append(map)
482    
483          dc = MockDC()          dc = MockDC()
484          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
485    
486          renderer.render_map(map)          renderer.render_map()
487    
488          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
489                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 453  class TestBaseRenderer(unittest.TestCase Line 497  class TestBaseRenderer(unittest.TestCase
497                             ('EndDrawing',)])                             ('EndDrawing',)])
498    
499    
500        def test_renderer_extension(self):
501            """Test renderer with a renderer extension"""
502            class MyLayer(BaseLayer):
503                pass
504    
505            calls = []
506            def my_renderer(renderer, layer):
507                calls.append((renderer, layer))
508                return ()
509    
510            add_renderer_extension(MyLayer, my_renderer)
511    
512            try:
513                map = Map("test_renderer_extension")
514                layer = MyLayer("my layer")
515                map.AddLayer(layer)
516                self.to_destroy.append(map)
517    
518                dc = MockDC()
519                renderer = SimpleRenderer(dc, map, 2, (10, 10))
520                renderer.render_map()
521            finally:
522                init_renderer_extensions()
523    
524            self.assertEquals(calls, [(renderer, layer)])
525    
526    
527  if __name__ == "__main__":  if __name__ == "__main__":
528      support.run_tests()      support.run_tests()

Legend:
Removed from v.1591  
changed lines
  Added in v.2562

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26