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