/[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 1557 by bh, Thu Aug 7 17:29:46 2003 UTC revision 2619 by jonathan, Fri May 6 14:19:03 2005 UTC
# Line 1  Line 1 
1  # Copyright (C) 2003 by Intevation GmbH  # Copyright (C) 2003, 2005 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
4  #  #
# 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 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
29  import Thuban.Model.resource  import Thuban.Model.resource
30    
 from Thuban.UI.baserenderer import BaseRenderer  
31    
32    from Thuban.UI.baserenderer import BaseRenderer, \
33         add_renderer_extension, init_renderer_extensions
34    
35    if Thuban.Model.resource.has_gdal_support():
36        from gdalwarp import ProjectRasterFile
37    
38  class MockDC:  class MockDC:
39    
# Line 85  class SimpleRenderer(BaseRenderer): Line 91  class SimpleRenderer(BaseRenderer):
91      def label_font(self):      def label_font(self):
92          return "label font"          return "label font"
93    
94      def draw_raster_data(self, data):      def draw_raster_data(self, x, y, data, format='BMP', opacity=1.0):
95          self.raster_data = data          self.raster_data = data
96            self.raster_format = format
97    
98        def projected_raster_layer(self, layer, srcProj, dstProj, extents,
99                                   resolution, dimensions, options):
100    
101  class SimpleShape:          if not Thuban.Model.resource.has_gdal_support():
102                raise support.SkipTest("No gdal support")
     def __init__(self, points):  
         self.points = points  
   
     def Points(self):  
         return self.points  
   
 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 SimpleShape(self.shapes[index])  
103    
104            #print srcProj, dstProj,extents, resolution, dimensions, options
105    
106            return ProjectRasterFile(layer.GetImageFilename(),
107                                     srcProj, dstProj,
108                                     extents, resolution, dimensions,
109                                     options)
110    
111  class MockProjection:  class MockProjection:
112    
113      """Objects that look like projections but simply apply non-uniform scalings      """Objects that look like projections but simply apply non-uniform scalings
# Line 139  class TestBaseRenderer(unittest.TestCase Line 129  class TestBaseRenderer(unittest.TestCase
129      def setUp(self):      def setUp(self):
130          """Set self.to_destroy to an empty list          """Set self.to_destroy to an empty list
131    
132          Test should put all objects whose Destroy should be called atunittest.main          Tests should put all objects whose Destroy should be called at
133          the end into this list so that they're destroyed in tearDown          the end into this list so that they're destroyed in tearDown.
134          """          """
135          self.to_destroy = []          self.to_destroy = []
136    
# Line 163  class TestBaseRenderer(unittest.TestCase Line 153  class TestBaseRenderer(unittest.TestCase
153          map.AddLayer(layer)          map.AddLayer(layer)
154    
155          dc = MockDC()          dc = MockDC()
156          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
157    
158          renderer.render_map(map)          renderer.render_map()
159    
160          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
161                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 193  class TestBaseRenderer(unittest.TestCase Line 183  class TestBaseRenderer(unittest.TestCase
183          self.to_destroy.append(map)          self.to_destroy.append(map)
184    
185          dc = MockDC()          dc = MockDC()
186          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
187    
188          renderer.render_map(map)          renderer.render_map()
189    
190          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
191                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 232  class TestBaseRenderer(unittest.TestCase Line 222  class TestBaseRenderer(unittest.TestCase
222          self.to_destroy.append(map)          self.to_destroy.append(map)
223    
224          dc = MockDC()          dc = MockDC()
225          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
226    
227          renderer.render_map(map)          renderer.render_map()
228    
229          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
230                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 271  class TestBaseRenderer(unittest.TestCase Line 261  class TestBaseRenderer(unittest.TestCase
261          self.to_destroy.append(map)          self.to_destroy.append(map)
262    
263          dc = MockDC()          dc = MockDC()
264          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
265    
266          renderer.render_map(map)          renderer.render_map()
267    
268          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
269                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 286  class TestBaseRenderer(unittest.TestCase Line 276  class TestBaseRenderer(unittest.TestCase
276                             ('SetFont', "label font"),                             ('SetFont', "label font"),
277                             ('EndDrawing',)])                             ('EndDrawing',)])
278    
279        def test_projected_raster_layer(self):
280            if not Thuban.Model.resource.has_gdal_support():
281                raise support.SkipTest("No gdal support")
282    
283            layer = RasterLayer("raster layer",
284                                os.path.join("..", "Data", "iceland",
285                                             "island.tif"))
286    
287            dc = MockDC(size = (20, 20))
288            renderer = SimpleRenderer(dc, map, 34, (800, 2250))
289    
290            # The reference data as a base64 coded RAW image
291            raw_data = binascii.a2b_base64(
292                'UmbmUmbmUmbmUmbmUmbmAtYCJooCAtICAq4CJooCArICAuICArICAuYCAs4COn4CO'
293                'n4CAq4CAuICFpICUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmAuYCAqICAqoCAqoCFp'
294                'ICJooCIo4CCpoCQnoGOn4CDpYCOn4CUmbmUmbmNo6aEpYCLoYCAqICGpICFpICUmb'
295                'mAt4CUmbmNo6aAtICArYCAqoCKoYCMoICTnYKOn4CFpICUmbmUmbmUmbmUmbmAp4C'
296                'NoICArYCAr4CCpoCAqYCCpoCEpYCHo4CFpICHo4CGpICFpICKoYCTnYKMoICAp4CU'
297                'mbmUmbmUmbmUmbmUmbmUmbmAtYCAroCArYCCpoCAtYCAroCAtICAsYCUmbmAt4CAq'
298                'YCAroCMoICAs4CAs4CAtYCAt4CAqYCUmbmUmbmUmbmUmbmAtoCAtYCAq4CAtoCBp4'
299                'CAroCAqoCAq4CAr4CDpYCGpICAt4CAsICDpYCArICCpoCHo4CAs4CAuICUmbmUmbm'
300                'UmbmUmbmUmbmUmbmAuICAqICFpYCAq4CDpoCAqYCFpICAqYCUmbmNo6aAsYCCpoCD'
301                'pYCAqICAtoCUmbmAt4CAqoCCpoCAroCHo4CAsYCAq4CAsICAs4CAp4CUmbmAtYCAq'
302                'YCIooCHo4CAsICAr4CAqICEpYCAs4CAqICArICDpYCEpYCEpYCAr4CUmbmEpYCAs4'
303                'CAtICAs4CAqYCUmbmAtoCAp4CCpoCDpYCAq4CArICAqoCAqYCAqYCAtYCAtoCDpYC'
304                'At4CUmbmUmbmUmbmUmbmAt4CAsoCAsoCAp4CAp4CCpoCAsoCAt4CNo6aUmbmUmbmU'
305                'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmAt4CAtYCCpoCAqICAroCAr4CUmbmUm'
306                'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb'
307                'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm'
308                'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmU'
309                'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUm'
310                'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb'
311                'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm'
312                'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmU'
313                'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUm'
314                'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb'
315                'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm'
316                'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm\n')
317    
318            raw_mask = binascii.a2b_base64(
319                '//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P/'
320                '/8P//8P//8P//8P//8P\n')
321    
322            raw_mask_inverted = binascii.a2b_base64(
323                'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
324                'AAAAAAAAAAAAAAAAAAA\n')
325    
326            raw_alpha = binascii.a2b_base64(
327                '/////////////////////////////////////////////////////////////'
328                '/////////////////////////////////////////////////////////////'
329                '/////////////////////////////////////////////////////////////'
330                '/////////////////////////////////////////////////////////////'
331                '/////////////////////////////////////////////////////////////'
332                '/////////////////////////////////////////////////////////////'
333                '/////////////////////////////////////////////////////////////'
334                '/////////////////////////////////////////////////////////////'
335                '/////////////////////////////////////////////w==\n')
336    
337            for opts, data in [[1,   (raw_data, raw_mask,          None)],
338                               [1|4, (raw_data, raw_mask_inverted, None)],
339                               [2,   (raw_data, None,              raw_alpha)]]:
340    
341                img_data = renderer.projected_raster_layer(layer, "", "",
342                                (-24, 65, -23, 66), [0, 0], (20, 20), opts)
343                self.assertEquals(img_data, data)
344    
345      def test_raster_no_projection(self):      def test_raster_no_projection(self):
346          """Test BaseRenderer with raster layer and no projections          """Test BaseRenderer with raster layer and no projections
347    
# Line 301  class TestBaseRenderer(unittest.TestCase Line 357  class TestBaseRenderer(unittest.TestCase
357          layer = RasterLayer("raster layer",          layer = RasterLayer("raster layer",
358                              os.path.join("..", "Data", "iceland",                              os.path.join("..", "Data", "iceland",
359                                           "island.tif"))                                           "island.tif"))
360            layer.SetMaskType(layer.MASK_NONE)
361    
362          map.AddLayer(layer)          map.AddLayer(layer)
363          self.to_destroy.append(map)          self.to_destroy.append(map)
364    
365          dc = MockDC(size = (20, 20))          dc = MockDC(size = (20, 20))
366          renderer = SimpleRenderer(dc, 34, (800, 2250))          renderer = SimpleRenderer(dc, map, 34, (800, 2250))
367    
368          renderer.render_map(map)          renderer.render_map()
369    
370          # The following commented out code block can be used to generate          # The following commented out code block can be used to generate
371          # the base64 coded reference image data          # the base64 coded reference image data
372          #hexed = binascii.b2a_base64(renderer.raster_data)          #hexed = binascii.b2a_base64(renderer.raster_data[2][0])
373          #while hexed:          #while hexed:
374          #    print repr(hexed[:65])              #print repr(hexed[:65])
375          #    hexed = hexed[65:]              #hexed = hexed[65:]
376    
377          # The reference data as a base64 coded BMP image          # The reference data as a base64 coded RAW image
378          raw_data = binascii.a2b_base64(          raw_data = binascii.a2b_base64(
379              'Qk3GBQAAAAAAADYEAAAoAAAAFAAAABQAAAABAAgAAAAAAJABAAAAAAAAAAAAAAABA'              'UmbmUmbmUmbmUmbmUmbmAtYCJooCAtICAq4CJooCArICAuICArICAuYCAs4COn4CO'
380              'AAAAAAAApYOAALGAgAGfjoAHmZyACZ2egAujo4AArICAE66GgACngIA5mZSAJqONg'              'n4CAq4CAuICFpICUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmAuYCAqICAqoCAqoCFp'
381              'ACzgIAAoIyABZqZgAO4uYAAtICAAKqAgAScloAAtYCADKepgAS2t4AAooiAALaAgA'              'ICJooCIo4CCpoCQnoGOn4CDpYCOn4CUmbmUmbmNo6aEpYCLoYCAqICGpICFpICUmb'
382              'CtgIAHsbOAAp2TgACogIAFtbaACqOigAidnoAAuICADKaogACfjoAAr4CAAKSFgAm'              'mAt4CUmbmNo6aAtICArYCAqoCKoYCMoICTnYKOn4CFpICUmbmUmbmUmbmUmbmAp4C'
383              'fnoAAo4eABrS1gAibnoAHsbKAAp6SgACmg4AGs7SACLCxgAqioIAAoYqAAZ6RgACm'              'NoICArYCAr4CCpoCAqYCCpoCEpYCHo4CFpICHo4CGpICFpICKoYCTnYKMoICAp4CU'
384              'goAKrK6AALmAgAC3gIAApIaABZqagACngYAAo4iAAKmAgAivsYAJoJ6AALCAgACyg'              'mbmUmbmUmbmUmbmUmbmUmbmAtYCAroCArYCCpoCAtYCAroCAtICAsYCUmbmAt4CAq'
385              'IAAq4CAAKWEgAOclYALpqeAAK6AgACgjYAEm5eAAKKKgAGekIAHmp6ABpmcgAChi4'              'YCAroCMoICAs4CAs4CAtYCAt4CAqYCUmbmUmbmUmbmUmbmAtoCAtYCAq4CAtoCBp4'
386              'ALpaaACJyegAClhYAEnJeAAZ+QgAqhoIADnZSAB5mdgACiiYAJnp6ACqGegAqrrYA'              'CAroCAqoCAq4CAr4CDpYCGpICAt4CAsICDpYCArICCpoCHo4CAs4CAuICUmbmUmbm'
387              'GmpuAB5megACkh4ALqqyAA52VgAulpYAAoI6AAZ+PgASbmIALpKWAA7m5gAWbmYAG'              'UmbmUmbmUmbmUmbmAuICAqICFpYCAq4CDpoCAqYCFpICAqYCUmbmNo6aAsYCCpoCD'
388              'mpyAC6SjgAqioYADnZOAA7q6gAianoALqauABpqagAqgnoAEnJWAAp6RgAWbmIACu'              'pYCAqICAtoCUmbmAt4CAqoCCpoCAroCHo4CAsYCAq4CAsICAs4CAp4CUmbmAtYCAq'
389              '7uACqGfgAqiooAMqauAAby8gAmusIAMp6qAC6WngAyoqoABvb2AC6SkgAS3uIAJra'              'YCIooCHo4CAsICAr4CAqICEpYCAs4CAqICArICDpYCEpYCEpYCAr4CUmbmEpYCAs4'
390              '+AB7KzgAynqIALq62ADKirgAC+voAGsrSABLi4gAG8vYADubqAC6qtgAuprIABvb6'              'CAtICAs4CAqYCUmbmAtoCAp4CCpoCDpYCAq4CArICAqoCAqYCAqYCAtYCAtoCDpYC'
391              'ACLCygAW2t4AKra+AAru8gAS4uYACuruAAry8gAG+voAAEBAAFhkZABAQEAABp6fA'              'At4CUmbmUmbmUmbmUmbmAt4CAsoCAsoCAp4CAp4CCpoCAsoCAt4CNo6aUmbmUmbmU'
392              'EBACAAAgPwAAPu/AJE9CgBACAAALj1BAEAICAAGPAAAQAgAAAY8+gBACL8AJTxXAA'              'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmAt4CAtYCCpoCAqICAroCAr4CUmbmUm'
393              'gIQAAAPEAAAAgIAAY8QABACAgAAGQAAABAAAAALpoAAEBAAAAALgAAAEAABkAGAEA'              'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb'
394              'IQAD2AEAAvwAIAJAu2ABAQEAALmQ5AEBAQAAAnp8AAEAIAAD4+gAAv78An5rDAEBA'              'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm'
395              'QAAuhAcAQEBAAAb8AABAvwAAAGQKAABAAABpLksAQEAIAC4ACwBAAAAAAPkGAAC/Q'              'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmU'
396              'AD2APoAvwC/AJ0umgBAQEAAAGRkAABAQAAGnp8AQEAIAPcA/AC/AL8A7D0GAEAIQA'              'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUm'
397              'D4hAAAv0AAAAD8QAAAvwgA92T6AL9AvwDsLlcAQEBAAC4AQABAAAgA+EAAAL8IAAA'              'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb'
398              '8AAAACAAAAJ8uVgBAQEAAAGQ5AABAQAAAnpcAAEBAAPYAQAC/AAgAnQsGAEAAQAAA'              'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm'
399              'hG0AAEBAAB38PQAIv0AA9mT6AL9AvwAJLmwAZUBAAB0AQAAIAAgAHUAAAAgIAAAAA'              'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmU'
400              'AAAAAAAAACzbAAAQEAA//k5AH+/QAAGb5cAQEBAAACy5AAAQAgAAIpAAABACAAAAA'              'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUm'
401              'AAAAAAAAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk'              'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb'
402              'JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJ'              'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm'
403              'CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJC'              'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm\n')
404              'QkJCQkJCQkJCQkJCQkJCQkJCQkyEi8aQCEJCQkJCQkJCQkJCQkJCTI7OwgILzsyCg'  
405              'kJCQkJCQkJCQkJCzcJFggvADwGEDc3EhYAMgkJCQkJEjcVJDohGj0LGgYAPT0hCT0'          self.assertEquals(renderer.raster_data,
406              'LDyI3CQoBLwAaFgkyEC9AJAE8OgsIMjoABi8kCx4JCQkJCQkeGko8KTcLCxIyNwkJ'                            (20,20,(raw_data, None, None)))
407              'CQkWEjwWNUAQPCEAMwgJCQkJCQkSQBcvEkAPAQkyN0AMCQkJCQhBFyEvNy89JCIkM'  
408              'yItGQwJCQo9RxozIgkyCQoPFxAtDBkgIgkJCQkJCQkJMRoQECJQNi9EIAAgCQkJCQ'          self.assertEquals(renderer.raster_format, "RAW")
             'kSUA88UAYeBjELICA8HiI=\n')  
         self.assertEquals(renderer.raster_data, raw_data)  
409    
410          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
411                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 372  class TestBaseRenderer(unittest.TestCase Line 428  class TestBaseRenderer(unittest.TestCase
428          self.to_destroy.append(map)          self.to_destroy.append(map)
429    
430          dc = MockDC()          dc = MockDC()
431          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
432    
433          renderer.render_map(map)          renderer.render_map()
434    
435          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
436                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 400  class TestBaseRenderer(unittest.TestCase Line 456  class TestBaseRenderer(unittest.TestCase
456          self.to_destroy.append(map)          self.to_destroy.append(map)
457    
458          dc = MockDC()          dc = MockDC()
459          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
460    
461          renderer.render_map(map)          renderer.render_map()
462    
463          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
464                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 429  class TestBaseRenderer(unittest.TestCase Line 485  class TestBaseRenderer(unittest.TestCase
485          self.to_destroy.append(map)          self.to_destroy.append(map)
486    
487          dc = MockDC()          dc = MockDC()
488          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
489    
490          renderer.render_map(map)          renderer.render_map()
491    
492          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
493                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 442  class TestBaseRenderer(unittest.TestCase Line 498  class TestBaseRenderer(unittest.TestCase
498                             ('EndDrawing',)])                             ('EndDrawing',)])
499    
500    
501        def test_point_with_classification(self):
502            """Test BaseRenderer with point layer and classification"""
503            table = MemoryTable([("type", FIELDTYPE_STRING),
504                                 ("value", FIELDTYPE_DOUBLE),
505                                 ("code", FIELDTYPE_INT)],
506                                [("UNKNOWN", 0.0, 0),
507                                 ("UNKNOWN", 0.0, 1)])
508            shapes = [[[(0, 0)]], [[(10, 10)]]]
509            store = SimpleShapeStore(SHAPETYPE_POINT, shapes, table)
510    
511            map = Map("TestBaseRenderer")
512            layer = Layer("point layer", store)
513            group = ClassGroupSingleton(1)
514            group.GetProperties().SetFill(Color(0, 0, 1))
515            layer.GetClassification().AppendGroup(group)
516            layer.SetClassificationColumn("code")
517    
518            map.AddLayer(layer)
519            self.to_destroy.append(map)
520    
521            dc = MockDC()
522            renderer = SimpleRenderer(dc, map, 2, (10, 10))
523    
524            renderer.render_map()
525    
526            self.assertEquals(dc.calls,
527                              [('BeginDrawing',),
528                               ('SetBrush', ('brush', Transparent)),
529                               ('SetPen', ('pen', Color(0, 0, 0), 1)),
530                               ('DrawEllipse', 5, 5, 10, 10),
531                               ('SetBrush', ('brush', Color(0, 0, 1))),
532                               ('SetPen', ('pen', Color(0, 0, 0), 1)),
533                               ('DrawEllipse', 25, -15, 10, 10),
534                               ('SetFont', "label font"),
535                               ('EndDrawing',)])
536    
537    
538        def test_renderer_extension(self):
539            """Test renderer with a renderer extension"""
540            class MyLayer(BaseLayer):
541                pass
542    
543            calls = []
544            def my_renderer(renderer, layer):
545                calls.append((renderer, layer))
546                return ()
547    
548            add_renderer_extension(MyLayer, my_renderer)
549    
550            try:
551                map = Map("test_renderer_extension")
552                layer = MyLayer("my layer")
553                map.AddLayer(layer)
554                self.to_destroy.append(map)
555    
556                dc = MockDC()
557                renderer = SimpleRenderer(dc, map, 2, (10, 10))
558                renderer.render_map()
559            finally:
560                init_renderer_extensions()
561    
562            self.assertEquals(calls, [(renderer, layer)])
563    
564    
565  if __name__ == "__main__":  if __name__ == "__main__":
566      support.run_tests()      support.run_tests()

Legend:
Removed from v.1557  
changed lines
  Added in v.2619

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26