# -*- 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))