base.py 1.3 KB

12345678910111213141516171819202122232425262728293031
  1. from django.forms.renderers import DjangoTemplates, Jinja2
  2. from django.test import SimpleTestCase
  3. try:
  4. import jinja2
  5. except ImportError:
  6. jinja2 = None
  7. class WidgetTest(SimpleTestCase):
  8. beatles = (('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))
  9. @classmethod
  10. def setUpClass(cls):
  11. cls.django_renderer = DjangoTemplates()
  12. cls.jinja2_renderer = Jinja2() if jinja2 else None
  13. cls.renderers = [cls.django_renderer] + ([cls.jinja2_renderer] if cls.jinja2_renderer else [])
  14. super().setUpClass()
  15. def check_html(self, widget, name, value, html='', attrs=None, strict=False, **kwargs):
  16. assertEqual = self.assertEqual if strict else self.assertHTMLEqual
  17. if self.jinja2_renderer:
  18. output = widget.render(name, value, attrs=attrs, renderer=self.jinja2_renderer, **kwargs)
  19. # Django escapes quotes with '"' while Jinja2 uses '"'.
  20. output = output.replace('"', '"')
  21. # Django escapes single quotes with ''' while Jinja2 uses '''.
  22. output = output.replace(''', ''')
  23. assertEqual(output, html)
  24. output = widget.render(name, value, attrs=attrs, renderer=self.django_renderer, **kwargs)
  25. assertEqual(output, html)