Sophie

Sophie

distrib > Fedora > 13 > i386 > by-pkgid > e330a373e09114d6c619c7f76a36fb8d > files > 40

mapserver-python-5.6.3-1.fc13.i686.rpm

# $Id: symboltest.py 6522 2007-08-08 20:43:38Z hobu $
#
# Project:  MapServer
# Purpose:  xUnit style Python mapscript tests of Symbol
# Author:   Sean Gillies, sgillies@frii.com
#
# ===========================================================================
# Copyright (c) 2004, Sean Gillies
# 
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
# ===========================================================================
#
# Execute this module as a script from mapserver/mapscript/python
#
#     python tests/cases/symboltest.py -v
#
# ===========================================================================

import os, sys
import unittest
import StringIO

# the testing module helps us import the pre-installed mapscript
from testing import mapscript, MapTestCase
from testing import TESTMAPFILE, XMARKS_IMAGE, HOME_IMAGE

# ===========================================================================
# Test begins now

class SymbolTestCase(unittest.TestCase):

    def testConstructor(self):
        """create new instance of symbolObj"""
        symbol = mapscript.symbolObj('test')
        assert symbol.name == 'test'
        assert symbol.thisown == 1

    def testConstructorImage(self):
        """create new instance of symbolObj from an image"""
        symbol = mapscript.symbolObj('xmarks', XMARKS_IMAGE)
        assert symbol.name == 'xmarks'
        assert symbol.type == mapscript.MS_SYMBOL_PIXMAP
        format = mapscript.outputFormatObj('GD/PNG')
        img = symbol.getImage(format)
        img.save('sym-%s.%s' % (symbol.name, img.format.extension))

class DynamicGraphicSymbolTestCase(MapTestCase):

    def setUp(self):
        MapTestCase.setUp(self)
        f = open(HOME_IMAGE, 'rb')
        s = StringIO.StringIO(f.read())
        f.close()
        symb_img = mapscript.imageObj(s)
        self.h_symbol = mapscript.symbolObj('house')
        self.h_symbol.type = mapscript.MS_SYMBOL_PIXMAP
        self.h_symbol.setImage(symb_img)
        f = open(XMARKS_IMAGE, 'rb')
        s = StringIO.StringIO(f.read())
        f.close()
        symb_img = mapscript.imageObj(s)
        self.x_symbol = mapscript.symbolObj('xmarks')
        self.x_symbol.type = mapscript.MS_SYMBOL_PIXMAP
        self.x_symbol.setImage(symb_img)
    
    def testSetPCTImage(self):
        """set image of new symbolObj"""
        assert self.h_symbol.name == 'house'
        assert self.h_symbol.type == mapscript.MS_SYMBOL_PIXMAP
        format = mapscript.outputFormatObj('GD/PNG')
        format.transparent = mapscript.MS_ON
        img = self.h_symbol.getImage(format)
        img.save('set-%s.%s' % (self.h_symbol.name, img.format.extension))

    def testDrawSetPCTImage(self):
        """draw a map using the set image symbol"""
        symbol_index = self.map.symbolset.appendSymbol(self.h_symbol)
        assert symbol_index == 4, symbol_index
        num = self.map.symbolset.numsymbols
        assert num == 5, num
        inline_layer = self.map.getLayerByName('INLINE')
        s = inline_layer.getClass(0).getStyle(0)
        s.symbol = symbol_index
        s.size = -1 # pixmap's own size 
        inline_layer.transparency = mapscript.MS_GD_ALPHA
        img = self.map.draw()
        img.save('testDrawSetPCTImage.%s' % (img.format.extension))

    def testSetRGBAImage(self):
        """set image of new symbolObj"""
        assert self.x_symbol.name == 'xmarks'
        assert self.x_symbol.type == mapscript.MS_SYMBOL_PIXMAP
        format = mapscript.outputFormatObj('GD/PNG')
        img = self.x_symbol.getImage(format)
        img.save('set-%s.%s' % (self.x_symbol.name, img.format.extension))

    def testDrawSetRGBAImage(self):
        """draw a map using the set image symbol"""
        symbol_index = self.map.symbolset.appendSymbol(self.x_symbol)
        inline_layer = self.map.getLayerByName('INLINE')
        s = inline_layer.getClass(0).getStyle(0)
        s.symbol = symbol_index
        s.size = -1 # pixmap's own size
        inline_layer.transparency = mapscript.MS_GD_ALPHA
        self.map.selectOutputFormat('PNG24')
        img = self.map.draw()
        img.save('testDrawSetRGBAImage.%s' % (img.format.extension))

class MapSymbolTestCase(MapTestCase):
        
    def testGetPoints(self):
        """get symbol points as line and test coords"""
        symbol = self.map.symbolset.getSymbol(1)
        assert symbol.name == 'circle'
        line = symbol.getPoints()
        assert line.numpoints == 1, line.numpoints
        pt = self.getPointFromLine(line, 0)
        self.assertPointsEqual(pt, mapscript.pointObj(1.0, 1.0))
        
    def testSetPoints(self):
        """add lines of points to an existing symbol"""
        symbol = self.map.symbolset.getSymbol(1)
        assert symbol.name == 'circle'
        line = mapscript.lineObj()
        self.addPointToLine(line, mapscript.pointObj(2.0, 2.0))
        self.addPointToLine(line, mapscript.pointObj(3.0, 3.0))
        assert symbol.setPoints(line) == 2
        assert symbol.numpoints == 2
        line = symbol.getPoints()
        assert line.numpoints == 2, line.numpoints
        pt = self.getPointFromLine(line, 1)
        self.assertPointsEqual(pt, mapscript.pointObj(3.0, 3.0))
        
    def testSetStyle(self):
        """expect success after setting an existing symbol's style"""
        symbol = self.map.symbolset.getSymbol(1)
        assert symbol.setPattern(0, 1) == mapscript.MS_SUCCESS

    def testRGBASymbolInPNG24(self):
        """draw a RGBA PNG pixmap on PNG canvas"""
        self.map.setImageType('PNG24')
        #self.map.getLayerByName('INLINE-PIXMAP-RGBA').status \
        #    == mapscript.MS_DEFAULT
        img = self.map.draw()
        img.save('pixmap-rgba-24.png')

    def testRGBASymbolInJPEG(self):
        """draw a RGBA PNG pixmap on JPEG canvas"""
        self.map.setImageType('JPEG')
        #self.map.getLayerByName('INLINE-PIXMAP-RGBA').status \
        #    == mapscript.MS_DEFAULT
        img = self.map.draw()
        img.save('pixmap-rgba.jpg')


                
# ===========================================================================
# Run the tests outside of the main suite

if __name__ == '__main__':
    unittest.main()