# -*- coding: utf-8 -*-
from __future__ import with_statement, unicode_literals
import sys
from django.test import TestCase
from django.utils import unittest, six
from django.test.utils import override_settings
from compressor.conf import settings
from compressor.tests.test_base import css_tag
@unittest.skipIf(six.PY3 and sys.version_info[:2] < (3, 3),
'Jinja can only run on Python < 3 and >= 3.3')
class TestJinja2CompressorExtension(TestCase):
"""
Test case for jinja2 extension.
.. note::
At tests we need to make some extra care about whitespace. Please note
that we use jinja2 specific controls (*minus* character at block's
beginning or end). For more information see jinja2 documentation.
"""
def assertStrippedEqual(self, result, expected):
self.assertEqual(result.strip(), expected.strip(), "%r != %r" % (
result.strip(), expected.strip()))
def setUp(self):
import jinja2
self.jinja2 = jinja2
from compressor.contrib.jinja2ext import CompressorExtension
self.env = self.jinja2.Environment(extensions=[CompressorExtension])
def test_error_raised_if_no_arguments_given(self):
self.assertRaises(self.jinja2.exceptions.TemplateSyntaxError,
self.env.from_string, '{% compress %}Foobar{% endcompress %}')
def test_error_raised_if_wrong_kind_given(self):
self.assertRaises(self.jinja2.exceptions.TemplateSyntaxError,
self.env.from_string, '{% compress foo %}Foobar{% endcompress %}')
def test_error_raised_if_wrong_closing_kind_given(self):
self.assertRaises(self.jinja2.exceptions.TemplateSyntaxError,
self.env.from_string, '{% compress js %}Foobar{% endcompress css %}')
def test_error_raised_if_wrong_mode_given(self):
self.assertRaises(self.jinja2.exceptions.TemplateSyntaxError,
self.env.from_string, '{% compress css foo %}Foobar{% endcompress %}')
@override_settings(COMPRESS_ENABLED=False)
def test_compress_is_disabled(self):
tag_body = '\n'.join([
'',
'',
'',
])
template_string = '{% compress css %}' + tag_body + '{% endcompress %}'
template = self.env.from_string(template_string)
self.assertEqual(tag_body, template.render())
# Test with explicit kind
template_string = '{% compress css %}' + tag_body + '{% endcompress css %}'
template = self.env.from_string(template_string)
self.assertEqual(tag_body, template.render())
def test_empty_tag(self):
template = self.env.from_string("""{% compress js %}{% block js %}{% endblock %}{% endcompress %}""")
context = {'STATIC_URL': settings.COMPRESS_URL}
self.assertEqual('', template.render(context))
def test_empty_tag_with_kind(self):
template = self.env.from_string("""{% compress js %}{% block js %}
{% endblock %}{% endcompress js %}""")
context = {'STATIC_URL': settings.COMPRESS_URL}
self.assertEqual('', template.render(context))
def test_css_tag(self):
template = self.env.from_string("""{% compress css -%}
{% endcompress %}""")
context = {'STATIC_URL': settings.COMPRESS_URL}
out = css_tag("/static/CACHE/css/e41ba2cc6982.css")
self.assertEqual(out, template.render(context))
def test_nonascii_css_tag(self):
template = self.env.from_string("""{% compress css -%}
{% endcompress %}""")
context = {'STATIC_URL': settings.COMPRESS_URL}
out = css_tag("/static/CACHE/css/799f6defe43c.css")
self.assertEqual(out, template.render(context))
def test_js_tag(self):
template = self.env.from_string("""{% compress js -%}
{% endcompress %}""")
context = {'STATIC_URL': settings.COMPRESS_URL}
out = ''
self.assertEqual(out, template.render(context))
def test_nonascii_js_tag(self):
template = self.env.from_string("""{% compress js -%}
{% endcompress %}""")
context = {'STATIC_URL': settings.COMPRESS_URL}
out = ''
self.assertEqual(out, template.render(context))
def test_nonascii_latin1_js_tag(self):
template = self.env.from_string("""{% compress js -%}
{% endcompress %}""")
context = {'STATIC_URL': settings.COMPRESS_URL}
out = ''
self.assertEqual(out, template.render(context))
def test_css_inline(self):
template = self.env.from_string("""{% compress css, inline -%}
{% endcompress %}""")
context = {'STATIC_URL': settings.COMPRESS_URL}
out = '\n'.join([
'',
])
self.assertEqual(out, template.render(context))
def test_js_inline(self):
template = self.env.from_string("""{% compress js, inline -%}
{% endcompress %}""")
context = {'STATIC_URL': settings.COMPRESS_URL}
out = ''
self.assertEqual(out, template.render(context))
def test_nonascii_inline_css(self):
with self.settings(COMPRESS_ENABLED=False):
template = self.env.from_string('{% compress css %}'
'{% endcompress %}')
out = ''
context = {'STATIC_URL': settings.COMPRESS_URL}
self.assertEqual(out, template.render(context))