test_renderers.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import os
  2. import unittest
  3. from django.forms.renderers import (
  4. BaseRenderer,
  5. DjangoDivFormRenderer,
  6. DjangoTemplates,
  7. Jinja2,
  8. Jinja2DivFormRenderer,
  9. TemplatesSetting,
  10. )
  11. from django.test import SimpleTestCase
  12. from django.utils.deprecation import RemovedInDjango60Warning
  13. try:
  14. import jinja2
  15. except ImportError:
  16. jinja2 = None
  17. class SharedTests:
  18. expected_widget_dir = "templates"
  19. def test_installed_apps_template_found(self):
  20. """Can find a custom template in INSTALLED_APPS."""
  21. renderer = self.renderer()
  22. # Found because forms_tests is .
  23. tpl = renderer.get_template("forms_tests/custom_widget.html")
  24. expected_path = os.path.abspath(
  25. os.path.join(
  26. os.path.dirname(__file__),
  27. "..",
  28. self.expected_widget_dir + "/forms_tests/custom_widget.html",
  29. )
  30. )
  31. self.assertEqual(tpl.origin.name, expected_path)
  32. class BaseTemplateRendererTests(SimpleTestCase):
  33. def test_get_renderer(self):
  34. with self.assertRaisesMessage(
  35. NotImplementedError, "subclasses must implement get_template()"
  36. ):
  37. BaseRenderer().get_template("")
  38. class DjangoTemplatesTests(SharedTests, SimpleTestCase):
  39. renderer = DjangoTemplates
  40. @unittest.skipIf(jinja2 is None, "jinja2 required")
  41. class Jinja2Tests(SharedTests, SimpleTestCase):
  42. renderer = Jinja2
  43. expected_widget_dir = "jinja2"
  44. class TemplatesSettingTests(SharedTests, SimpleTestCase):
  45. renderer = TemplatesSetting
  46. class DeprecationTests(SimpleTestCase):
  47. def test_django_div_renderer_warning(self):
  48. msg = (
  49. "The DjangoDivFormRenderer transitional form renderer is deprecated. Use "
  50. "DjangoTemplates instead."
  51. )
  52. with self.assertRaisesMessage(RemovedInDjango60Warning, msg):
  53. DjangoDivFormRenderer()
  54. def test_jinja2_div_renderer_warning(self):
  55. msg = (
  56. "The Jinja2DivFormRenderer transitional form renderer is deprecated. Use "
  57. "Jinja2 instead."
  58. )
  59. with self.assertRaisesMessage(RemovedInDjango60Warning, msg):
  60. Jinja2DivFormRenderer()