/[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

trunk/thuban/test/test_baserenderer.py revision 1585 by bh, Fri Aug 15 10:26:40 2003 UTC branches/WIP-pyshapelib-bramz/test/test_baserenderer.py revision 2734 by bramz, Thu Mar 1 12:42:59 2007 UTC
# Line 1  Line 1 
1  # Copyright (C) 2003 by Intevation GmbH  # Copyright (C) 2003, 2005, 2006 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
4    # Bernhard Reiter <[email protected]>
5  #  #
6  # This program is free software under the GPL (>=v2)  # This program is free software under the GPL (>=v2)
7  # Read the file COPYING coming with the software for details.  # Read the file COPYING coming with the software for details.
# Line 14  __version__ = "$Revision$" Line 15  __version__ = "$Revision$"
15  import os  import os
16  import binascii  import binascii
17  import unittest  import unittest
18    import locale
19    
20    import localessupport
21  from mockgeo import SimpleShapeStore  from mockgeo import SimpleShapeStore
22  import support  import support
23  support.initthuban()  support.initthuban()
# Line 22  support.initthuban() Line 25  support.initthuban()
25  from Thuban.Model.color import Transparent, Color  from Thuban.Model.color import Transparent, Color
26  from Thuban.Model.data import SHAPETYPE_ARC, SHAPETYPE_POLYGON, SHAPETYPE_POINT  from Thuban.Model.data import SHAPETYPE_ARC, SHAPETYPE_POLYGON, SHAPETYPE_POINT
27  from Thuban.Model.map import Map  from Thuban.Model.map import Map
28  from Thuban.Model.layer import Layer, RasterLayer  from Thuban.Model.layer import BaseLayer, Layer, RasterLayer
29  from Thuban.Model.table import MemoryTable, \  from Thuban.Model.table import MemoryTable, \
30       FIELDTYPE_DOUBLE, FIELDTYPE_INT, FIELDTYPE_STRING       FIELDTYPE_DOUBLE, FIELDTYPE_INT, FIELDTYPE_STRING
31  from Thuban.Model.classification import ClassGroupSingleton  from Thuban.Model.classification import ClassGroupSingleton
32  import Thuban.Model.resource  import Thuban.Model.resource
33    
34    
35  from Thuban.UI.baserenderer import BaseRenderer  from Thuban.UI.baserenderer import BaseRenderer, \
36         add_renderer_extension, init_renderer_extensions
37    
38    if Thuban.Model.resource.has_gdal_support():
39        from gdalwarp import ProjectRasterFile
40    
41  class MockDC:  class MockDC:
42    
# Line 88  class SimpleRenderer(BaseRenderer): Line 94  class SimpleRenderer(BaseRenderer):
94      def label_font(self):      def label_font(self):
95          return "label font"          return "label font"
96    
97      def draw_raster_data(self, data):      def draw_raster_data(self, x, y, data, format='BMP', opacity=1.0):
98          self.raster_data = data          self.raster_data = data
99            self.raster_format = format
100    
101        def projected_raster_layer(self, layer, srcProj, dstProj, extents,
102                                   resolution, dimensions, options):
103    
104            if not Thuban.Model.resource.has_gdal_support():
105                raise support.SkipTest("No gdal support")
106    
107            #print srcProj, dstProj,extents, resolution, dimensions, options
108    
109            return ProjectRasterFile(layer.GetImageFilename(),
110                                     srcProj, dstProj,
111                                     extents, resolution, dimensions,
112                                     options)
113    
114  class MockProjection:  class MockProjection:
115    
116      """Objects that look like projections but simply apply non-uniform scalings      """Objects that look like projections but simply apply non-uniform scalings
# Line 113  class TestBaseRenderer(unittest.TestCase Line 132  class TestBaseRenderer(unittest.TestCase
132      def setUp(self):      def setUp(self):
133          """Set self.to_destroy to an empty list          """Set self.to_destroy to an empty list
134    
135          Test should put all objects whose Destroy should be called atunittest.main          Tests should put all objects whose Destroy should be called at
136          the end into this list so that they're destroyed in tearDown          the end into this list so that they're destroyed in tearDown.
137          """          """
138          self.to_destroy = []          self.to_destroy = []
139    
# Line 137  class TestBaseRenderer(unittest.TestCase Line 156  class TestBaseRenderer(unittest.TestCase
156          map.AddLayer(layer)          map.AddLayer(layer)
157    
158          dc = MockDC()          dc = MockDC()
159          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
160    
161          renderer.render_map(map)          renderer.render_map()
162    
163          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
164                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 167  class TestBaseRenderer(unittest.TestCase Line 186  class TestBaseRenderer(unittest.TestCase
186          self.to_destroy.append(map)          self.to_destroy.append(map)
187    
188          dc = MockDC()          dc = MockDC()
189          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
190    
191          renderer.render_map(map)          renderer.render_map()
192    
193          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
194                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 206  class TestBaseRenderer(unittest.TestCase Line 225  class TestBaseRenderer(unittest.TestCase
225          self.to_destroy.append(map)          self.to_destroy.append(map)
226    
227          dc = MockDC()          dc = MockDC()
228          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
229    
230          renderer.render_map(map)          renderer.render_map()
231    
232          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
233                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 245  class TestBaseRenderer(unittest.TestCase Line 264  class TestBaseRenderer(unittest.TestCase
264          self.to_destroy.append(map)          self.to_destroy.append(map)
265    
266          dc = MockDC()          dc = MockDC()
267          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
268    
269          renderer.render_map(map)          renderer.render_map()
270    
271          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
272                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 260  class TestBaseRenderer(unittest.TestCase Line 279  class TestBaseRenderer(unittest.TestCase
279                             ('SetFont', "label font"),                             ('SetFont', "label font"),
280                             ('EndDrawing',)])                             ('EndDrawing',)])
281    
282        def test_projected_raster_layer(self):
283            if not Thuban.Model.resource.has_gdal_support():
284                raise support.SkipTest("No gdal support")
285    
286            layer = RasterLayer("raster layer",
287                                os.path.join("..", "Data", "iceland",
288                                             "island.tif"))
289    
290            dc = MockDC(size = (20, 20))
291            renderer = SimpleRenderer(dc, map, 34, (800, 2250))
292    
293            # The reference data as a base64 coded RAW image
294            raw_data = binascii.a2b_base64(
295                'UmbmUmbmUmbmUmbmUmbmAtYCJooCAtICAq4CJooCArICAuICArICAuYCAs4COn4CO'
296                'n4CAq4CAuICFpICUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmAuYCAqICAqoCAqoCFp'
297                'ICJooCIo4CCpoCQnoGOn4CDpYCOn4CUmbmUmbmNo6aEpYCLoYCAqICGpICFpICUmb'
298                'mAt4CUmbmNo6aAtICArYCAqoCKoYCMoICTnYKOn4CFpICUmbmUmbmUmbmUmbmAp4C'
299                'NoICArYCAr4CCpoCAqYCCpoCEpYCHo4CFpICHo4CGpICFpICKoYCTnYKMoICAp4CU'
300                'mbmUmbmUmbmUmbmUmbmUmbmAtYCAroCArYCCpoCAtYCAroCAtICAsYCUmbmAt4CAq'
301                'YCAroCMoICAs4CAs4CAtYCAt4CAqYCUmbmUmbmUmbmUmbmAtoCAtYCAq4CAtoCBp4'
302                'CAroCAqoCAq4CAr4CDpYCGpICAt4CAsICDpYCArICCpoCHo4CAs4CAuICUmbmUmbm'
303                'UmbmUmbmUmbmUmbmAuICAqICFpYCAq4CDpoCAqYCFpICAqYCUmbmNo6aAsYCCpoCD'
304                'pYCAqICAtoCUmbmAt4CAqoCCpoCAroCHo4CAsYCAq4CAsICAs4CAp4CUmbmAtYCAq'
305                'YCIooCHo4CAsICAr4CAqICEpYCAs4CAqICArICDpYCEpYCEpYCAr4CUmbmEpYCAs4'
306                'CAtICAs4CAqYCUmbmAtoCAp4CCpoCDpYCAq4CArICAqoCAqYCAqYCAtYCAtoCDpYC'
307                'At4CUmbmUmbmUmbmUmbmAt4CAsoCAsoCAp4CAp4CCpoCAsoCAt4CNo6aUmbmUmbmU'
308                'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmAt4CAtYCCpoCAqICAroCAr4CUmbmUm'
309                'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb'
310                'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm'
311                'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmU'
312                'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUm'
313                'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb'
314                'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm'
315                'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmU'
316                'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUm'
317                'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb'
318                'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm'
319                'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm\n')
320    
321            raw_mask = binascii.a2b_base64(
322                '//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P/'
323                '/8P//8P//8P//8P//8P\n')
324    
325            raw_mask_inverted = binascii.a2b_base64(
326                'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
327                'AAAAAAAAAAAAAAAAAAA\n')
328    
329            raw_alpha = binascii.a2b_base64(
330                '/////////////////////////////////////////////////////////////'
331                '/////////////////////////////////////////////////////////////'
332                '/////////////////////////////////////////////////////////////'
333                '/////////////////////////////////////////////////////////////'
334                '/////////////////////////////////////////////////////////////'
335                '/////////////////////////////////////////////////////////////'
336                '/////////////////////////////////////////////////////////////'
337                '/////////////////////////////////////////////////////////////'
338                '/////////////////////////////////////////////w==\n')
339    
340            for opts, data in [[1,   (raw_data, raw_mask,          None)],
341                               [1|4, (raw_data, raw_mask_inverted, None)],
342                               [2,   (raw_data, None,              raw_alpha)]]:
343    
344                img_data = renderer.projected_raster_layer(layer, "", "",
345                                (-24, 65, -23, 66), [0, 0], (20, 20), opts)
346                self.assertEquals(img_data, data)
347    
348        def test_projected_raster_decimalcommalocale(self):
349            if not Thuban.Model.resource.has_gdal_support():
350                raise support.SkipTest("No gdal support")
351    
352            def _do_project_island():
353                """Project island.tif and return result."""
354                layer = RasterLayer("raster layer",
355                                    os.path.join("..", "Data", "iceland",
356                                                 "island.tif"))
357    
358                dc = MockDC(size = (10, 5))
359                renderer = SimpleRenderer(dc, map, 34, (800, 2250))
360    
361                projection = "+proj=latlong +to_meter=0.017453 +ellps=clrk66"
362                new_projection = "+proj=utm +zone=27 +ellps=clrk66"
363    
364                return renderer.projected_raster_layer(layer, \
365                                projection, new_projection, \
366                                (322003.1320390497, 6964094.1718668584, 876022.1891829354, 7460469.6276894147), [0, 0], (10,5), 1)
367    
368            oldlocale = localessupport.setdecimalcommalocale()
369            img_data2 = _do_project_island()
370            locale.setlocale(locale.LC_NUMERIC, oldlocale)
371    
372            img_data1 = _do_project_island()
373    
374            self.assertEquals(img_data1, img_data2)
375    
376      def test_raster_no_projection(self):      def test_raster_no_projection(self):
377          """Test BaseRenderer with raster layer and no projections          """Test BaseRenderer with raster layer and no projections
378    
# Line 275  class TestBaseRenderer(unittest.TestCase Line 388  class TestBaseRenderer(unittest.TestCase
388          layer = RasterLayer("raster layer",          layer = RasterLayer("raster layer",
389                              os.path.join("..", "Data", "iceland",                              os.path.join("..", "Data", "iceland",
390                                           "island.tif"))                                           "island.tif"))
391            layer.SetMaskType(layer.MASK_NONE)
392    
393          map.AddLayer(layer)          map.AddLayer(layer)
394          self.to_destroy.append(map)          self.to_destroy.append(map)
395    
396          dc = MockDC(size = (20, 20))          dc = MockDC(size = (20, 20))
397          renderer = SimpleRenderer(dc, 34, (800, 2250))          renderer = SimpleRenderer(dc, map, 34, (800, 2250))
398    
399          renderer.render_map(map)          renderer.render_map()
400    
401          # The following commented out code block can be used to generate          # The following commented out code block can be used to generate
402          # the base64 coded reference image data          # the base64 coded reference image data
403          #hexed = binascii.b2a_base64(renderer.raster_data)          #hexed = binascii.b2a_base64(renderer.raster_data[2][0])
404          #while hexed:          #while hexed:
405          #    print repr(hexed[:65])              #print repr(hexed[:65])
406          #    hexed = hexed[65:]              #hexed = hexed[65:]
407    
408          # The reference data as a base64 coded BMP image          # The reference data as a base64 coded RAW image
409          raw_data = binascii.a2b_base64(          raw_data = binascii.a2b_base64(
410              'Qk3GBQAAAAAAADYEAAAoAAAAFAAAABQAAAABAAgAAAAAAJABAAAAAAAAAAAAAAABA'              'UmbmUmbmUmbmUmbmUmbmAtYCJooCAtICAq4CJooCArICAuICArICAuYCAs4COn4CO'
411              'AAAAAAAApYOAALGAgAGfjoAHmZyACZ2egAujo4AArICAE66GgACngIA5mZSAJqONg'              'n4CAq4CAuICFpICUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmAuYCAqICAqoCAqoCFp'
412              'ACzgIAAoIyABZqZgAO4uYAAtICAAKqAgAScloAAtYCADKepgAS2t4AAooiAALaAgA'              'ICJooCIo4CCpoCQnoGOn4CDpYCOn4CUmbmUmbmNo6aEpYCLoYCAqICGpICFpICUmb'
413              'CtgIAHsbOAAp2TgACogIAFtbaACqOigAidnoAAuICADKaogACfjoAAr4CAAKSFgAm'              'mAt4CUmbmNo6aAtICArYCAqoCKoYCMoICTnYKOn4CFpICUmbmUmbmUmbmUmbmAp4C'
414              'fnoAAo4eABrS1gAibnoAHsbKAAp6SgACmg4AGs7SACLCxgAqioIAAoYqAAZ6RgACm'              'NoICArYCAr4CCpoCAqYCCpoCEpYCHo4CFpICHo4CGpICFpICKoYCTnYKMoICAp4CU'
415              'goAKrK6AALmAgAC3gIAApIaABZqagACngYAAo4iAAKmAgAivsYAJoJ6AALCAgACyg'              'mbmUmbmUmbmUmbmUmbmUmbmAtYCAroCArYCCpoCAtYCAroCAtICAsYCUmbmAt4CAq'
416              'IAAq4CAAKWEgAOclYALpqeAAK6AgACgjYAEm5eAAKKKgAGekIAHmp6ABpmcgAChi4'              'YCAroCMoICAs4CAs4CAtYCAt4CAqYCUmbmUmbmUmbmUmbmAtoCAtYCAq4CAtoCBp4'
417              'ALpaaACJyegAClhYAEnJeAAZ+QgAqhoIADnZSAB5mdgACiiYAJnp6ACqGegAqrrYA'              'CAroCAqoCAq4CAr4CDpYCGpICAt4CAsICDpYCArICCpoCHo4CAs4CAuICUmbmUmbm'
418              'GmpuAB5megACkh4ALqqyAA52VgAulpYAAoI6AAZ+PgASbmIALpKWAA7m5gAWbmYAG'              'UmbmUmbmUmbmUmbmAuICAqICFpYCAq4CDpoCAqYCFpICAqYCUmbmNo6aAsYCCpoCD'
419              'mpyAC6SjgAqioYADnZOAA7q6gAianoALqauABpqagAqgnoAEnJWAAp6RgAWbmIACu'              'pYCAqICAtoCUmbmAt4CAqoCCpoCAroCHo4CAsYCAq4CAsICAs4CAp4CUmbmAtYCAq'
420              '7uACqGfgAqiooAMqauAAby8gAmusIAMp6qAC6WngAyoqoABvb2AC6SkgAS3uIAJra'              'YCIooCHo4CAsICAr4CAqICEpYCAs4CAqICArICDpYCEpYCEpYCAr4CUmbmEpYCAs4'
421              '+AB7KzgAynqIALq62ADKirgAC+voAGsrSABLi4gAG8vYADubqAC6qtgAuprIABvb6'              'CAtICAs4CAqYCUmbmAtoCAp4CCpoCDpYCAq4CArICAqoCAqYCAqYCAtYCAtoCDpYC'
422              'ACLCygAW2t4AKra+AAru8gAS4uYACuruAAry8gAG+voAAEBAAFhkZABAQEAABp6fA'              'At4CUmbmUmbmUmbmUmbmAt4CAsoCAsoCAp4CAp4CCpoCAsoCAt4CNo6aUmbmUmbmU'
423              'EBACAAAgPwAAPu/AJE9CgBACAAALj1BAEAICAAGPAAAQAgAAAY8+gBACL8AJTxXAA'              'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmAt4CAtYCCpoCAqICAroCAr4CUmbmUm'
424              'gIQAAAPEAAAAgIAAY8QABACAgAAGQAAABAAAAALpoAAEBAAAAALgAAAEAABkAGAEA'              'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb'
425              'IQAD2AEAAvwAIAJAu2ABAQEAALmQ5AEBAQAAAnp8AAEAIAAD4+gAAv78An5rDAEBA'              'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm'
426              'QAAuhAcAQEBAAAb8AABAvwAAAGQKAABAAABpLksAQEAIAC4ACwBAAAAAAPkGAAC/Q'              'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmU'
427              'AD2APoAvwC/AJ0umgBAQEAAAGRkAABAQAAGnp8AQEAIAPcA/AC/AL8A7D0GAEAIQA'              'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUm'
428              'D4hAAAv0AAAAD8QAAAvwgA92T6AL9AvwDsLlcAQEBAAC4AQABAAAgA+EAAAL8IAAA'              'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb'
429              '8AAAACAAAAJ8uVgBAQEAAAGQ5AABAQAAAnpcAAEBAAPYAQAC/AAgAnQsGAEAAQAAA'              'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm'
430              'hG0AAEBAAB38PQAIv0AA9mT6AL9AvwAJLmwAZUBAAB0AQAAIAAgAHUAAAAgIAAAAA'              'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmU'
431              'AAAAAAAAACzbAAAQEAA//k5AH+/QAAGb5cAQEBAAACy5AAAQAgAAIpAAABACAAAAA'              'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUm'
432              'AAAAAAAAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk'              'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb'
433              'JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJ'              'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm'
434              'CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJC'              'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm\n')
435              'QkJCQkJCQkJCQkJCQkJCQkJCQkyEi8aQCEJCQkJCQkJCQkJCQkJCTI7OwgILzsyCg'  
436              'kJCQkJCQkJCQkJCzcJFggvADwGEDc3EhYAMgkJCQkJEjcVJDohGj0LGgYAPT0hCT0'          self.assertEquals(renderer.raster_data,
437              'LDyI3CQoBLwAaFgkyEC9AJAE8OgsIMjoABi8kCx4JCQkJCQkeGko8KTcLCxIyNwkJ'                            (20,20,(raw_data, None, None)))
438              'CQkWEjwWNUAQPCEAMwgJCQkJCQkSQBcvEkAPAQkyN0AMCQkJCQhBFyEvNy89JCIkM'  
439              'yItGQwJCQo9RxozIgkyCQoPFxAtDBkgIgkJCQkJCQkJMRoQECJQNi9EIAAgCQkJCQ'          self.assertEquals(renderer.raster_format, "RAW")
             'kSUA88UAYeBjELICA8HiI=\n')  
         self.assertEquals(renderer.raster_data, raw_data)  
440    
441          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
442                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 346  class TestBaseRenderer(unittest.TestCase Line 459  class TestBaseRenderer(unittest.TestCase
459          self.to_destroy.append(map)          self.to_destroy.append(map)
460    
461          dc = MockDC()          dc = MockDC()
462          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
463    
464          renderer.render_map(map)          renderer.render_map()
465    
466          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
467                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 374  class TestBaseRenderer(unittest.TestCase Line 487  class TestBaseRenderer(unittest.TestCase
487          self.to_destroy.append(map)          self.to_destroy.append(map)
488    
489          dc = MockDC()          dc = MockDC()
490          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
491    
492          renderer.render_map(map)          renderer.render_map()
493    
494          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
495                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 403  class TestBaseRenderer(unittest.TestCase Line 516  class TestBaseRenderer(unittest.TestCase
516          self.to_destroy.append(map)          self.to_destroy.append(map)
517    
518          dc = MockDC()          dc = MockDC()
519          renderer = SimpleRenderer(dc, 2, (10, 10))          renderer = SimpleRenderer(dc, map, 2, (10, 10))
520    
521          renderer.render_map(map)          renderer.render_map()
522    
523          self.assertEquals(dc.calls,          self.assertEquals(dc.calls,
524                            [('BeginDrawing',),                            [('BeginDrawing',),
# Line 416  class TestBaseRenderer(unittest.TestCase Line 529  class TestBaseRenderer(unittest.TestCase
529                             ('EndDrawing',)])                             ('EndDrawing',)])
530    
531    
532        def test_point_with_classification(self):
533            """Test BaseRenderer with point layer and classification"""
534            table = MemoryTable([("type", FIELDTYPE_STRING),
535                                 ("value", FIELDTYPE_DOUBLE),
536                                 ("code", FIELDTYPE_INT)],
537                                [("UNKNOWN", 0.0, 0),
538                                 ("UNKNOWN", 0.0, 1)])
539            shapes = [[[(0, 0)]], [[(10, 10)]]]
540            store = SimpleShapeStore(SHAPETYPE_POINT, shapes, table)
541    
542            map = Map("TestBaseRenderer")
543            layer = Layer("point layer", store)
544            group = ClassGroupSingleton(1)
545            group.GetProperties().SetFill(Color(0, 0, 1))
546            layer.GetClassification().AppendGroup(group)
547            layer.SetClassificationColumn("code")
548    
549            map.AddLayer(layer)
550            self.to_destroy.append(map)
551    
552            dc = MockDC()
553            renderer = SimpleRenderer(dc, map, 2, (10, 10))
554    
555            renderer.render_map()
556    
557            self.assertEquals(dc.calls,
558                              [('BeginDrawing',),
559                               ('SetBrush', ('brush', Transparent)),
560                               ('SetPen', ('pen', Color(0, 0, 0), 1)),
561                               ('DrawEllipse', 5, 5, 10, 10),
562                               ('SetBrush', ('brush', Color(0, 0, 1))),
563                               ('SetPen', ('pen', Color(0, 0, 0), 1)),
564                               ('DrawEllipse', 25, -15, 10, 10),
565                               ('SetFont', "label font"),
566                               ('EndDrawing',)])
567    
568    
569        def test_renderer_extension(self):
570            """Test renderer with a renderer extension"""
571            class MyLayer(BaseLayer):
572                pass
573    
574            calls = []
575            def my_renderer(renderer, layer):
576                calls.append((renderer, layer))
577                return ()
578    
579            add_renderer_extension(MyLayer, my_renderer)
580    
581            try:
582                map = Map("test_renderer_extension")
583                layer = MyLayer("my layer")
584                map.AddLayer(layer)
585                self.to_destroy.append(map)
586    
587                dc = MockDC()
588                renderer = SimpleRenderer(dc, map, 2, (10, 10))
589                renderer.render_map()
590            finally:
591                init_renderer_extensions()
592    
593            self.assertEquals(calls, [(renderer, layer)])
594    
595    
596  if __name__ == "__main__":  if __name__ == "__main__":
597      support.run_tests()      support.run_tests()

Legend:
Removed from v.1585  
changed lines
  Added in v.2734

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26