isolate crashing python plugin test

This commit is contained in:
Dane Springmeyer 2015-01-28 15:12:53 -08:00
parent 40cb3595a5
commit 0025225e44

View file

@ -1,160 +1,160 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# #!/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 *
# 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('.'))
# 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
)
# 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'} ),
)
)
# 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 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
# class Iterator(object):
# def __init__(self, container):
# self.container = container
centre = self.container.centre
bounds = self.container.bounds
step = self.container.step
# centre = self.container.centre
# bounds = self.container.bounds
# step = self.container.step
self.radius = 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) + '))'
# 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
# # 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()
# if all(within_circle(p) for p in (tl,tr,bl,br)):
# raise StopIteration()
self.radius += self.container.step
return ( circle, { } )
# self.radius += self.container.step
# return ( circle, { } )
def __iter__(self):
return ConcentricCircles.Iterator(self)
# 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
)
# 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)
# # 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
# self.centre_x = centre_x
# self.centre_y = centre_y
# self.step = step
def features(self, query):
centre = (self.centre_x, self.centre_y)
# def features(self, query):
# centre = (self.centre_x, self.centre_y)
return mapnik.PythonDatasource.wkt_features(
keys = (),
features = ConcentricCircles(centre, query.bbox, self.step)
)
# 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('.'))
# 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()
# 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)
# 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()
# 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)
# 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()
# 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)
# 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(),expected_im.tostring(),
'failed comparing actual (%s) and expected (%s)' % (actual,'tests/python_tests/'+ expected))
# 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(),expected_im.tostring(),
# '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(),expected_im.tostring(),
'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(),expected_im.tostring(),
# '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_"))
# if __name__ == "__main__":
# setup()
# run_all(eval(x) for x in dir() if x.startswith("test_"))