blob: 651aca8b27122e722f84bc7a270568956099f996 [file] [log] [blame]
Armin Ronacherab45b842007-03-18 20:47:50 +01001# -*- 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
12import os
13import sys
14sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
15
16import py
Armin Ronacherab45b842007-03-18 20:47:50 +010017from jinja import Environment
Armin Ronacherc1e30402007-03-18 22:41:09 +010018from jinja.parser import Parser
Armin Ronacherab45b842007-03-18 20:47:50 +010019
20
Armin Ronacherc1e30402007-03-18 22:41:09 +010021class 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
38loader = GlobalLoader(globals())
Armin Ronacheree2c18e2007-04-20 22:39:04 +020039simple_env = Environment(trim_blocks=True, friendly_traceback=False, loader=loader)
Armin Ronacherab45b842007-03-18 20:47:50 +010040
41
42class 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 Ronacherc1e30402007-03-18 22:41:09 +010050 if hasattr(obj, 'func_code'):
Armin Ronacherab45b842007-03-18 20:47:50 +010051 return JinjaTestFunction(name, parent=self)
52
53
54class JinjaTestFunction(py.test.collect.Function):
55
56 def execute(self, target, *args):
Armin Ronacherc1e30402007-03-18 22:41:09 +010057 loader.scope = target.func_globals
Armin Ronacherab45b842007-03-18 20:47:50 +010058 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)