mapnik/tests/python_tests/python_plugin_test.py

160 lines
6.1 KiB
Python

# #!/usr/bin/env python
# # -*- coding: utf-8 -*-
# import os
# import math
# import mapnik
# import sys
# from utilities import execution_path, run_all
# from nose.tools import *
# def setup():
# # All of the paths used are relative, if we run the tests
# # from another directory we need to chdir()
# os.chdir(execution_path('.'))
# class PointDatasource(mapnik.PythonDatasource):
# def __init__(self):
# super(PointDatasource, self).__init__(
# geometry_type = mapnik.DataGeometryType.Point,
# envelope = mapnik.Box2d(0,-10,100,110),
# data_type = mapnik.DataType.Vector
# )
# def features(self, query):
# return mapnik.PythonDatasource.wkt_features(
# keys = ('label',),
# features = (
# ( 'POINT (5 6)', { 'label': 'foo-bar'} ),
# ( 'POINT (60 50)', { 'label': 'buzz-quux'} ),
# )
# )
# class ConcentricCircles(object):
# def __init__(self, centre, bounds, step=1):
# self.centre = centre
# self.bounds = bounds
# self.step = step
# class Iterator(object):
# def __init__(self, container):
# self.container = container
# centre = self.container.centre
# bounds = self.container.bounds
# step = self.container.step
# self.radius = step
# def next(self):
# points = []
# for alpha in xrange(0, 361, 5):
# x = math.sin(math.radians(alpha)) * self.radius + self.container.centre[0]
# y = math.cos(math.radians(alpha)) * self.radius + self.container.centre[1]
# points.append('%s %s' % (x,y))
# circle = 'POLYGON ((' + ','.join(points) + '))'
# # has the circle grown so large that the boundary is entirely within it?
# tl = (self.container.bounds.maxx, self.container.bounds.maxy)
# tr = (self.container.bounds.maxx, self.container.bounds.maxy)
# bl = (self.container.bounds.minx, self.container.bounds.miny)
# br = (self.container.bounds.minx, self.container.bounds.miny)
# def within_circle(p):
# delta_x = p[0] - self.container.centre[0]
# delta_y = p[0] - self.container.centre[0]
# return delta_x*delta_x + delta_y*delta_y < self.radius*self.radius
# if all(within_circle(p) for p in (tl,tr,bl,br)):
# raise StopIteration()
# self.radius += self.container.step
# return ( circle, { } )
# def __iter__(self):
# return ConcentricCircles.Iterator(self)
# class CirclesDatasource(mapnik.PythonDatasource):
# def __init__(self, centre_x=-20, centre_y=0, step=10):
# super(CirclesDatasource, self).__init__(
# geometry_type = mapnik.DataGeometryType.Polygon,
# envelope = mapnik.Box2d(-180, -90, 180, 90),
# data_type = mapnik.DataType.Vector
# )
# # note that the plugin loader will set all arguments to strings and will not try to parse them
# centre_x = int(centre_x)
# centre_y = int(centre_y)
# step = int(step)
# self.centre_x = centre_x
# self.centre_y = centre_y
# self.step = step
# def features(self, query):
# centre = (self.centre_x, self.centre_y)
# return mapnik.PythonDatasource.wkt_features(
# keys = (),
# features = ConcentricCircles(centre, query.bbox, self.step)
# )
# if 'python' in mapnik.DatasourceCache.plugin_names():
# # make sure we can load from ourself as a module
# sys.path.append(execution_path('.'))
# def test_python_point_init():
# ds = mapnik.Python(factory='python_plugin_test:PointDatasource')
# e = ds.envelope()
# assert_almost_equal(e.minx, 0, places=7)
# assert_almost_equal(e.miny, -10, places=7)
# assert_almost_equal(e.maxx, 100, places=7)
# assert_almost_equal(e.maxy, 110, places=7)
# def test_python_circle_init():
# ds = mapnik.Python(factory='python_plugin_test:CirclesDatasource')
# e = ds.envelope()
# assert_almost_equal(e.minx, -180, places=7)
# assert_almost_equal(e.miny, -90, places=7)
# assert_almost_equal(e.maxx, 180, places=7)
# assert_almost_equal(e.maxy, 90, places=7)
# def test_python_circle_init_with_args():
# ds = mapnik.Python(factory='python_plugin_test:CirclesDatasource', centre_x=40, centre_y=7)
# e = ds.envelope()
# assert_almost_equal(e.minx, -180, places=7)
# assert_almost_equal(e.miny, -90, places=7)
# assert_almost_equal(e.maxx, 180, places=7)
# assert_almost_equal(e.maxy, 90, places=7)
# def test_python_point_rendering():
# m = mapnik.Map(512,512)
# mapnik.load_map(m,'../data/python_plugin/python_point_datasource.xml')
# m.zoom_all()
# im = mapnik.Image(512,512)
# mapnik.render(m,im)
# actual = '/tmp/mapnik-python-point-render1.png'
# expected = 'images/support/mapnik-python-point-render1.png'
# im.save(actual)
# expected_im = mapnik.Image.open(expected)
# eq_(im.tostring('png32'),expected_im.tostring('png32'),
# 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
# def test_python_circle_rendering():
# m = mapnik.Map(512,512)
# mapnik.load_map(m,'../data/python_plugin/python_circle_datasource.xml')
# m.zoom_all()
# im = mapnik.Image(512,512)
# mapnik.render(m,im)
# actual = '/tmp/mapnik-python-circle-render1.png'
# expected = 'images/support/mapnik-python-circle-render1.png'
# im.save(actual)
# expected_im = mapnik.Image.open(expected)
# eq_(im.tostring('png32'),expected_im.tostring('png32'),
# 'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
# if __name__ == "__main__":
# setup()
# run_all(eval(x) for x in dir() if x.startswith("test_"))