added jinja2 tests
This commit is contained in:
@@ -60,8 +60,8 @@ class OfflineTestCaseMixin(object):
|
|||||||
if default_storage.exists(manifest_path):
|
if default_storage.exists(manifest_path):
|
||||||
default_storage.delete(manifest_path)
|
default_storage.delete(manifest_path)
|
||||||
|
|
||||||
def test_offline(self):
|
def _test_offline(self, engine):
|
||||||
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity)
|
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity, engine=engine)
|
||||||
self.assertEqual(1, count)
|
self.assertEqual(1, count)
|
||||||
self.assertEqual([
|
self.assertEqual([
|
||||||
'<script type="text/javascript" src="/static/CACHE/js/%s.js"></script>' % (self.expected_hash, ),
|
'<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))
|
rendered_template = self.template.render(Context(settings.COMPRESS_OFFLINE_CONTEXT))
|
||||||
self.assertEqual(rendered_template, "".join(result) + "\n")
|
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):
|
class OfflineGenerationBlockSuperTestCase(OfflineTestCaseMixin, TestCase):
|
||||||
templates_dir = "test_block_super"
|
templates_dir = "test_block_super"
|
||||||
expected_hash = "7c02d201f69d"
|
expected_hash = "7c02d201f69d"
|
||||||
|
|
||||||
|
def test_offline_jinja2(self):
|
||||||
|
# Block.super not supported for Jinja2 yet.
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class OfflineGenerationBlockSuperMultipleTestCase(OfflineTestCaseMixin, TestCase):
|
class OfflineGenerationBlockSuperMultipleTestCase(OfflineTestCaseMixin, TestCase):
|
||||||
templates_dir = "test_block_super_multiple"
|
templates_dir = "test_block_super_multiple"
|
||||||
expected_hash = "2f6ef61c488e"
|
expected_hash = "2f6ef61c488e"
|
||||||
|
|
||||||
|
def test_offline_jinja2(self):
|
||||||
|
# Block.super not supported for Jinja2 yet.
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class OfflineGenerationBlockSuperMultipleWithCachedLoaderTestCase(OfflineTestCaseMixin, TestCase):
|
class OfflineGenerationBlockSuperMultipleWithCachedLoaderTestCase(OfflineTestCaseMixin, TestCase):
|
||||||
templates_dir = "test_block_super_multiple_cached"
|
templates_dir = "test_block_super_multiple_cached"
|
||||||
@@ -98,12 +118,16 @@ class OfflineGenerationBlockSuperMultipleWithCachedLoaderTestCase(OfflineTestCas
|
|||||||
super(OfflineGenerationBlockSuperMultipleWithCachedLoaderTestCase, self).tearDown()
|
super(OfflineGenerationBlockSuperMultipleWithCachedLoaderTestCase, self).tearDown()
|
||||||
settings.TEMPLATE_LOADERS = self._old_template_loaders
|
settings.TEMPLATE_LOADERS = self._old_template_loaders
|
||||||
|
|
||||||
|
def test_offline_jinja2(self):
|
||||||
|
# Block.super not supported for Jinja2 yet.
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class OfflineGenerationBlockSuperTestCaseWithExtraContent(OfflineTestCaseMixin, TestCase):
|
class OfflineGenerationBlockSuperTestCaseWithExtraContent(OfflineTestCaseMixin, TestCase):
|
||||||
templates_dir = "test_block_super_extra"
|
templates_dir = "test_block_super_extra"
|
||||||
|
|
||||||
def test_offline(self):
|
def _test_offline(self, engine):
|
||||||
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity)
|
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity, engine=engine)
|
||||||
self.assertEqual(2, count)
|
self.assertEqual(2, count)
|
||||||
self.assertEqual([
|
self.assertEqual([
|
||||||
'<script type="text/javascript" src="/static/CACHE/js/ced14aec5856.js"></script>',
|
'<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))
|
rendered_template = self.template.render(Context(settings.COMPRESS_OFFLINE_CONTEXT))
|
||||||
self.assertEqual(rendered_template, "".join(result) + "\n")
|
self.assertEqual(rendered_template, "".join(result) + "\n")
|
||||||
|
|
||||||
|
def test_offline_jinja2(self):
|
||||||
|
# Block.super not supported for Jinja2 yet.
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class OfflineGenerationConditionTestCase(OfflineTestCaseMixin, TestCase):
|
class OfflineGenerationConditionTestCase(OfflineTestCaseMixin, TestCase):
|
||||||
templates_dir = "test_condition"
|
templates_dir = "test_condition"
|
||||||
@@ -158,9 +186,21 @@ class OfflineGenerationTestCaseWithContext(OfflineTestCaseMixin, TestCase):
|
|||||||
class OfflineGenerationTestCaseErrors(OfflineTestCaseMixin, TestCase):
|
class OfflineGenerationTestCaseErrors(OfflineTestCaseMixin, TestCase):
|
||||||
templates_dir = "test_error_handling"
|
templates_dir = "test_error_handling"
|
||||||
|
|
||||||
def test_offline(self):
|
def _test_offline(self, engine):
|
||||||
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity)
|
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity, engine=engine)
|
||||||
self.assertEqual(2, count)
|
|
||||||
|
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/3872c9ae3f42.js"></script>', result)
|
||||||
self.assertIn('<script type="text/javascript" src="/static/CACHE/js/cd8870829421.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'),)
|
settings.COMPRESS_PRECOMPILERS = (('text/coffeescript', 'non-existing-binary'),)
|
||||||
super(OfflineGenerationTestCaseWithError, self).setUp()
|
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
|
Test that a CommandError is raised with DEBUG being False as well as
|
||||||
True, as otherwise errors in configuration will never show in
|
True, as otherwise errors in configuration will never show in
|
||||||
@@ -183,10 +223,10 @@ class OfflineGenerationTestCaseWithError(OfflineTestCaseMixin, TestCase):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
settings.DEBUG = True
|
settings.DEBUG = True
|
||||||
self.assertRaises(CommandError, CompressCommand().compress)
|
self.assertRaises(CommandError, CompressCommand().compress, engine=engine)
|
||||||
|
|
||||||
settings.DEBUG = False
|
settings.DEBUG = False
|
||||||
self.assertRaises(CommandError, CompressCommand().compress)
|
self.assertRaises(CommandError, CompressCommand().compress, engine=engine)
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
settings.DEBUG = self._old_debug
|
settings.DEBUG = self._old_debug
|
||||||
@@ -257,7 +297,26 @@ class OfflineGenerationInlineNonAsciiTestCase(OfflineTestCaseMixin, TestCase):
|
|||||||
self.COMPRESS_OFFLINE_CONTEXT = self.old_offline_context
|
self.COMPRESS_OFFLINE_CONTEXT = self.old_offline_context
|
||||||
super(OfflineGenerationInlineNonAsciiTestCase, self).tearDown()
|
super(OfflineGenerationInlineNonAsciiTestCase, self).tearDown()
|
||||||
|
|
||||||
def test_offline(self):
|
def _test_offline(self, engine):
|
||||||
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity)
|
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity, engine=engine)
|
||||||
rendered_template = self.template.render(Context(settings.COMPRESS_OFFLINE_CONTEXT))
|
rendered_template = self.template.render(Context(settings.COMPRESS_OFFLINE_CONTEXT))
|
||||||
self.assertEqual(rendered_template, "".join(result) + "\n")
|
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()
|
||||||
|
|||||||
@@ -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 %}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{% spaceless %}
|
||||||
|
|
||||||
|
{% compress js %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
alert("Basic test");
|
||||||
|
</script>
|
||||||
|
{% endcompress %}
|
||||||
|
{% endspaceless %}
|
||||||
@@ -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 %}
|
||||||
@@ -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 %}
|
||||||
@@ -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 %}
|
||||||
@@ -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 %}
|
||||||
@@ -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 %}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block css %}{% endblock %}
|
||||||
@@ -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 %}
|
||||||
@@ -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 %}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block css %}{% endblock %}
|
||||||
@@ -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 %}
|
||||||
@@ -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 %}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{% spaceless %}
|
||||||
|
|
||||||
|
{% if condition %}
|
||||||
|
{% compress js%}
|
||||||
|
<script type="text/javascript">alert("{{ condition|default("yellow") }}");</script>
|
||||||
|
{% endcompress %}
|
||||||
|
{% endif %}{% endspaceless %}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{% extends "buggy_template.html" %}
|
||||||
|
|
||||||
|
{% compress css %}
|
||||||
|
<style type="text/css">
|
||||||
|
body {
|
||||||
|
background: orange;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
{% endcompress %}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{% compress css %}
|
||||||
|
<style type="text/css">
|
||||||
|
body {
|
||||||
|
background: pink;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
{% endcompress %}
|
||||||
|
|
||||||
|
|
||||||
|
{% fail %}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{% extends "missing.html" %}
|
||||||
|
|
||||||
|
{% compress css %}
|
||||||
|
<style type="text/css">
|
||||||
|
body {
|
||||||
|
background: purple;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
{% endcompress %}
|
||||||
@@ -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 %}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{% compress js %}
|
||||||
|
<script type="text/coffeescript" charset="utf-8">
|
||||||
|
a = 1
|
||||||
|
</script>
|
||||||
|
{% endcompress %}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{% spaceless %}
|
||||||
|
|
||||||
|
{% compress js, inline %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
var value = '{{ test_non_ascii_value }}';
|
||||||
|
</script>
|
||||||
|
{% endcompress %}{% endspaceless %}
|
||||||
@@ -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 %}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{% spaceless %}
|
||||||
|
|
||||||
|
{% compress js %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
alert("{{ lower("testtemplatetag") }}");
|
||||||
|
</script>
|
||||||
|
{% endcompress %}{% endspaceless %}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{% spaceless %}
|
||||||
|
|
||||||
|
{% compress js %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
alert("{{ content|default("Ooops!") }}");
|
||||||
|
</script>
|
||||||
|
{% endcompress %}{% endspaceless %}
|
||||||
Reference in New Issue
Block a user