def testModule(self): foo_node = parse(""" def func1 div ./func2 def func2 div bar/func3 """) bar_node = parse(""" def func3 div "Text" """) foo_node = NamesResolver('foo').visit(foo_node) bar_node = NamesResolver('bar').visit(bar_node) node = collect_defs([foo_node, bar_node]) env = Environ(def_types(node)) node = check(node, env) modules = split_defs(node) foo_node = modules['foo'] bar_node = modules['bar'] foo_node = NamesUnResolver('foo').visit(foo_node) bar_node = NamesUnResolver('bar').visit(bar_node) foo_module = compile_module(foo_node) _exec_in(compile(foo_module, '<kinko:foo>', 'exec'), {}) self.compareSources( dumps(foo_module), """ def func1(ctx): ctx.buffer.write('<div>') func2(ctx) ctx.buffer.write('</div>') def func2(ctx): ctx.buffer.write('<div>') ctx.lookup('bar/func3')(ctx) ctx.buffer.write('</div>') """, ) bar_module = compile_module(bar_node) _exec_in(compile(bar_module, '<kinko:bar>', 'exec'), {}) self.compareSources( dumps(bar_module), """ def func3(ctx): ctx.buffer.write('<div>Text</div>') """, )
def assertRenders(self, src, content, context=None, env=None): node = parse(src) node = check(node, Environ(env)) mod = compile_module(node) mod_code = compile(mod, '<kinko-template>', 'exec') ctx = SimpleContext(context or {}) ctx.buffer.push() ns = {} _exec_in(mod_code, ns) ns['foo'](ctx) rendered = ctx.buffer.pop() self.assertEqual(rendered, content)