def test_dbfun(self, func, tests, add_code): import re import pgmapcss.db as db config = self.eval_functions[func] ret = ''' create or replace function __eval_test__() returns setof text as $body$ import re import math ''' +\ add_code +\ resource_string(__name__, 'base.py').decode('utf-8') +\ include_text() ret += self.print() if len(tests['param_in']): for i, param_in in enumerate(tests['param_in']): ret += 'yield ' + config.compiler([repr(p) for p in param_in], '', {}) + '\n' ret += "$body$ language 'plpython3u' immutable;" conn = db.connection() conn.execute(ret) res = conn.prepare('select * from __eval_test__()') return [r[0] for r in res()]
def test_dbfun(self, func, tests, add_code): import re import pgmapcss.db as db config = self.eval_functions[func] ret = ''' create or replace function __eval_test__() returns setof text as $body$ import re import math ''' +\ add_code +\ resource_string(__name__, 'base.py').decode('utf-8') +\ include_text() ret += self.print() if len(tests['param_in']): for i, param_in in enumerate(tests['param_in']): ret += 'yield ' + config.compiler([ repr(p) for p in param_in ], '', {}) + '\n' ret += "$body$ language 'plpython3u' immutable;" conn = db.connection() conn.execute(ret) res = conn.prepare('select * from __eval_test__()') return [ r[0] for r in res() ]
def test(self, func, conf): print('* Testing %s' % func) if 'src' not in conf: return import re import pgmapcss.db as db rows = conf['src'].split('\n') ret = ''' create or replace function __eval_test__(param text[]) returns text as $body$ import re def to_float(v, default=None): try: return float(v) except ValueError: return default def float_to_str(v, default=None): r = repr(v) if r[-2:] == '.0': r = r[:-2] return r current = { 'object': { 'id': 'n123', 'tags': { 'amenity': 'restaurant', 'name': 'Foobar', 'cuisine': 'pizza;kebab;noodles' }}, 'pseudo_element': 'default', 'pseudo_elements': ['default', 'test'], 'tags': { 'amenity': 'restaurant', 'name': 'Foobar', 'cuisine': 'pizza;kebab;noodles' }, 'properties': { 'default': { 'width': '2', 'color': '#ff0000' }, 'test': { 'fill-color': '#00ff00' } } } render_context = {'bbox': '010300002031BF0D000100000005000000DBF1839BB5DC3B41E708549B2B705741DBF1839BB5DC3B41118E9739B171574182069214CCE23B41118E9739B171574182069214CCE23B41E708549B2B705741DBF1839BB5DC3B41E708549B2B705741', 'scale_denominator': 8536.77} ''' ret += self.print() ret += 'ret = eval_' + func + '(param)\n' ret += 'if type(ret) != str:\n return "not a string: " + repr(ret)\n' ret += 'return ret\n' ret += "$body$ language 'plpython3u' immutable;" conn = db.connection() conn.execute(ret) param_in = None for r in rows: m = re.match('# IN (.*)$', r) if m: param_in = eval(m.group(1)) m = re.match('# OUT (.*)$', r) if m: return_out = eval(m.group(1)) r = conn.prepare('select __eval_test__($1)'); res = r(param_in) print(' IN %s' % repr(param_in)) print(' EXP %s' % repr(return_out)) print(' OUT %s' % repr(res[0][0])) if repr(return_out) != repr(res[0][0]): raise Exception("eval-test failed!")