From bced671daa53647bc46d5db2e696ca48c682c6a8 Mon Sep 17 00:00:00 2001 From: Ben Darnell Date: Sun, 29 May 2011 16:07:20 -0700 Subject: [PATCH] Test template include/extend operations --- tornado/template.py | 16 ++++++++++++++++ tornado/test/template_test.py | 25 ++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/tornado/template.py b/tornado/template.py index 67b17335..465d210d 100644 --- a/tornado/template.py +++ b/tornado/template.py @@ -195,6 +195,22 @@ class Loader(object): return self.templates[name] +class DictLoader(object): + """A template loader that loads from a dictionary.""" + def __init__(self, dict): + self.dict = dict + self.templates = {} + + def reset(self): + self.templates = {} + + def load(self, name, parent_path=None): + if name not in self.templates: + self.templates[name] = Template(self.dict[name], name=name, + loader=self) + return self.templates[name] + + class _Node(object): def each_child(self): return () diff --git a/tornado/test/template_test.py b/tornado/test/template_test.py index 66a31291..d6ebc71a 100644 --- a/tornado/test/template_test.py +++ b/tornado/test/template_test.py @@ -1,4 +1,4 @@ -from tornado.template import Template +from tornado.template import Template, DictLoader from tornado.testing import LogTrapTestCase class TemplateTest(LogTrapTestCase): @@ -6,3 +6,26 @@ class TemplateTest(LogTrapTestCase): template = Template("Hello {{ name }}!") self.assertEqual(template.generate(name="Ben"), "Hello Ben!") + + def test_include(self): + loader = DictLoader({ + "index.html": '{% include "header.html" %}\nbody text', + "header.html": "header text", + }) + self.assertEqual(loader.load("index.html").generate(), + "header text\nbody text") + + def test_extends(self): + loader = DictLoader({ + "base.html": """\ +{% block title %}default title{% end %} +{% block body %}default body{% end %} +""", + "page.html": """\ +{% extends "base.html" %} +{% block title %}page title{% end %} +{% block body %}page body{% end %} +""", + }) + self.assertEqual(loader.load("page.html").generate(), + "page title\npage body\n")