@@ -0,0 +1,15 @@ | |||||
Django==1.2.3 | |||||
Genshi==0.6 | |||||
Jinja2==2.5.5 | |||||
Mako==0.3.6 | |||||
Markdown==2.0.3 | |||||
MarkupSafe==0.11 | |||||
PyYAML==3.09 | |||||
logilab-astng==0.21.0 | |||||
logilab-common==0.53.0 | |||||
lxml==2.3beta1 | |||||
nose==0.11.4 | |||||
pylint==0.22.0 | |||||
pyquery==0.6.1 | |||||
unittest2==0.5.1 | |||||
wsgiref==0.1.2 |
@@ -1,14 +0,0 @@ | |||||
""" | |||||
Hyde Template interface realization for Jinja2 | |||||
""" | |||||
from hyde.template import Template | |||||
class Jinja2Template(Template): | |||||
def configure(self, config): | |||||
""" | |||||
Uses the config object to initialize the jinja environment. | |||||
""" | |||||
pass | |||||
def render(self, template_name, context): | |||||
pass |
@@ -0,0 +1,19 @@ | |||||
""" | |||||
Hyde Template interface realization for Jinja2 | |||||
""" | |||||
from hyde.template import Template | |||||
from jinja2 import Environment, FileSystemLoader | |||||
class Jinja2Template(Template): | |||||
def configure(self, sitepath, config): | |||||
""" | |||||
Uses the config object to initialize the jinja environment. | |||||
""" | |||||
self.env = Environment(loader=FileSystemLoader(sitepath)) | |||||
def render(self, template_name, context): | |||||
""" | |||||
Renders the given template using the context | |||||
""" | |||||
t = self.env.get_template(template_name) | |||||
return t.render(context) |
@@ -78,6 +78,12 @@ class File(FS): | |||||
read_text = fin.read() | read_text = fin.read() | ||||
return read_text | return read_text | ||||
def write(self, text, encoding="utf-8"): | |||||
""" | |||||
Writes the given text to the file using the given encoding. | |||||
""" | |||||
with codecs.open(self.path, 'w', encoding) as fout: | |||||
fout.write(text) | |||||
class Folder(FS): | class Folder(FS): | ||||
""" | """ | ||||
@@ -58,5 +58,12 @@ def test_read_all(): | |||||
with codecs.open(path, 'w', 'utf-8') as f: | with codecs.open(path, 'w', 'utf-8') as f: | ||||
f.write(utxt) | f.write(utxt) | ||||
txt = File(path).read_all() | |||||
assert txt == utxt | |||||
def test_write(): | |||||
utxt = u'åßcdeƒ' | |||||
path = DATA_ROOT.child('unicode.txt') | |||||
File(path).write(utxt) | |||||
txt = File(path).read_all() | txt = File(path).read_all() | ||||
assert txt == utxt | assert txt == utxt |
@@ -3,9 +3,11 @@ | |||||
Use nose | Use nose | ||||
`$ pip install nose` | `$ pip install nose` | ||||
`$ nosetests` | `$ nosetests` | ||||
Code borrowed from rwbench.py from the jinja2 examples | |||||
""" | """ | ||||
from datetime import datetime | from datetime import datetime | ||||
from hyde.ext.templates.jinja2 import Jinja2Template | |||||
from hyde.ext.templates.jinja2Template import Jinja2Template | |||||
from hyde.fs import File, Folder | from hyde.fs import File, Folder | ||||
from jinja2.utils import generate_lorem_ipsum | from jinja2.utils import generate_lorem_ipsum | ||||
from random import choice, randrange | from random import choice, randrange | ||||
@@ -26,6 +28,8 @@ class Article(object): | |||||
self.pub_date = datetime.utcfromtimestamp(randrange(10 ** 9, 2 * 10 ** 9)) | self.pub_date = datetime.utcfromtimestamp(randrange(10 ** 9, 2 * 10 ** 9)) | ||||
self.published = True | self.published = True | ||||
def dateformat(x): | |||||
return x.strftime('%Y-%m-%d') | |||||
class User(object): | class User(object): | ||||
@@ -49,11 +53,17 @@ context = dict(users=users, articles=articles, page_navigation=navigation) | |||||
def test_render(): | def test_render(): | ||||
""" | """ | ||||
Uses the real world benchmark code from jinja. | |||||
Uses pyquery to test the html structure for validity | |||||
""" | """ | ||||
t = Jinja2Template() | t = Jinja2Template() | ||||
config = yaml.load(JINJA2.child('config.yaml')) | |||||
t.configure(None) | |||||
t.configure(JINJA2.path, None) | |||||
t.env.filters['dateformat'] = dateformat | |||||
html = t.render('index.html', context) | html = t.render('index.html', context) | ||||
expected = File(JINJA2.child('index_expected.html')).read_all() | |||||
assert_html_equals(expected, html) | |||||
from pyquery import PyQuery | |||||
actual = PyQuery(html) | |||||
assert actual(".navigation li").length == 30 | |||||
assert actual("div.article").length == 20 | |||||
assert actual("div.article h2").length == 20 | |||||
assert actual("div.article h2 a").length == 20 | |||||
assert actual("div.article p.meta").length == 20 | |||||
assert actual("div.article div.text").length == 20 |
@@ -1,6 +1,9 @@ | |||||
from django.utils.html import strip_spaces_between_tags | from django.utils.html import strip_spaces_between_tags | ||||
def assert_html_equals(expected, actual): | |||||
def assert_html_equals(expected, actual, sanitize=None): | |||||
expected = strip_spaces_between_tags(expected.strip()) | expected = strip_spaces_between_tags(expected.strip()) | ||||
actual = strip_spaces_between_tags(actual.strip()) | actual = strip_spaces_between_tags(actual.strip()) | ||||
assert expected == actual | |||||
if sanitize: | |||||
expected = sanitize(expected) | |||||
actual = sanitize(actual) | |||||
assert expected == actual |