added jinja2 tests

This commit is contained in:
Lucas Tan
2014-03-09 13:53:19 +08:00
parent 01e015f759
commit f1195365ab
24 changed files with 296 additions and 12 deletions

View File

@@ -60,8 +60,8 @@ class OfflineTestCaseMixin(object):
if default_storage.exists(manifest_path):
default_storage.delete(manifest_path)
def test_offline(self):
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity)
def _test_offline(self, engine):
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity, engine=engine)
self.assertEqual(1, count)
self.assertEqual([
'<script type="text/javascript" src="/static/CACHE/js/%s.js"></script>' % (self.expected_hash, ),
@@ -69,16 +69,36 @@ class OfflineTestCaseMixin(object):
rendered_template = self.template.render(Context(settings.COMPRESS_OFFLINE_CONTEXT))
self.assertEqual(rendered_template, "".join(result) + "\n")
def test_offline_django(self):
settings.TEMPLATE_DIRS = (
os.path.join(settings.TEST_DIR, 'test_templates', self.templates_dir),
)
self._test_offline(engine="django")
def test_offline_jinja2(self):
settings.TEMPLATE_DIRS = (
os.path.join(settings.TEST_DIR, 'test_templates_jinja2', self.templates_dir),
)
self._test_offline(engine="jinja2")
class OfflineGenerationBlockSuperTestCase(OfflineTestCaseMixin, TestCase):
templates_dir = "test_block_super"
expected_hash = "7c02d201f69d"
def test_offline_jinja2(self):
# Block.super not supported for Jinja2 yet.
pass
class OfflineGenerationBlockSuperMultipleTestCase(OfflineTestCaseMixin, TestCase):
templates_dir = "test_block_super_multiple"
expected_hash = "2f6ef61c488e"
def test_offline_jinja2(self):
# Block.super not supported for Jinja2 yet.
pass
class OfflineGenerationBlockSuperMultipleWithCachedLoaderTestCase(OfflineTestCaseMixin, TestCase):
templates_dir = "test_block_super_multiple_cached"
@@ -98,12 +118,16 @@ class OfflineGenerationBlockSuperMultipleWithCachedLoaderTestCase(OfflineTestCas
super(OfflineGenerationBlockSuperMultipleWithCachedLoaderTestCase, self).tearDown()
settings.TEMPLATE_LOADERS = self._old_template_loaders
def test_offline_jinja2(self):
# Block.super not supported for Jinja2 yet.
pass
class OfflineGenerationBlockSuperTestCaseWithExtraContent(OfflineTestCaseMixin, TestCase):
templates_dir = "test_block_super_extra"
def test_offline(self):
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity)
def _test_offline(self, engine):
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity, engine=engine)
self.assertEqual(2, count)
self.assertEqual([
'<script type="text/javascript" src="/static/CACHE/js/ced14aec5856.js"></script>',
@@ -112,6 +136,10 @@ class OfflineGenerationBlockSuperTestCaseWithExtraContent(OfflineTestCaseMixin,
rendered_template = self.template.render(Context(settings.COMPRESS_OFFLINE_CONTEXT))
self.assertEqual(rendered_template, "".join(result) + "\n")
def test_offline_jinja2(self):
# Block.super not supported for Jinja2 yet.
pass
class OfflineGenerationConditionTestCase(OfflineTestCaseMixin, TestCase):
templates_dir = "test_condition"
@@ -158,9 +186,21 @@ class OfflineGenerationTestCaseWithContext(OfflineTestCaseMixin, TestCase):
class OfflineGenerationTestCaseErrors(OfflineTestCaseMixin, TestCase):
templates_dir = "test_error_handling"
def test_offline(self):
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity)
self.assertEqual(2, count)
def _test_offline(self, engine):
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity, engine=engine)
if engine == "django":
self.assertEqual(2, count)
else:
# Because we use env.parse in Jinja2Parser, the engine does not
# actually load the "extends" and "includes" templates, and so
# it is unable to detect that they are missing. So all the "compress"
# nodes are processed correctly.
self.assertEqual(4, count)
self.assertEqual(engine, "jinja2")
self.assertIn('<link rel="stylesheet" href="/static/CACHE/css/78bd7a762e2d.css" type="text/css" />', result)
self.assertIn('<link rel="stylesheet" href="/static/CACHE/css/e31030430724.css" type="text/css" />', result)
self.assertIn('<script type="text/javascript" src="/static/CACHE/js/3872c9ae3f42.js"></script>', result)
self.assertIn('<script type="text/javascript" src="/static/CACHE/js/cd8870829421.js"></script>', result)
@@ -173,7 +213,7 @@ class OfflineGenerationTestCaseWithError(OfflineTestCaseMixin, TestCase):
settings.COMPRESS_PRECOMPILERS = (('text/coffeescript', 'non-existing-binary'),)
super(OfflineGenerationTestCaseWithError, self).setUp()
def test_offline(self):
def _test_offline(self, engine):
"""
Test that a CommandError is raised with DEBUG being False as well as
True, as otherwise errors in configuration will never show in
@@ -183,10 +223,10 @@ class OfflineGenerationTestCaseWithError(OfflineTestCaseMixin, TestCase):
try:
settings.DEBUG = True
self.assertRaises(CommandError, CompressCommand().compress)
self.assertRaises(CommandError, CompressCommand().compress, engine=engine)
settings.DEBUG = False
self.assertRaises(CommandError, CompressCommand().compress)
self.assertRaises(CommandError, CompressCommand().compress, engine=engine)
finally:
settings.DEBUG = self._old_debug
@@ -257,7 +297,26 @@ class OfflineGenerationInlineNonAsciiTestCase(OfflineTestCaseMixin, TestCase):
self.COMPRESS_OFFLINE_CONTEXT = self.old_offline_context
super(OfflineGenerationInlineNonAsciiTestCase, self).tearDown()
def test_offline(self):
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity)
def _test_offline(self, engine):
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity, engine=engine)
rendered_template = self.template.render(Context(settings.COMPRESS_OFFLINE_CONTEXT))
self.assertEqual(rendered_template, "".join(result) + "\n")
class OfflineGenerationComplexTestCase(OfflineTestCaseMixin, TestCase):
templates_dir = "test_complex"
expected_hash = "0e8807bebcee"
def setUp(self):
self.old_offline_context = settings.COMPRESS_OFFLINE_CONTEXT
settings.COMPRESS_OFFLINE_CONTEXT = {
'condition': 'OK!',
# Django templating does not allow definition of tuples in the
# templates. Make sure this is same as test_templates_jinja2/test_complex.
'my_names': ("js/one.js", "js/nonasc.js"),
}
super(OfflineGenerationComplexTestCase, self).setUp()
def tearDown(self):
self.COMPRESS_OFFLINE_CONTEXT = self.old_offline_context
super(OfflineGenerationComplexTestCase, self).tearDown()

View File

@@ -0,0 +1,12 @@
{% load compress static %}{% spaceless %}
{% if condition %}
{% compress js%}
<script type="text/javascript">alert("{{ condition|default:"yellow" }}");</script>
{% with names=my_names %}
{% for name in names %}
<script type="text/javascript" src="{% static name %}"></script>
{% endfor %}
{% endwith %}
{% endcompress %}
{% endif %}{% endspaceless %}

View File

@@ -0,0 +1,8 @@
{% spaceless %}
{% compress js %}
<script type="text/javascript">
alert("Basic test");
</script>
{% endcompress %}
{% endspaceless %}

View File

@@ -0,0 +1,15 @@
{% spaceless %}
{% block js %}
<script type="text/javascript">
alert("test using block.super");
</script>
{% endblock %}
{% block css %}
<style type="text/css">
body {
background: red;
}
</style>
{% endblock %}
{% endspaceless %}

View File

@@ -0,0 +1,12 @@
{% extends "base.html" %}
{% block js %}{% spaceless %}
{% compress js %}
{{ super() }}
<script type="text/javascript">
alert("this alert shouldn't be alone!");
</script>
{% endcompress %}
{% endspaceless %}{% endblock %}
{% block css %}{% endblock %}

View File

@@ -0,0 +1,15 @@
{% spaceless %}
{% block js %}
<script type="text/javascript">
alert("test using block.super");
</script>
{% endblock %}
{% block css %}
<style type="text/css">
body {
background: red;
}
</style>
{% endblock %}
{% endspaceless %}

View File

@@ -0,0 +1,18 @@
{% extends "base.html" %}
{% block js %}{% spaceless %}
{% compress js %}
<script type="text/javascript">
alert("this alert should be alone.");
</script>
{% endcompress %}
{% compress js %}
{{ super() }}
<script type="text/javascript">
alert("this alert shouldn't be alone!");
</script>
{% endcompress %}
{% endspaceless %}{% endblock %}
{% block css %}{% endblock %}

View File

@@ -0,0 +1,15 @@
{% spaceless %}
{% block js %}
<script type="text/javascript">
alert("test using multiple inheritance and block.super");
</script>
{% endblock %}
{% block css %}
<style type="text/css">
body {
background: red;
}
</style>
{% endblock %}
{% endspaceless %}

View File

@@ -0,0 +1,3 @@
{% extends "base.html" %}
{% block css %}{% endblock %}

View File

@@ -0,0 +1,10 @@
{% extends "base2.html" %}
{% block js %}{% spaceless %}
{% compress js %}
{{ super() }}
<script type="text/javascript">
alert("this alert shouldn't be alone!");
</script>
{% endcompress %}
{% endspaceless %}{% endblock %}

View File

@@ -0,0 +1,15 @@
{% spaceless %}
{% block js %}
<script type="text/javascript">
alert("test using multiple inheritance and block.super");
</script>
{% endblock %}
{% block css %}
<style type="text/css">
body {
background: red;
}
</style>
{% endblock %}
{% endspaceless %}

View File

@@ -0,0 +1,3 @@
{% extends "base.html" %}
{% block css %}{% endblock %}

View File

@@ -0,0 +1,10 @@
{% extends "base2.html" %}
{% block js %}{% spaceless %}
{% compress js %}
{{ super() }}
<script type="text/javascript">
alert("this alert shouldn't be alone!");
</script>
{% endcompress %}
{% endspaceless %}{% endblock %}

View File

@@ -0,0 +1,14 @@
{% spaceless %}
{% if condition %}
{% compress js%}
<script type="text/javascript">alert("{{ condition|default("yellow") }}");</script>
{% with names=[] %}
{% do names.append("js/one.js") %}
{% do names.append("js/nonasc.js") %}
{% for name in names %}
<script type="text/javascript" src="{{url_for('static', filename=name)}}"></script>
{% endfor %}
{% endwith %}
{% endcompress %}
{% endif %}{% endspaceless %}

View File

@@ -0,0 +1,7 @@
{% spaceless %}
{% if condition %}
{% compress js%}
<script type="text/javascript">alert("{{ condition|default("yellow") }}");</script>
{% endcompress %}
{% endif %}{% endspaceless %}

View File

@@ -0,0 +1,9 @@
{% extends "buggy_template.html" %}
{% compress css %}
<style type="text/css">
body {
background: orange;
}
</style>
{% endcompress %}

View File

@@ -0,0 +1,10 @@
{% compress css %}
<style type="text/css">
body {
background: pink;
}
</style>
{% endcompress %}
{% fail %}

View File

@@ -0,0 +1,9 @@
{% extends "missing.html" %}
{% compress css %}
<style type="text/css">
body {
background: purple;
}
</style>
{% endcompress %}

View File

@@ -0,0 +1,8 @@
{% spaceless %}
{% compress js %}
<script type="text/javascript">
alert("Basic test, should pass in spite of errors in other templates");
</script>
{% endcompress %}
{% endspaceless %}

View File

@@ -0,0 +1,5 @@
{% compress js %}
<script type="text/coffeescript" charset="utf-8">
a = 1
</script>
{% endcompress %}

View File

@@ -0,0 +1,7 @@
{% spaceless %}
{% compress js, inline %}
<script type="text/javascript">
var value = '{{ test_non_ascii_value }}';
</script>
{% endcompress %}{% endspaceless %}

View File

@@ -0,0 +1,6 @@
{% spaceless %}
{% compress js %}
<script>alert('amazing');</script>
<script type="text/javascript" src="{{ url_for('static', filename="js/one.js") }}"></script>
{% endcompress %}{% endspaceless %}

View File

@@ -0,0 +1,7 @@
{% spaceless %}
{% compress js %}
<script type="text/javascript">
alert("{{ lower("testtemplatetag") }}");
</script>
{% endcompress %}{% endspaceless %}

View File

@@ -0,0 +1,7 @@
{% spaceless %}
{% compress js %}
<script type="text/javascript">
alert("{{ content|default("Ooops!") }}");
</script>
{% endcompress %}{% endspaceless %}