2012-06-22 16:15:10 +02:00
|
|
|
#!/usr/bin/env python
|
|
|
|
# -*- coding: utf-8 -*-
|
2010-03-19 14:42:25 +01:00
|
|
|
import itertools
|
|
|
|
import unittest
|
2011-10-27 18:00:16 +02:00
|
|
|
from nose.tools import *
|
2013-06-03 04:28:24 +02:00
|
|
|
from utilities import execution_path, run_all
|
2010-03-19 14:42:25 +01:00
|
|
|
|
2011-11-23 12:33:58 +01:00
|
|
|
import mapnik
|
2011-10-27 18:00:16 +02:00
|
|
|
from binascii import unhexlify
|
2010-03-19 14:42:25 +01:00
|
|
|
|
2012-01-24 09:27:44 +01:00
|
|
|
def test_default_constructor():
|
|
|
|
f = mapnik.Feature(mapnik.Context(),1)
|
|
|
|
eq_(f is not None,True)
|
2010-03-19 14:42:25 +01:00
|
|
|
|
2012-01-24 09:27:44 +01:00
|
|
|
def test_python_extended_constructor():
|
|
|
|
context = mapnik.Context()
|
|
|
|
context.push('foo')
|
|
|
|
context.push('foo')
|
|
|
|
f = mapnik.Feature(context,1)
|
|
|
|
wkt = 'POLYGON ((35 10, 10 20, 15 40, 45 45, 35 10),(20 30, 35 35, 30 20, 20 30))'
|
|
|
|
f.add_geometries_from_wkt(wkt)
|
|
|
|
f['foo'] = 'bar'
|
|
|
|
eq_(f['foo'], 'bar')
|
|
|
|
eq_(f.envelope(),mapnik.Box2d(10.0,10.0,45.0,45.0))
|
|
|
|
# reset
|
|
|
|
f['foo'] = u"avión"
|
|
|
|
eq_(f['foo'], u"avión")
|
|
|
|
f['foo'] = 1.4
|
|
|
|
eq_(f['foo'], 1.4)
|
|
|
|
f['foo'] = True
|
|
|
|
eq_(f['foo'], True)
|
2011-10-27 18:00:16 +02:00
|
|
|
|
2012-01-24 09:27:44 +01:00
|
|
|
def test_add_geom_wkb():
|
|
|
|
# POLYGON ((30 10, 10 20, 20 40, 40 40, 30 10))
|
|
|
|
wkb = '010300000001000000050000000000000000003e4000000000000024400000000000002440000000000000344000000000000034400000000000004440000000000000444000000000000044400000000000003e400000000000002440'
|
|
|
|
context = mapnik.Context()
|
|
|
|
f = mapnik.Feature(context,1)
|
|
|
|
eq_(len(f.geometries()), 0)
|
|
|
|
f.add_geometries_from_wkb(unhexlify(wkb))
|
|
|
|
eq_(len(f.geometries()), 1)
|
|
|
|
e = mapnik.Box2d()
|
|
|
|
eq_(e.valid(), False)
|
|
|
|
for g in f.geometries():
|
|
|
|
if not e.valid():
|
|
|
|
e = g.envelope()
|
|
|
|
else:
|
|
|
|
e +=g.envelope()
|
2012-02-24 22:13:56 +01:00
|
|
|
|
2012-01-24 09:27:44 +01:00
|
|
|
eq_(e, f.envelope())
|
2011-10-27 18:00:16 +02:00
|
|
|
|
|
|
|
def test_feature_expression_evaluation():
|
2012-01-24 09:27:44 +01:00
|
|
|
context = mapnik.Context()
|
|
|
|
context.push('name')
|
|
|
|
f = mapnik.Feature(context,1)
|
2011-10-27 18:00:16 +02:00
|
|
|
f['name'] = 'a'
|
2011-10-27 21:01:58 +02:00
|
|
|
eq_(f['name'],u'a')
|
2011-11-23 12:33:58 +01:00
|
|
|
expr = mapnik.Expression("[name]='a'")
|
2011-10-27 18:00:16 +02:00
|
|
|
evaluated = expr.evaluate(f)
|
|
|
|
eq_(evaluated,True)
|
|
|
|
num_attributes = len(f)
|
|
|
|
eq_(num_attributes,1)
|
|
|
|
eq_(f.id(),1)
|
|
|
|
|
|
|
|
# https://github.com/mapnik/mapnik/issues/933
|
|
|
|
def test_feature_expression_evaluation_missing_attr():
|
2012-01-24 09:27:44 +01:00
|
|
|
context = mapnik.Context()
|
|
|
|
context.push('name')
|
|
|
|
f = mapnik.Feature(context,1)
|
2011-10-27 21:01:58 +02:00
|
|
|
f['name'] = u'a'
|
|
|
|
eq_(f['name'],u'a')
|
2011-11-23 12:33:58 +01:00
|
|
|
expr = mapnik.Expression("[fielddoesnotexist]='a'")
|
2012-02-14 23:57:36 +01:00
|
|
|
eq_(f.has_key('fielddoesnotexist'),False)
|
|
|
|
try:
|
|
|
|
evaluated = expr.evaluate(f)
|
|
|
|
except Exception, e:
|
|
|
|
eq_("Key does not exist" in str(e),True)
|
2011-10-27 18:00:16 +02:00
|
|
|
num_attributes = len(f)
|
|
|
|
eq_(num_attributes,1)
|
|
|
|
eq_(f.id(),1)
|
|
|
|
|
|
|
|
# https://github.com/mapnik/mapnik/issues/934
|
|
|
|
def test_feature_expression_evaluation_attr_with_spaces():
|
2012-01-24 09:27:44 +01:00
|
|
|
context = mapnik.Context()
|
|
|
|
context.push('name with space')
|
|
|
|
f = mapnik.Feature(context,1)
|
2011-10-27 21:01:58 +02:00
|
|
|
f['name with space'] = u'a'
|
|
|
|
eq_(f['name with space'],u'a')
|
2011-11-23 12:33:58 +01:00
|
|
|
expr = mapnik.Expression("[name with space]='a'")
|
2011-10-29 02:06:23 +02:00
|
|
|
eq_(str(expr),"([name with space]='a')")
|
2011-10-27 18:00:16 +02:00
|
|
|
eq_(expr.evaluate(f),True)
|
|
|
|
|
2011-08-31 00:51:42 +02:00
|
|
|
if __name__ == "__main__":
|
2013-06-03 04:28:24 +02:00
|
|
|
run_all(eval(x) for x in dir() if x.startswith("test_"))
|