| Armin Ronacher | ab45b84 | 2007-03-18 20:47:50 +0100 | [diff] [blame] | 1 | # -*- coding: utf-8 -*- |
| 2 | """ |
| 3 | conftest |
| 4 | ~~~~~~~~ |
| 5 | |
| 6 | Configure py.test for support stuff. |
| 7 | |
| 8 | :copyright: 2007 by Armin Ronacher, Alexander Schremmer. |
| 9 | :license: BSD, see LICENSE for more details. |
| 10 | """ |
| 11 | |
| 12 | import os |
| 13 | import sys |
| 14 | sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) |
| 15 | |
| 16 | import py |
| Armin Ronacher | ab45b84 | 2007-03-18 20:47:50 +0100 | [diff] [blame] | 17 | from jinja import Environment |
| Armin Ronacher | c1e3040 | 2007-03-18 22:41:09 +0100 | [diff] [blame] | 18 | from jinja.parser import Parser |
| Armin Ronacher | ab45b84 | 2007-03-18 20:47:50 +0100 | [diff] [blame] | 19 | |
| 20 | |
| Armin Ronacher | c1e3040 | 2007-03-18 22:41:09 +0100 | [diff] [blame] | 21 | class GlobalLoader(object): |
| 22 | |
| 23 | def __init__(self, scope): |
| 24 | self.scope = scope |
| 25 | |
| 26 | def get_source(self, environment, name, parent, scope=None): |
| 27 | return self.scope[name.upper() + 'TEMPLATE'] |
| 28 | |
| 29 | def parse(self, environment, name, parent, scope=None): |
| 30 | return Parser(environment, self.get_source(environment, name, |
| 31 | parent, scope), name).parse() |
| 32 | |
| 33 | def load(self, environment, name, translator, scope=None): |
| 34 | return translator.process(environment, self.parse(environment, |
| 35 | name, None, scope)) |
| 36 | |
| 37 | |
| 38 | loader = GlobalLoader(globals()) |
| Armin Ronacher | ee2c18e | 2007-04-20 22:39:04 +0200 | [diff] [blame^] | 39 | simple_env = Environment(trim_blocks=True, friendly_traceback=False, loader=loader) |
| Armin Ronacher | ab45b84 | 2007-03-18 20:47:50 +0100 | [diff] [blame] | 40 | |
| 41 | |
| 42 | class Module(py.test.collect.Module): |
| 43 | |
| 44 | def __init__(self, *args, **kwargs): |
| 45 | self.env = simple_env |
| 46 | super(Module, self).__init__(*args, **kwargs) |
| 47 | |
| 48 | def join(self, name): |
| 49 | obj = getattr(self.obj, name) |
| Armin Ronacher | c1e3040 | 2007-03-18 22:41:09 +0100 | [diff] [blame] | 50 | if hasattr(obj, 'func_code'): |
| Armin Ronacher | ab45b84 | 2007-03-18 20:47:50 +0100 | [diff] [blame] | 51 | return JinjaTestFunction(name, parent=self) |
| 52 | |
| 53 | |
| 54 | class JinjaTestFunction(py.test.collect.Function): |
| 55 | |
| 56 | def execute(self, target, *args): |
| Armin Ronacher | c1e3040 | 2007-03-18 22:41:09 +0100 | [diff] [blame] | 57 | loader.scope = target.func_globals |
| Armin Ronacher | ab45b84 | 2007-03-18 20:47:50 +0100 | [diff] [blame] | 58 | co = target.func_code |
| 59 | if 'env' in co.co_varnames[:co.co_argcount]: |
| 60 | target(self.parent.env, *args) |
| 61 | else: |
| 62 | target(*args) |